diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index a79f7ab22af7e2..e4241de7d42e75 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -125,7 +125,7 @@
# Startup
-/benchmark/misc/startup.js @nodejs/startup
+/benchmark/misc/startup-* @nodejs/startup
/lib/internal/bootstrap/* @nodejs/startup
/src/node_builtins* @nodejs/startup
/src/node_realm* @nodejs/startup @nodejs/realm
diff --git a/.github/workflows/tools.yml b/.github/workflows/tools.yml
index 50481a26822cb4..225b7b107ef39e 100644
--- a/.github/workflows/tools.yml
+++ b/.github/workflows/tools.yml
@@ -27,7 +27,7 @@ on:
- googletest
- histogram
- icu
- - libuv
+ # - libuv
- lint-md-dependencies
- llhttp
- minimatch
@@ -174,14 +174,17 @@ jobs:
cat temp-output
tail -n1 temp-output | grep "NEW_VERSION=" >> "$GITHUB_ENV" || true
rm temp-output
- - id: libuv
- subsystem: deps
- label: dependencies
- run: |
- ./tools/dep_updaters/update-libuv.sh > temp-output
- cat temp-output
- tail -n1 temp-output | grep "NEW_VERSION=" >> "$GITHUB_ENV" || true
- rm temp-output
+ # libuv update was disabled because of Feb 14, 2024 security releas
+ # modified the bundled version of libuv, we cannot automatically update
+ # libuv without potentially undoing those changes.
+ # - id: libuv
+ # subsystem: deps
+ # label: dependencies
+ # run: |
+ # ./tools/dep_updaters/update-libuv.sh > temp-output
+ # cat temp-output
+ # tail -n1 temp-output | grep "NEW_VERSION=" >> "$GITHUB_ENV" || true
+ # rm temp-output
- id: lint-md-dependencies
subsystem: tools
label: tools
diff --git a/Makefile b/Makefile
index b7871bf218572c..1113873a21a298 100644
--- a/Makefile
+++ b/Makefile
@@ -187,11 +187,11 @@ config.gypi: configure configure.py src/node_version.h
.PHONY: install
install: all ## Installs node into $PREFIX (default=/usr/local).
- $(PYTHON) tools/install.py $@ '$(DESTDIR)' '$(PREFIX)'
+ $(PYTHON) tools/install.py $@ --dest-dir '$(DESTDIR)' --prefix '$(PREFIX)'
.PHONY: uninstall
uninstall: ## Uninstalls node from $PREFIX (default=/usr/local).
- $(PYTHON) tools/install.py $@ '$(DESTDIR)' '$(PREFIX)'
+ $(PYTHON) tools/install.py $@ --dest-dir '$(DESTDIR)' --prefix '$(PREFIX)'
.PHONY: clean
.NOTPARALLEL: clean
@@ -379,6 +379,28 @@ test/addons/.docbuildstamp: $(DOCBUILDSTAMP_PREREQS) tools/doc/node_modules
[ $$? -eq 0 ] && touch $@; \
fi
+# All files that will be included in headers tarball should be listed as deps
+# for generating headers. The list is manually synchronized with install.py.
+ADDONS_HEADERS_PREREQS := tools/install.py \
+ config.gypi common.gypi \
+ $(wildcard deps/openssl/config/*.h) \
+ $(wildcard deps/openssl/openssl/include/openssl/*.h) \
+ $(wildcard deps/uv/include/*.h) \
+ $(wildcard deps/uv/include/*/*.h) \
+ $(wildcard deps/v8/include/*.h) \
+ $(wildcard deps/v8/include/*/*.h) \
+ deps/zlib/zconf.h deps/zlib/zlib.h \
+ src/node.h src/node_api.h src/js_native_api.h src/js_native_api_types.h \
+ src/node_api_types.h src/node_buffer.h src/node_object_wrap.h \
+ src/node_version.h
+
+ADDONS_HEADERS_DIR = out/$(BUILDTYPE)/addons_headers
+
+# Generate node headers which will be used for building addons.
+test/addons/.headersbuildstamp: $(ADDONS_HEADERS_PREREQS)
+ $(PYTHON) tools/install.py install --headers-only --dest-dir '$(ADDONS_HEADERS_DIR)' --prefix '/'
+ @touch $@
+
ADDONS_BINDING_GYPS := \
$(filter-out test/addons/??_*/binding.gyp, \
$(wildcard test/addons/*/binding.gyp))
@@ -387,16 +409,11 @@ ADDONS_BINDING_SOURCES := \
$(filter-out test/addons/??_*/*.cc, $(wildcard test/addons/*/*.cc)) \
$(filter-out test/addons/??_*/*.h, $(wildcard test/addons/*/*.h))
-ADDONS_PREREQS := config.gypi \
- deps/npm/node_modules/node-gyp/package.json tools/build-addons.mjs \
- deps/uv/include/*.h deps/v8/include/*.h \
- src/node.h src/node_buffer.h src/node_object_wrap.h src/node_version.h
+ADDONS_PREREQS := test/addons/.headersbuildstamp \
+ deps/npm/node_modules/node-gyp/package.json tools/build_addons.py
define run_build_addons
-env npm_config_loglevel=$(LOGLEVEL) npm_config_nodedir="$$PWD" \
- npm_config_python="$(PYTHON)" $(NODE) "$$PWD/tools/build-addons.mjs" \
- "$$PWD/deps/npm/node_modules/node-gyp/bin/node-gyp.js" \
- $1
+env $(PYTHON) "$$PWD/tools/build_addons.py" --loglevel=$(LOGLEVEL) --headers-dir "$(ADDONS_HEADERS_DIR)" $1
touch $2
endef
@@ -429,8 +446,7 @@ JS_NATIVE_API_BINDING_SOURCES := \
# Implicitly depends on $(NODE_EXE), see the build-js-native-api-tests rule for rationale.
test/js-native-api/.buildstamp: $(ADDONS_PREREQS) \
$(JS_NATIVE_API_BINDING_GYPS) $(JS_NATIVE_API_BINDING_SOURCES) \
- src/node_api.h src/node_api_types.h src/js_native_api.h \
- src/js_native_api_types.h src/js_native_api_v8.h src/js_native_api_v8_internals.h
+ src/js_native_api_v8.h src/js_native_api_v8_internals.h
@$(call run_build_addons,"$$PWD/test/js-native-api",$@)
.PHONY: build-js-native-api-tests
@@ -454,8 +470,7 @@ NODE_API_BINDING_SOURCES := \
# Implicitly depends on $(NODE_EXE), see the build-node-api-tests rule for rationale.
test/node-api/.buildstamp: $(ADDONS_PREREQS) \
$(NODE_API_BINDING_GYPS) $(NODE_API_BINDING_SOURCES) \
- src/node_api.h src/node_api_types.h src/js_native_api.h \
- src/js_native_api_types.h src/js_native_api_v8.h src/js_native_api_v8_internals.h
+ src/js_native_api_v8.h src/js_native_api_v8_internals.h
@$(call run_build_addons,"$$PWD/test/node-api",$@)
.PHONY: build-node-api-tests
@@ -660,9 +675,10 @@ test-addons: test-build test-js-native-api test-node-api
.PHONY: test-addons-clean
.NOTPARALLEL: test-addons-clean
test-addons-clean:
+ $(RM) -r "$(ADDONS_HEADERS_DIR)"
$(RM) -r test/addons/??_*/
$(RM) -r test/addons/*/build
- $(RM) test/addons/.buildstamp test/addons/.docbuildstamp
+ $(RM) test/addons/.buildstamp test/addons/.docbuildstamp test/addons/.headersbuildstamp
$(MAKE) test-js-native-api-clean
$(MAKE) test-node-api-clean
@@ -1216,7 +1232,7 @@ $(TARBALL)-headers: release-only
--tag=$(TAG) \
--release-urlbase=$(RELEASE_URLBASE) \
$(CONFIG_FLAGS) $(BUILD_RELEASE_FLAGS)
- HEADERS_ONLY=1 $(PYTHON) tools/install.py install '$(TARNAME)' '/'
+ $(PYTHON) tools/install.py install --headers-only --dest-dir '$(TARNAME)' --prefix '/'
find $(TARNAME)/ -type l | xargs $(RM)
tar -cf $(TARNAME)-headers.tar $(TARNAME)
$(RM) -r $(TARNAME)
diff --git a/README.md b/README.md
index 40217ef2339dc2..356542a581a0e0 100644
--- a/README.md
+++ b/README.md
@@ -196,6 +196,8 @@ For information about the governance of the Node.js project, see
**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) -
@@ -333,8 +335,6 @@ For information about the governance of the Node.js project, see
**Debadree Chatterjee** <> (he/him)
* [deokjinkim](https://github.com/deokjinkim) -
**Deokjin Kim** <> (he/him)
-* [devnexen](https://github.com/devnexen) -
- **David Carlier** <>
* [devsnek](https://github.com/devsnek) -
**Gus Caplan** <> (they/them)
* [edsadr](https://github.com/edsadr) -
@@ -413,8 +413,6 @@ For information about the governance of the Node.js project, see
**Mestery** <> (he/him)
* [mhdawson](https://github.com/mhdawson) -
**Michael Dawson** <> (he/him)
-* [miladfarca](https://github.com/miladfarca) -
- **Milad Fa** <> (he/him)
* [mildsunrise](https://github.com/mildsunrise) -
**Alba Mendez** <> (she/her)
* [MoLow](https://github.com/MoLow) -
@@ -481,6 +479,8 @@ For information about the governance of the Node.js project, see
**Yash Ladha** <> (he/him)
* [ZYSzys](https://github.com/ZYSzys) -
**Yongsheng Zhang** <> (he/him)
+* [zcbenz](https://github.com/zcbenz) -
+ **Cheng Zhao** (he/him)
@@ -521,6 +521,8 @@ For information about the governance of the Node.js project, see
**David Cai** <> (he/him)
* [davisjam](https://github.com/davisjam) -
**Jamie Davis** <> (he/him)
+* [devnexen](https://github.com/devnexen) -
+ **David Carlier** <>
* [digitalinfinity](https://github.com/digitalinfinity) -
**Hitesh Kanwathirtha** <> (he/him)
* [dmabupt](https://github.com/dmabupt) -
@@ -603,6 +605,8 @@ For information about the governance of the Node.js project, see
**Nicu Micleușanu** <> (he/him)
* [mikeal](https://github.com/mikeal) -
**Mikeal Rogers** <>
+* [miladfarca](https://github.com/miladfarca) -
+ **Milad Fa** <> (he/him)
* [misterdjules](https://github.com/misterdjules) -
**Julien Gilli** <>
* [mmarchini](https://github.com/mmarchini) -
diff --git a/benchmark/assert/deepequal-map.js b/benchmark/assert/deepequal-map.js
index 0b08c82c499a57..fb3f7cd316028f 100644
--- a/benchmark/assert/deepequal-map.js
+++ b/benchmark/assert/deepequal-map.js
@@ -5,7 +5,7 @@ const { deepEqual, deepStrictEqual, notDeepEqual, notDeepStrictEqual } =
require('assert');
const bench = common.createBenchmark(main, {
- n: [5e2],
+ n: [5e3],
len: [5e2],
strict: [0, 1],
method: [
diff --git a/benchmark/assert/deepequal-typedarrays.js b/benchmark/assert/deepequal-typedarrays.js
index c06ff8fb2f3099..86826d6588ef86 100644
--- a/benchmark/assert/deepequal-typedarrays.js
+++ b/benchmark/assert/deepequal-typedarrays.js
@@ -9,7 +9,7 @@ const bench = common.createBenchmark(main, {
'Float32Array',
'Uint32Array',
],
- n: [5e2],
+ n: [25000],
strict: [0, 1],
method: [
'deepEqual',
diff --git a/benchmark/crypto/oneshot-hash.js b/benchmark/crypto/oneshot-hash.js
new file mode 100644
index 00000000000000..0d518c5afe2e95
--- /dev/null
+++ b/benchmark/crypto/oneshot-hash.js
@@ -0,0 +1,42 @@
+'use strict';
+
+const common = require('../common.js');
+const { createHash, hash } = require('crypto');
+const path = require('path');
+const filepath = path.resolve(__dirname, '../../test/fixtures/snapshot/typescript.js');
+const fs = require('fs');
+const assert = require('assert');
+
+const bench = common.createBenchmark(main, {
+ length: [1000, 100_000],
+ method: ['md5', 'sha1', 'sha256'],
+ type: ['string', 'buffer'],
+ n: [100_000, 1000],
+}, {
+ combinationFilter: ({ length, n }) => {
+ return length * n <= 100_000 * 1000;
+ },
+});
+
+function main({ length, type, method, n }) {
+ let data = fs.readFileSync(filepath);
+ if (type === 'string') {
+ data = data.toString().slice(0, length);
+ } else {
+ data = Uint8Array.prototype.slice.call(data, 0, length);
+ }
+
+ const oneshotHash = hash ?
+ (method, input) => hash(method, input, 'hex') :
+ (method, input) => createHash(method).update(input).digest('hex');
+ const array = [];
+ for (let i = 0; i < n; i++) {
+ array.push(null);
+ }
+ bench.start();
+ for (let i = 0; i < n; i++) {
+ array[i] = oneshotHash(method, data);
+ }
+ bench.end(n);
+ assert.strictEqual(typeof array[n - 1], 'string');
+}
diff --git a/benchmark/misc/startup.js b/benchmark/misc/startup-core.js
similarity index 100%
rename from benchmark/misc/startup.js
rename to benchmark/misc/startup-core.js
diff --git a/benchmark/perf_hooks/time-origin.js b/benchmark/perf_hooks/time-origin.js
new file mode 100644
index 00000000000000..90a24f45341ed4
--- /dev/null
+++ b/benchmark/perf_hooks/time-origin.js
@@ -0,0 +1,45 @@
+'use strict';
+
+const assert = require('assert');
+const common = require('../common.js');
+
+const bench = common.createBenchmark(main, {
+ n: [1e6],
+ method: ['timeOrigin', 'toJSON'],
+});
+
+function main({ method, n }) {
+ switch (method) {
+ case 'timeOrigin':
+ benchTimeOrigin(n);
+ break;
+ case 'toJSON':
+ benchToJSON(n);
+ break;
+ default:
+ throw new Error(`Unsupported method ${method}`);
+ }
+}
+
+function benchTimeOrigin(n) {
+ const arr = [];
+ for (let i = 0; i < n; ++i) {
+ arr.push(performance.timeOrigin);
+ }
+
+ bench.start();
+ for (let i = 0; i < n; i++) {
+ arr[i] = performance.timeOrigin;
+ }
+ bench.end(n);
+
+ assert.strictEqual(arr.length, n);
+}
+
+function benchToJSON(n) {
+ bench.start();
+ for (let i = 0; i < n; i++) {
+ performance.toJSON();
+ }
+ bench.end(n);
+}
diff --git a/deps/cares/CHANGES b/deps/cares/CHANGES
index a6481e71ac39bd..24a68a89849b67 100644
--- a/deps/cares/CHANGES
+++ b/deps/cares/CHANGES
@@ -1,5 +1,194 @@
Changelog for the c-ares project. Generated with git2changes.pl
+Version 1.27.0 (22 Feb 2024)
+
+GitHub (22 Feb 2024)
+- [Brad House brought this change]
+
+ Release 1.27.0 (#715)
+
+ release prep for 1.27.0 release
+
+- [Brad House brought this change]
+
+ Merge pull request from GHSA-mg26-v6qh-x48q
+
+- [Oliver Welsh brought this change]
+
+ Add flag to not use a default local named server on channel initialization (#713)
+
+ Hello, I work on an application for Microsoft which uses c-ares to
+ perform DNS lookups. We have made some minor changes to the library over
+ time, and would like to contribute these back to the project in case
+ they are useful more widely. This PR adds a new channel init flag,
+ described below.
+
+ Please let me know if I can include any more information to make this PR
+ better/easier for you to review. Thanks!
+
+ **Summary**
+ When initializing a channel with `ares_init_options()`, if there are no
+ nameservers available (because `ARES_OPT_SERVERS` is not used and
+ `/etc/resolv.conf` is either empty or not available) then a default
+ local named server will be added to the channel.
+
+ However in some applications a local named server will never be
+ available. In this case, all subsequent queries on the channel will
+ fail.
+
+ If we know this ahead of time, then it may be preferred to fail channel
+ initialization directly rather than wait for the queries to fail. This
+ gives better visibility, since we know that the failure is due to
+ missing servers rather than something going wrong with the queries.
+
+ This PR adds a new flag `ARES_FLAG_NO_DFLT_SVR`, to indicate that a
+ default local named server should not be added to a channel in this
+ scenario. Instead, a new error `ARES_EINITNOSERVER` is returned and
+ initialization fails.
+
+ **Testing**
+ I have added 2 new FV tests:
+ - `ContainerNoDfltSvrEmptyInit` to test that initialization fails when
+ no nameservers are available and the flag is set.
+ - `ContainerNoDfltSvrFullInit` to test that initialization still
+ succeeds when the flag is set but other nameservers are available.
+
+ Existing FVs are all passing.
+
+ **Documentation**
+ I have had a go at manually updating the docs to describe the new
+ flag/error, but couldn't see any contributing guidance about testing
+ this. Please let me know if you'd like anything more here.
+
+ ---------
+
+ Fix By: Oliver Welsh (@oliverwelsh)
+
+Brad House (18 Feb 2024)
+- badge should be only main branch
+
+- put logo in readme
+
+- clang-format
+
+GitHub (17 Feb 2024)
+- [Brad House brought this change]
+
+ Add ares_queue_active_queries() (#712)
+
+ Add a function to request the number of active queries from an ares
+ channel. This will return the number of inflight requests to dns
+ servers. Some functions like `ares_getaddrinfo()` when using `AF_UNSPEC`
+ may enqueue multiple queries which will be reflected in this count.
+
+ In the future, if we implement support for queuing (e.g. for throttling
+ purposes), and/or implement support for tracking user-requested queries
+ (e.g. for cancelation), we can provide additional functions for
+ inspecting those queues.
+
+ Fix By: Brad House (@bradh352)
+
+- [Vojtěch Vobr brought this change]
+
+ fix leaking DNS suffix search list on Windows (#711)
+
+ ares__strsplit provides a newly allocated buffer, so suffix list in
+ line variable isn't referenced anymore. Related ares_free seems to
+ have gone missing during refactoring made in #594
+
+ Fix By: Vojtěch Vobr (@vojtechvobr)
+
+- [Brad House brought this change]
+
+ Add ares_queue_wait_empty() for use with EventThreads (#710)
+
+ It may be useful to wait for the queue to be empty under certain conditions (mainly test cases), expose a function to efficiently do this and rework test cases to use it.
+
+ Fix By: Brad House (@bradh352)
+
+- [Cheng Zhao brought this change]
+
+ Fix warning about ignoring result of write (#709)
+
+ Fix the compiler warning from clang:
+
+ ```
+ ares_event_wake_pipe.c:120:3: error: ignoring return value of function declared with 'warn_unused_result' attribute [-Werror,-Wunused-result]
+ 120 | write(p->filedes[1], "1", 1);
+ | ^~~~~ ~~~~~~~~~~~~~~~~~~~~~
+ 1 error generated.
+ ```
+
+ Fix By: Cheng Zhao (@zcbenz)
+
+Brad House (5 Feb 2024)
+- CMake: don't override target output locations if not top-level
+
+ CMake was unconditionally setting output locations globally, but
+ it should not do that if it is not the top-level project (e.g.
+ during chain building). Detect this fact and only set the output
+ location when top level.
+
+ Fixes Issue: #708
+ Fix By: Anthony Alayo (@anthonyalayo)
+
+- make docs match PR #705
+
+GitHub (31 Jan 2024)
+- [Cristian Rodríguez brought this change]
+
+ lower EDNSPACKETSZ to 1232 (#705)
+
+ In 2020, it was agreed this is optimal maximum size and all
+ major server software was updated to reflect this.
+
+ see https://www.dnsflagday.net/2020/#faq
+
+ Fix By: Cristian Rodríguez (@crrodriguez)
+
+Brad House (30 Jan 2024)
+- fix version
+
+- fix typo
+
+- bad symlink
+
+- attempt to fix pkgconfig on windows for static builds
+
+GitHub (28 Jan 2024)
+- [Andriy Utkin brought this change]
+
+ docs/ares_init_options.3: fix args in analogy (#701)
+
+ Fix By: Andriy Utkin
+
+- [Brad House brought this change]
+
+ sonarcloud: fix minor codesmells (#702)
+
+ Fix minor codesmells, mostly related to missing 'const' in the new event system.
+
+ Fix By: Brad House (@bradh352)
+
+Brad House (26 Jan 2024)
+- remove outdated copyright text
+
+- spelling
+
+- sanity check GTest includes GMock component
+
+GitHub (26 Jan 2024)
+- [Brad House brought this change]
+
+ build-time disabled threads breaks c-ares (#700)
+
+ Regression introduced in 1.26.0, building c-ares with threading disabled results in ares_init{_options}() failing.
+
+ Also adds a new CI test case to prevent this regression in the future.
+
+ Fixes Bug: #699
+ Fix By: Brad House (@bradh352)
+
Version 1.26.0 (25 Jan 2024)
Brad House (25 Jan 2024)
@@ -6035,113 +6224,3 @@ Yang Tse (30 Jan 2013)
URL: http://curl.haxx.se/mail/lib-2013-01/0306.html
- zz40-xc-ovr.m4: reinstate strict AC_REQUIRE macro dependencies
-
-- zz40-xc-ovr.m4: avoid double single-quote usage
-
-- zz40-xc-ovr.m4: parentheses balancing of 'case' statements
-
- m4 quadrigraph shell comment technique allows proper autoconf
- parentheses balancing in shell 'case' statements. The presence
- of unbalanced parentheses may otherwise trigger expansion bugs.
-
-- zz40-xc-ovr.m4: internals overhauling
-
- - Update comments
- - Execute commands in subshells
- - Faster path separator check
- - Fix missing 'test' command
- - Rename private macros
- - Minimize AC_REQUIRE usage
-
-- zz40-xc-ovr.m4: redirect errors and warnings to stderr
-
-- configure: use XC_CONFIGURE_PREAMBLE early checks
-
- Some basic checks we make were placed early enough in generated
- configure script when using autoconf 2.5X versions. Newer autoconf
- versions expand these checks much further into the configure script,
- rendering them useless. Using XC_CONFIGURE_PREAMBLE fixes placement
- of early intended checks across all our autoconf supported versions.
-
-- zz40-xc-ovr.m4: provide XC_CONFIGURE_PREAMBLE macro
-
-- configure: autotools compatibility fixes - step I
-
- Fix proper macro expansion order across autotools versions for
- C compiler and preprocessor program checks.
-
-- configure: fix automake 1.13 compatibility
-
- Tested with:
-
- buildconf: autoconf version 2.69
- buildconf: autom4te version 2.69
- buildconf: autoheader version 2.69
- buildconf: automake version 1.13.1
- buildconf: aclocal version 1.13.1
- buildconf: libtool version 2.4
- buildconf: GNU m4 version 1.4.16
-
-- ares_private.h: use again memdebug.h instead of curl_memdebug.h
-
-- configure.ac: replace AM_CONFIG_HEADER with AC_CONFIG_HEADERS
-
- automake 1.13 errors if AM_CONFIG_HEADER is used in configure script.
-
-- cares-override.m4: provide AC_CONFIG_MACRO_DIR definition conditionally
-
- Provide a 'traceable' AC_CONFIG_MACRO_DIR definition only when using
- an autoconf version that does not provide it, instead of what we were
- doing up to now of providing and overriding AC_CONFIG_MACRO_DIR for
- all autoconf versions.
-
-- ares_private.h: use curl_memdebug.h instead of memdebug.h
-
-- vc6cares.dsp: add ares_create_query.c and ares_parse_soa_reply.c
-
-- cares-functions.m4: improve gethostname arg 2 data type check
-
-- setup_once.h: HP-UX specific 'bool', 'false' and 'true' definitions.
-
- Also reverts commit bceb40095a
-
-- configure: check if compiler halts on function prototype mismatch
-
-- cares-functions.m4: add gethostname arg 2 data type check and definition
-
-- cares-functions.m4: update thread-safeness detection of getaddrinfo()
-
- Take in account that POSIX standard Issue 7 drops h_errno support. Now, we also
- consider getaddrinfo() to be thread-safe when (_POSIX_C_SOURCE >= 200809L) or
- (_XOPEN_SOURCE >= 700) independently of whether h_errno exists or not.
-
- Take in account that h_errno might be a modifiable lvalue not defined as
- a C preprocessor macro.
-
-- setup_once.h: HP-UX issue workaround
-
- Issue: When building a 32bit target with large file support HP-UX
- header file may simultaneously provide two different
- sets of declarations for sendfile and sendpath functions, one with
- static and another with external linkage. Given that we do not use
- mentioned functions we really don't care which linkage is the
- appropriate one, but on the other hand, the double declaration emmits
- warnings when using the HP-UX compiler and errors when using modern
- gcc versions resulting in fatal compilation errors.
-
- Mentioned issue is now fixed as long as we don't use sendfile nor
- sendpath functions.
-
-- setup_once.h: refactor inclusion of and
-
- Inclusion of these two header files now done in setup_once.h
-
-- Header inclusion clean-up
-
- Remove header inclusions already done in setup_once.h
-
-- setup_once.h: HP-UX specific TRUE and FALSE definitions
-
- Some HP-UX system headers require TRUE defined to 1 and FALSE to 0.
-
-- ares_timeout.c: fix compiler warning
diff --git a/deps/cares/CMakeLists.txt b/deps/cares/CMakeLists.txt
index 24d1b41fb7001e..e951cafd7b4068 100644
--- a/deps/cares/CMakeLists.txt
+++ b/deps/cares/CMakeLists.txt
@@ -12,10 +12,10 @@ INCLUDE (CheckCSourceCompiles)
INCLUDE (CheckStructHasMember)
INCLUDE (CheckLibraryExists)
-PROJECT (c-ares LANGUAGES C VERSION "1.26.0" )
+PROJECT (c-ares LANGUAGES C VERSION "1.27.0" )
# Set this version before release
-SET (CARES_VERSION "1.26.0")
+SET (CARES_VERSION "1.27.0")
INCLUDE (GNUInstallDirs) # include this *AFTER* PROJECT(), otherwise paths are wrong.
@@ -30,7 +30,7 @@ INCLUDE (GNUInstallDirs) # include this *AFTER* PROJECT(), otherwise paths are w
# For example, a version of 4:0:2 would generate output such as:
# libname.so -> libname.so.2
# libname.so.2 -> libname.so.2.2.0
-SET (CARES_LIB_VERSIONINFO "13:0:11")
+SET (CARES_LIB_VERSIONINFO "14:0:12")
OPTION (CARES_STATIC "Build as a static library" OFF)
@@ -91,11 +91,15 @@ IF (CARES_SYMBOL_HIDING)
CMAKE_POLICY (SET CMP0063 NEW)
ENDIF ()
-# Keep build organized.
-SET (CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}")
-SET (CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}")
-SET (CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}")
-SET (PACKAGE_DIRECTORY ${PROJECT_BINARY_DIR}/package)
+# Keep build organized, but only if it is the top-level project.
+# CMake 3.21 or later has PROJECT_IS_TOP_LEVEL, but we aren't yet depending on
+# that version.
+IF (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
+ SET (CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}")
+ SET (CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}")
+ SET (CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}")
+ SET (PACKAGE_DIRECTORY ${PROJECT_BINARY_DIR}/package)
+ENDIF ()
# Destinations for installing different kinds of targets (pass to install command).
SET (TARGETS_INST_DEST
diff --git a/deps/cares/README.md b/deps/cares/README.md
index 2d9e0fff92c7f2..70aa67fce6997c 100644
--- a/deps/cares/README.md
+++ b/deps/cares/README.md
@@ -1,7 +1,6 @@
-c-ares
-======
+# [![c-ares logo](https://c-ares.org/art/c-ares-logo.svg)](https://c-ares.org/)
-[![Build Status](https://api.cirrus-ci.com/github/c-ares/c-ares.svg)](https://cirrus-ci.com/github/c-ares/c-ares)
+[![Build Status](https://api.cirrus-ci.com/github/c-ares/c-ares.svg?branch=main)](https://cirrus-ci.com/github/c-ares/c-ares)
[![Windows Build Status](https://ci.appveyor.com/api/projects/status/aevgc5914tm72pvs/branch/master?svg=true)](https://ci.appveyor.com/project/c-ares/c-ares/branch/master)
[![Coverage Status](https://coveralls.io/repos/github/c-ares/c-ares/badge.svg)](https://coveralls.io/github/c-ares/c-ares)
[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/291/badge)](https://bestpractices.coreinfrastructure.org/projects/291)
@@ -29,8 +28,7 @@ You'll find all c-ares details and news here:
https://c-ares.org/
-Notes for c-ares hackers
-------------------------
+## Notes for c-ares hackers
* The distributed `ares_build.h` file is only intended to be used on systems
which can not run the also distributed configure script.
diff --git a/deps/cares/RELEASE-NOTES.md b/deps/cares/RELEASE-NOTES.md
index 4dddfe0f4452c4..0fdcbc6b968488 100644
--- a/deps/cares/RELEASE-NOTES.md
+++ b/deps/cares/RELEASE-NOTES.md
@@ -1,38 +1,40 @@
-## c-ares version 1.26.0 - Jan 26 2024
+## c-ares version 1.27.0 - Feb 23 2024
-This is a feature and bugfix release.
+This is a security, feature, and bugfix release.
+
+Security:
+
+* Moderate. CVE-2024-25629. Reading malformatted `/etc/resolv.conf`,
+ `/etc/nsswitch.conf` or the `HOSTALIASES` file could result in a crash.
+ [GHSA-mg26-v6qh-x48q](https://github.com/c-ares/c-ares/security/advisories/GHSA-mg26-v6qh-x48q)
Features:
-* Event Thread support. Integrators are no longer requried to monitor the
- file descriptors registered by c-ares for events and call `ares_process()`
- when enabling the event thread feature via `ARES_OPT_EVENT_THREAD` passed
- to `ares_init_options()`. [PR #696](https://github.com/c-ares/c-ares/pull/696)
-* Added flags to `are_dns_parse()` to force RAW packet parsing.
- [PR #693](https://github.com/c-ares/c-ares/pull/693)
+* New function `ares_queue_active_queries()` to retrieve number of in-flight
+ queries. [PR #712](https://github.com/c-ares/c-ares/pull/712)
+* New function `ares_queue_wait_empty()` to wait for the number of in-flight
+ queries to reach zero. [PR #710](https://github.com/c-ares/c-ares/pull/710)
+* New `ARES_FLAG_NO_DEFLT_SVR` for `ares_init_options()` to return a failure if
+ no DNS servers can be found rather than attempting to use `127.0.0.1`. This
+ also introduces a new ares status code of `ARES_ENOSERVER`. [PR #713](https://github.com/c-ares/c-ares/pull/713)
Changes:
-* Mark `ares_fds()` as deprected.
- [PR #691](https://github.com/c-ares/c-ares/pull/691)
+* EDNS Packet size should be 1232 as per DNS Flag Day. [PR #705](https://github.com/c-ares/c-ares/pull/705)
Bugfixes:
-* `adig`: Differentiate between internal and server errors.
- [e10b16a](https://github.com/c-ares/c-ares/commit/e10b16a)
-* Autotools allow make to override CFLAGS/CPPFLAGS/CXXFLAGS.
- [PR #695](https://github.com/c-ares/c-ares/pull/695)
-* Autotools: fix building for 32bit windows due to stdcall symbol mangling.
- [PR #689](https://github.com/c-ares/c-ares/pull/689)
-* RR Name should not be sanity checked against the Question.
- [PR #685](https://github.com/c-ares/c-ares/pull/685)
+* Windows DNS suffix search list memory leak. [PR #711](https://github.com/c-ares/c-ares/pull/711)
+* Fix warning due to ignoring return code of `write()`. [PR #709](https://github.com/c-ares/c-ares/pull/709)
+* CMake: don't override target output locations if not top-level. [Issue #708](https://github.com/c-ares/c-ares/issues/708)
+* Fix building c-ares without thread support. [PR #700](https://github.com/c-ares/c-ares/pull/700)
Thanks go to these friendly people for their efforts and contributions for this release:
+* Anthony Alayo (@anthonyalayo)
* Brad House (@bradh352)
+* Cheng Zhao (@zcbenz)
+* Cristian Rodríguez (@crrodriguez)
* Daniel Stenberg (@bagder)
-* Erik Lax (@eriklax)
-* Gisle Vanem (@gvanem)
-
-
-
+* Oliver Welsh (@oliverwelsh)
+* Vojtěch Vobr (@vojtechvobr)
diff --git a/deps/cares/aminclude_static.am b/deps/cares/aminclude_static.am
index fd5cb10ee9c9b1..e3fc636c7b51a4 100644
--- a/deps/cares/aminclude_static.am
+++ b/deps/cares/aminclude_static.am
@@ -1,6 +1,6 @@
# aminclude_static.am generated automatically by Autoconf
-# from AX_AM_MACROS_STATIC on Fri Jan 26 17:16:23 CET 2024
+# from AX_AM_MACROS_STATIC on Fri Feb 23 08:24:27 CET 2024
# Code coverage
diff --git a/deps/cares/configure b/deps/cares/configure
index 8892c7827e3386..ac3c7b55db0565 100755
--- a/deps/cares/configure
+++ b/deps/cares/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.71 for c-ares 1.26.0.
+# Generated by GNU Autoconf 2.71 for c-ares 1.27.0.
#
# Report bugs to .
#
@@ -621,8 +621,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='c-ares'
PACKAGE_TARNAME='c-ares'
-PACKAGE_VERSION='1.26.0'
-PACKAGE_STRING='c-ares 1.26.0'
+PACKAGE_VERSION='1.27.0'
+PACKAGE_STRING='c-ares 1.27.0'
PACKAGE_BUGREPORT='c-ares mailing list: http://lists.haxx.se/listinfo/c-ares'
PACKAGE_URL=''
@@ -664,6 +664,7 @@ am__EXEEXT_TRUE
LTLIBOBJS
LIBOBJS
BUILD_SUBDIRS
+PKGCONFIG_CFLAGS
AM_CPPFLAGS
AM_CFLAGS
BUILD_TESTS_FALSE
@@ -1419,7 +1420,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures c-ares 1.26.0 to adapt to many kinds of systems.
+\`configure' configures c-ares 1.27.0 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1490,7 +1491,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of c-ares 1.26.0:";;
+ short | recursive ) echo "Configuration of c-ares 1.27.0:";;
esac
cat <<\_ACEOF
@@ -1626,7 +1627,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-c-ares configure 1.26.0
+c-ares configure 1.27.0
generated by GNU Autoconf 2.71
Copyright (C) 2021 Free Software Foundation, Inc.
@@ -2250,7 +2251,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by c-ares $as_me 1.26.0, which was
+It was created by c-ares $as_me 1.27.0, which was
generated by GNU Autoconf 2.71. Invocation command line was
$ $0$ac_configure_args_raw
@@ -3224,7 +3225,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
-CARES_VERSION_INFO="13:0:11"
+CARES_VERSION_INFO="14:0:12"
@@ -5906,7 +5907,7 @@ fi
# Define the identity of the package.
PACKAGE='c-ares'
- VERSION='1.26.0'
+ VERSION='1.27.0'
printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
@@ -20198,6 +20199,7 @@ else $as_nop
AM_CPPFLAGS="-DCARES_STATICLIB"
fi
+ PKGCONFIG_CFLAGS="-DCARES_STATICLIB"
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
printf "%s\n" "yes" >&6; }
else
@@ -25374,6 +25376,7 @@ fi
+
ac_config_files="$ac_config_files Makefile include/Makefile src/Makefile src/lib/Makefile src/tools/Makefile docs/Makefile libcares.pc"
if test -z "$BUILD_TESTS_TRUE"; then :
@@ -25928,7 +25931,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by c-ares $as_me 1.26.0, which was
+This file was extended by c-ares $as_me 1.27.0, which was
generated by GNU Autoconf 2.71. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -25996,7 +25999,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config='$ac_cs_config_escaped'
ac_cs_version="\\
-c-ares config.status 1.26.0
+c-ares config.status 1.27.0
configured by $0, generated by GNU Autoconf 2.71,
with options \\"\$ac_cs_config\\"
diff --git a/deps/cares/configure.ac b/deps/cares/configure.ac
index f820d37dd035b0..1a3ba8c3fc4c49 100644
--- a/deps/cares/configure.ac
+++ b/deps/cares/configure.ac
@@ -2,10 +2,10 @@ dnl Copyright (C) The c-ares project and its contributors
dnl SPDX-License-Identifier: MIT
AC_PREREQ([2.69])
-AC_INIT([c-ares], [1.26.0],
+AC_INIT([c-ares], [1.27.0],
[c-ares mailing list: http://lists.haxx.se/listinfo/c-ares])
-CARES_VERSION_INFO="13:0:11"
+CARES_VERSION_INFO="14:0:12"
dnl This flag accepts an argument of the form current[:revision[:age]]. So,
dnl passing -version-info 3:12:1 sets current to 3, revision to 12, and age to
dnl 1.
@@ -200,6 +200,7 @@ if test "x$enable_shared" = "xno" -a "x$enable_static" = "xyes" ; then
AC_MSG_CHECKING([whether we need CARES_STATICLIB definition])
if test "$ac_cv_native_windows" = "yes" ; then
AX_APPEND_FLAG([-DCARES_STATICLIB], [AM_CPPFLAGS])
+ PKGCONFIG_CFLAGS="-DCARES_STATICLIB"
AC_MSG_RESULT([yes])
else
AC_MSG_RESULT([no])
@@ -906,6 +907,7 @@ AM_CONDITIONAL(BUILD_TESTS, test "x$build_tests" = "xyes")
AC_SUBST(AM_CFLAGS)
AC_SUBST(AM_CPPFLAGS)
+AC_SUBST(PKGCONFIG_CFLAGS)
AC_SUBST(BUILD_SUBDIRS)
AC_CONFIG_FILES([Makefile \
diff --git a/deps/cares/docs/Makefile.inc b/deps/cares/docs/Makefile.inc
index e3800159bee8ef..3645a7fcddc58b 100644
--- a/deps/cares/docs/Makefile.inc
+++ b/deps/cares/docs/Makefile.inc
@@ -105,6 +105,9 @@ MANPAGES = ares_cancel.3 \
ares_parse_uri_reply.3 \
ares_process.3 \
ares_query.3 \
+ ares_queue.3 \
+ ares_queue_active_queries.3 \
+ ares_queue_wait_empty.3 \
ares_reinit.3 \
ares_save_options.3 \
ares_search.3 \
diff --git a/deps/cares/docs/adig.1 b/deps/cares/docs/adig.1
index f747d15b67b652..48b491b593b73c 100644
--- a/deps/cares/docs/adig.1
+++ b/deps/cares/docs/adig.1
@@ -1,19 +1,6 @@
.\"
.\" Copyright (C) the Massachusetts Institute of Technology.
.\" Copyright (C) Daniel Stenberg
-.\"
-.\" Permission to use, copy, modify, and distribute this
-.\" software and its documentation for any purpose and without
-.\" fee is hereby granted, 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.
-.\"
.\" SPDX-License-Identifier: MIT
.\"
.TH ADIG "1" "April 2011" "c-ares utilities"
@@ -78,20 +65,3 @@ Report bugs to the c-ares mailing list:
.SH "SEE ALSO"
.PP
acountry(1), ahost(1).
-.SH COPYRIGHT
-This utility is based on code/ideas contained in software written by Greg Hudson (ares)
-carrying the following notice:
-.br
-Copyright 1998 by the Massachusetts Institute of Technology.
-.br
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
-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.
-.br
-No further copyright claims are being made by the author(s) of this utility.
diff --git a/deps/cares/docs/ahost.1 b/deps/cares/docs/ahost.1
index 19bde6b4ba5932..5feed981ab62c1 100644
--- a/deps/cares/docs/ahost.1
+++ b/deps/cares/docs/ahost.1
@@ -1,19 +1,6 @@
.\"
.\" Copyright (C) the Massachusetts Institute of Technology.
.\" Copyright (C) Daniel Stenberg
-.\"
-.\" Permission to use, copy, modify, and distribute this
-.\" software and its documentation for any purpose and without
-.\" fee is hereby granted, 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.
-.\"
.\" SPDX-License-Identifier: MIT
.\"
.TH AHOST "1" "April 2011" "c-ares utilities"
@@ -60,21 +47,4 @@ Report bugs to the c-ares mailing list:
\fBhttps://lists.haxx.se/listinfo/c-ares\fR
.SH "SEE ALSO"
.PP
-acountry(1), adig(1).
-.SH COPYRIGHT
-This utility is based on code/ideas contained in software written by Greg Hudson (ares)
-carrying the following notice:
-.br
-Copyright 1998 by the Massachusetts Institute of Technology.
-.br
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
-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.
-.br
-No further copyright claims are being made by the author(s) of this utility.
+acountry(1), adig(1)
diff --git a/deps/cares/docs/ares_cancel.3 b/deps/cares/docs/ares_cancel.3
index 0e11b6cae61d90..4eecaade246312 100644
--- a/deps/cares/docs/ares_cancel.3
+++ b/deps/cares/docs/ares_cancel.3
@@ -1,18 +1,5 @@
.\"
.\" Copyright 1998 by the Massachusetts Institute of Technology.
-.\"
-.\" Permission to use, copy, modify, and distribute this
-.\" software and its documentation for any purpose and without
-.\" fee is hereby granted, 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.
-.\"
.\" SPDX-License-Identifier: MIT
.\"
.TH ARES_CANCEL 3 "31 March 2004"
diff --git a/deps/cares/docs/ares_create_query.3 b/deps/cares/docs/ares_create_query.3
index 1f5532e891dbfb..5fb59f920616f4 100644
--- a/deps/cares/docs/ares_create_query.3
+++ b/deps/cares/docs/ares_create_query.3
@@ -1,18 +1,5 @@
.\"
.\" Copyright 1998 by the Massachusetts Institute of Technology.
-.\"
-.\" Permission to use, copy, modify, and distribute this
-.\" software and its documentation for any purpose and without
-.\" fee is hereby granted, 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.
-.\"
.\" SPDX-License-Identifier: MIT
.\"
.TH ARES_CREATE_QUERY 3 "17 Aug 2012"
diff --git a/deps/cares/docs/ares_destroy.3 b/deps/cares/docs/ares_destroy.3
index a7924890367c38..8548d59c54182e 100644
--- a/deps/cares/docs/ares_destroy.3
+++ b/deps/cares/docs/ares_destroy.3
@@ -1,18 +1,5 @@
.\"
.\" Copyright 1998 by the Massachusetts Institute of Technology.
-.\"
-.\" Permission to use, copy, modify, and distribute this
-.\" software and its documentation for any purpose and without
-.\" fee is hereby granted, 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.
-.\"
.\" SPDX-License-Identifier: MIT
.\"
.TH ARES_DESTROY 3 "7 December 2004"
diff --git a/deps/cares/docs/ares_destroy_options.3 b/deps/cares/docs/ares_destroy_options.3
index 96520d3de3741b..432c4b10d7f402 100644
--- a/deps/cares/docs/ares_destroy_options.3
+++ b/deps/cares/docs/ares_destroy_options.3
@@ -1,18 +1,5 @@
.\"
.\" Copyright 1998 by the Massachusetts Institute of Technology.
-.\"
-.\" Permission to use, copy, modify, and distribute this
-.\" software and its documentation for any purpose and without
-.\" fee is hereby granted, 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.
-.\"
.\" SPDX-License-Identifier: MIT
.\"
.TH ARES_DESTROY_OPTIONS 3 "1 June 2007"
diff --git a/deps/cares/docs/ares_dup.3 b/deps/cares/docs/ares_dup.3
index 15b81a666c28d7..2395fe180a506a 100644
--- a/deps/cares/docs/ares_dup.3
+++ b/deps/cares/docs/ares_dup.3
@@ -1,18 +1,5 @@
.\"
.\" Copyright (C) 2004-2009 by Daniel Stenberg
-.\"
-.\" Permission to use, copy, modify, and distribute this
-.\" software and its documentation for any purpose and without
-.\" fee is hereby granted, 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.
-.\"
.\" SPDX-License-Identifier: MIT
.\"
.TH ARES_DUP 3 "26 May 2009"
diff --git a/deps/cares/docs/ares_expand_name.3 b/deps/cares/docs/ares_expand_name.3
index 2f3866bb00fcb6..7bd43842a2782f 100644
--- a/deps/cares/docs/ares_expand_name.3
+++ b/deps/cares/docs/ares_expand_name.3
@@ -1,18 +1,5 @@
.\"
.\" Copyright 1998 by the Massachusetts Institute of Technology.
-.\"
-.\" Permission to use, copy, modify, and distribute this
-.\" software and its documentation for any purpose and without
-.\" fee is hereby granted, 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.
-.\"
.\" SPDX-License-Identifier: MIT
.\"
.TH ARES_EXPAND_NAME 3 "20 Nov 2009"
diff --git a/deps/cares/docs/ares_expand_string.3 b/deps/cares/docs/ares_expand_string.3
index 572881853d736b..22d6654e50f38f 100644
--- a/deps/cares/docs/ares_expand_string.3
+++ b/deps/cares/docs/ares_expand_string.3
@@ -1,18 +1,5 @@
.\"
.\" Copyright 1998 by the Massachusetts Institute of Technology.
-.\"
-.\" Permission to use, copy, modify, and distribute this
-.\" software and its documentation for any purpose and without
-.\" fee is hereby granted, 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.
-.\"
.\" SPDX-License-Identifier: MIT
.\"
.TH ARES_EXPAND_NAME 3 "20 Nov 2009"
diff --git a/deps/cares/docs/ares_free_data.3 b/deps/cares/docs/ares_free_data.3
index 67cde08e50ecfa..a4de4dbf176593 100644
--- a/deps/cares/docs/ares_free_data.3
+++ b/deps/cares/docs/ares_free_data.3
@@ -1,19 +1,6 @@
.\"
.\" Copyright 1998 by the Massachusetts Institute of Technology.
.\" Copyright (C) 2004-2010 by Daniel Stenberg
-.\"
-.\" Permission to use, copy, modify, and distribute this
-.\" software and its documentation for any purpose and without
-.\" fee is hereby granted, 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.
-.\"
.\" SPDX-License-Identifier: MIT
.\"
.TH ARES_FREE_DATA 3 "5 March 2010"
diff --git a/deps/cares/docs/ares_free_hostent.3 b/deps/cares/docs/ares_free_hostent.3
index ef7840800bf1ca..973dc9dc557349 100644
--- a/deps/cares/docs/ares_free_hostent.3
+++ b/deps/cares/docs/ares_free_hostent.3
@@ -1,18 +1,5 @@
.\"
.\" Copyright 1998 by the Massachusetts Institute of Technology.
-.\"
-.\" Permission to use, copy, modify, and distribute this
-.\" software and its documentation for any purpose and without
-.\" fee is hereby granted, 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.
-.\"
.\" SPDX-License-Identifier: MIT
.\"
.TH ARES_FREE_HOSTENT 3 "23 July 1998"
diff --git a/deps/cares/docs/ares_free_string.3 b/deps/cares/docs/ares_free_string.3
index 7a4063f8f7c91a..9871b48e26e8cb 100644
--- a/deps/cares/docs/ares_free_string.3
+++ b/deps/cares/docs/ares_free_string.3
@@ -1,18 +1,5 @@
.\"
.\" Copyright 2000 by the Massachusetts Institute of Technology.
-.\"
-.\" Permission to use, copy, modify, and distribute this
-.\" software and its documentation for any purpose and without
-.\" fee is hereby granted, 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.
-.\"
.\" SPDX-License-Identifier: MIT
.\"
.TH ARES_FREE_STRING 3 "4 February 2004"
diff --git a/deps/cares/docs/ares_freeaddrinfo.3 b/deps/cares/docs/ares_freeaddrinfo.3
index 8a3bb12a48ad4b..0f2a6ae0244bc8 100644
--- a/deps/cares/docs/ares_freeaddrinfo.3
+++ b/deps/cares/docs/ares_freeaddrinfo.3
@@ -1,18 +1,5 @@
.\"
.\" Copyright 1998 by the Massachusetts Institute of Technology.
-.\"
-.\" Permission to use, copy, modify, and distribute this
-.\" software and its documentation for any purpose and without
-.\" fee is hereby granted, 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.
-.\"
.\" SPDX-License-Identifier: MIT
.\"
.TH ARES_FREEADDRINFO 3 "31 October 2018"
diff --git a/deps/cares/docs/ares_get_servers.3 b/deps/cares/docs/ares_get_servers.3
index 305a10a269f6cf..7aeaa50ee15c1b 100644
--- a/deps/cares/docs/ares_get_servers.3
+++ b/deps/cares/docs/ares_get_servers.3
@@ -1,19 +1,6 @@
.\"
.\" Copyright 1998 by the Massachusetts Institute of Technology.
.\" Copyright (C) 2008-2010 by Daniel Stenberg
-.\"
-.\" Permission to use, copy, modify, and distribute this
-.\" software and its documentation for any purpose and without
-.\" fee is hereby granted, 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.
-.\"
.\" SPDX-License-Identifier: MIT
.\"
.TH ARES_GET_SERVERS 3 "5 March 2010"
diff --git a/deps/cares/docs/ares_gethostbyname_file.3 b/deps/cares/docs/ares_gethostbyname_file.3
index 06a21b50c1b08e..98cb93fd8115cb 100644
--- a/deps/cares/docs/ares_gethostbyname_file.3
+++ b/deps/cares/docs/ares_gethostbyname_file.3
@@ -1,18 +1,5 @@
.\"
.\" Copyright 1998 by the Massachusetts Institute of Technology.
-.\"
-.\" Permission to use, copy, modify, and distribute this
-.\" software and its documentation for any purpose and without
-.\" fee is hereby granted, 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.
-.\"
.\" SPDX-License-Identifier: MIT
.\"
.TH ARES_GETHOSTBYNAME 3 "25 July 1998"
diff --git a/deps/cares/docs/ares_inet_ntop.3 b/deps/cares/docs/ares_inet_ntop.3
index 83306a1a12e5db..b5ae557a27e853 100644
--- a/deps/cares/docs/ares_inet_ntop.3
+++ b/deps/cares/docs/ares_inet_ntop.3
@@ -1,18 +1,5 @@
.\"
.\" Copyright (C) 2013 by Daniel Stenberg
-.\"
-.\" Permission to use, copy, modify, and distribute this
-.\" software and its documentation for any purpose and without
-.\" fee is hereby granted, 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.
-.\"
.\" SPDX-License-Identifier: MIT
.\"
.TH ARES_INET_NTOP 3 "17 Feb 2013"
diff --git a/deps/cares/docs/ares_inet_pton.3 b/deps/cares/docs/ares_inet_pton.3
index d727533cff7944..ca95010b955531 100644
--- a/deps/cares/docs/ares_inet_pton.3
+++ b/deps/cares/docs/ares_inet_pton.3
@@ -1,18 +1,5 @@
.\"
.\" Copyright (C) 2013 by Daniel Stenberg
-.\"
-.\" Permission to use, copy, modify, and distribute this
-.\" software and its documentation for any purpose and without
-.\" fee is hereby granted, 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.
-.\"
.\" SPDX-License-Identifier: MIT
.\"
.TH ARES_INET_PTON 3 "17 Feb 2013"
diff --git a/deps/cares/docs/ares_init_options.3 b/deps/cares/docs/ares_init_options.3
index 7700defd8f4dc8..000cc1d9a592b5 100644
--- a/deps/cares/docs/ares_init_options.3
+++ b/deps/cares/docs/ares_init_options.3
@@ -47,7 +47,7 @@ int ares_init(ares_channel_t **\fIchannelptr\fP);
.fi
.SH DESCRIPTION
The \fBares_init(3)\fP function is equivalent to calling
-\fBares_init_options(NULL, 0)\fP. It is recommended to use
+\fBares_init_options(channelptr, NULL, 0)\fP. It is recommended to use
\fBares_init_options(3)\fP instead and to set or make configurable the
appropriate options for your application.
@@ -120,6 +120,10 @@ used to test or debug name servers.
.B ARES_FLAG_EDNS
Include an EDNS pseudo-resource record (RFC 2671) in generated requests. As of
v1.22, this is on by default if flags are otherwise not set.
+.TP 23
+.B ARES_FLAG_NO_DFLT_SVR
+Do not attempt to add a default local named server if there are no other
+servers available. Instead, fail initialization with \fIARES_ENOSERVER\fP.
.RE
.TP 18
.B ARES_OPT_TIMEOUT
@@ -248,7 +252,7 @@ The receive buffer size to set for the socket.
.br
The message size to be advertised in EDNS; only takes effect if the
.B ARES_FLAG_EDNS
-flag is set. Defaults to 1280, the recommended size.
+flag is set. Defaults to 1232, the recommended size.
.TP 18
.B ARES_OPT_RESOLVCONF
.B char *\fIresolvconf_path\fP;
@@ -342,6 +346,9 @@ The process's available memory was exhausted.
.TP 14
.B ARES_ENOTINITIALIZED
c-ares library initialization not yet performed.
+.TP 14
+.B ARES_ENOSERVER
+No DNS servers were available to use.
.SH NOTES
When initializing from
.B /etc/resolv.conf,
diff --git a/deps/cares/docs/ares_library_cleanup.3 b/deps/cares/docs/ares_library_cleanup.3
index d6d76959b9d845..5eccdbc669df66 100644
--- a/deps/cares/docs/ares_library_cleanup.3
+++ b/deps/cares/docs/ares_library_cleanup.3
@@ -1,19 +1,6 @@
.\"
.\" Copyright 1998 by the Massachusetts Institute of Technology.
.\" Copyright (C) 2004-2009 by Daniel Stenberg
-.\"
-.\" Permission to use, copy, modify, and distribute this
-.\" software and its documentation for any purpose and without
-.\" fee is hereby granted, 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.
-.\"
.\" SPDX-License-Identifier: MIT
.\"
.TH ARES_LIBRARY_CLEANUP 3 "19 May 2009"
diff --git a/deps/cares/docs/ares_library_init.3 b/deps/cares/docs/ares_library_init.3
index 2f61ce2fcf8844..f77effb85651ed 100644
--- a/deps/cares/docs/ares_library_init.3
+++ b/deps/cares/docs/ares_library_init.3
@@ -1,19 +1,6 @@
.\"
.\" Copyright 1998 by the Massachusetts Institute of Technology.
.\" Copyright (C) 2004-2009 by Daniel Stenberg
-.\"
-.\" Permission to use, copy, modify, and distribute this
-.\" software and its documentation for any purpose and without
-.\" fee is hereby granted, 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.
-.\"
.\" SPDX-License-Identifier: MIT
.\"
.TH ARES_LIBRARY_INIT 3 "19 May 2009"
diff --git a/deps/cares/docs/ares_library_init_android.3 b/deps/cares/docs/ares_library_init_android.3
index 5c8bb7537f7937..590fad5c811858 100644
--- a/deps/cares/docs/ares_library_init_android.3
+++ b/deps/cares/docs/ares_library_init_android.3
@@ -1,18 +1,5 @@
.\"
.\" Copyright (C) 2017 by John Schember
-.\"
-.\" Permission to use, copy, modify, and distribute this
-.\" software and its documentation for any purpose and without
-.\" fee is hereby granted, 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.
-.\"
.\" SPDX-License-Identifier: MIT
.\"
.TH ARES_LIBRARY_INIT_ANDROID 3 "13 Sept 2017"
diff --git a/deps/cares/docs/ares_library_initialized.3 b/deps/cares/docs/ares_library_initialized.3
index 8ddc14539a190b..ece6404d352345 100644
--- a/deps/cares/docs/ares_library_initialized.3
+++ b/deps/cares/docs/ares_library_initialized.3
@@ -1,18 +1,5 @@
.\"
.\" Copyright (C) 2016 by Daniel Stenberg
-.\"
-.\" Permission to use, copy, modify, and distribute this
-.\" software and its documentation for any purpose and without
-.\" fee is hereby granted, 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.
-.\"
.\" SPDX-License-Identifier: MIT
.\"
.TH ARES_LIBRARY_INITIALIZED 3 "29 Sep 2016"
diff --git a/deps/cares/docs/ares_mkquery.3 b/deps/cares/docs/ares_mkquery.3
index 9b9aa807176a5f..0075347a617926 100644
--- a/deps/cares/docs/ares_mkquery.3
+++ b/deps/cares/docs/ares_mkquery.3
@@ -1,18 +1,5 @@
.\"
.\" Copyright 1998, 2000 by the Massachusetts Institute of Technology.
-.\"
-.\" Permission to use, copy, modify, and distribute this
-.\" software and its documentation for any purpose and without
-.\" fee is hereby granted, 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.
-.\"
.\" SPDX-License-Identifier: MIT
.\"
.TH ARES_MKQUERY 3 "20 Nov 2009"
diff --git a/deps/cares/docs/ares_parse_a_reply.3 b/deps/cares/docs/ares_parse_a_reply.3
index 8dd20c3dcd922e..91f6a3fd8d724c 100644
--- a/deps/cares/docs/ares_parse_a_reply.3
+++ b/deps/cares/docs/ares_parse_a_reply.3
@@ -1,18 +1,5 @@
.\"
.\" Copyright 1998 by the Massachusetts Institute of Technology.
-.\"
-.\" Permission to use, copy, modify, and distribute this
-.\" software and its documentation for any purpose and without
-.\" fee is hereby granted, 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.
-.\"
.\" SPDX-License-Identifier: MIT
.\"
.TH ARES_PARSE_A_REPLY 3 "25 July 1998"
diff --git a/deps/cares/docs/ares_parse_aaaa_reply.3 b/deps/cares/docs/ares_parse_aaaa_reply.3
index ebb490464cc41a..cc11f23439209b 100644
--- a/deps/cares/docs/ares_parse_aaaa_reply.3
+++ b/deps/cares/docs/ares_parse_aaaa_reply.3
@@ -1,18 +1,5 @@
.\"
.\" Copyright 2005 by Dominick Meglio.
-.\"
-.\" Permission to use, copy, modify, and distribute this
-.\" software and its documentation for any purpose and without
-.\" fee is hereby granted, 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.
-.\"
.\" SPDX-License-Identifier: MIT
.\"
.TH ARES_PARSE_AAAA_REPLY 3 "20 Nov 2009"
diff --git a/deps/cares/docs/ares_parse_caa_reply.3 b/deps/cares/docs/ares_parse_caa_reply.3
index ef95769fcc235b..740562c1f288a7 100644
--- a/deps/cares/docs/ares_parse_caa_reply.3
+++ b/deps/cares/docs/ares_parse_caa_reply.3
@@ -1,18 +1,5 @@
.\"
.\" Copyright 2020 Danny Sonnenschein
-.\"
-.\" Permission to use, copy, modify, and distribute this
-.\" software and its documentation for any purpose and without
-.\" fee is hereby granted, 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.
-.\"
.\" SPDX-License-Identifier: MIT
.\"
.TH ARES_PARSE_CAA_REPLY 3 "16 September 2020"
diff --git a/deps/cares/docs/ares_parse_mx_reply.3 b/deps/cares/docs/ares_parse_mx_reply.3
index 851380ad7ef90c..1516389931e870 100644
--- a/deps/cares/docs/ares_parse_mx_reply.3
+++ b/deps/cares/docs/ares_parse_mx_reply.3
@@ -1,18 +1,5 @@
.\"
.\" Copyright 1998 by the Massachusetts Institute of Technology.
-.\"
-.\" Permission to use, copy, modify, and distribute this
-.\" software and its documentation for any purpose and without
-.\" fee is hereby granted, 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.
-.\"
.\" SPDX-License-Identifier: MIT
.\"
.TH ARES_PARSE_MX_REPLY 3 "4 August 2009"
diff --git a/deps/cares/docs/ares_parse_naptr_reply.3 b/deps/cares/docs/ares_parse_naptr_reply.3
index b5ef19c508fee2..0b8d5f17feced0 100644
--- a/deps/cares/docs/ares_parse_naptr_reply.3
+++ b/deps/cares/docs/ares_parse_naptr_reply.3
@@ -1,18 +1,5 @@
.\"
.\" Copyright 1998 by the Massachusetts Institute of Technology.
-.\"
-.\" Permission to use, copy, modify, and distribute this
-.\" software and its documentation for any purpose and without
-.\" fee is hereby granted, 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.
-.\"
.\" SPDX-License-Identifier: MIT
.\"
.TH ARES_PARSE_NAPTR_REPLY 3 "23 February 2012"
diff --git a/deps/cares/docs/ares_parse_ns_reply.3 b/deps/cares/docs/ares_parse_ns_reply.3
index 2fed14c47430d4..6ab2d9b51e41d2 100644
--- a/deps/cares/docs/ares_parse_ns_reply.3
+++ b/deps/cares/docs/ares_parse_ns_reply.3
@@ -1,18 +1,5 @@
.\"
.\" Copyright 1998 by the Massachusetts Institute of Technology.
-.\"
-.\" Permission to use, copy, modify, and distribute this
-.\" software and its documentation for any purpose and without
-.\" fee is hereby granted, 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.
-.\"
.\" SPDX-License-Identifier: MIT
.\"
.TH ARES_PARSE_NS_REPLY 3 "10 February 2007"
diff --git a/deps/cares/docs/ares_parse_ptr_reply.3 b/deps/cares/docs/ares_parse_ptr_reply.3
index c554ecaa1f12e3..4432e9e3c9aa85 100644
--- a/deps/cares/docs/ares_parse_ptr_reply.3
+++ b/deps/cares/docs/ares_parse_ptr_reply.3
@@ -1,18 +1,5 @@
.\"
.\" Copyright 1998 by the Massachusetts Institute of Technology.
-.\"
-.\" Permission to use, copy, modify, and distribute this
-.\" software and its documentation for any purpose and without
-.\" fee is hereby granted, 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.
-.\"
.\" SPDX-License-Identifier: MIT
.\"
.TH ARES_PARSE_PTR_REPLY 3 "25 July 1998"
diff --git a/deps/cares/docs/ares_parse_soa_reply.3 b/deps/cares/docs/ares_parse_soa_reply.3
index f816126ff554e0..8a80d3fd4ae17b 100644
--- a/deps/cares/docs/ares_parse_soa_reply.3
+++ b/deps/cares/docs/ares_parse_soa_reply.3
@@ -1,18 +1,5 @@
.\"
.\" Copyright 1998 by the Massachusetts Institute of Technology.
-.\"
-.\" Permission to use, copy, modify, and distribute this
-.\" software and its documentation for any purpose and without
-.\" fee is hereby granted, 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.
-.\"
.\" SPDX-License-Identifier: MIT
.\"
.TH ARES_PARSE_SOA_REPLY 3 "29 May 2012"
diff --git a/deps/cares/docs/ares_parse_srv_reply.3 b/deps/cares/docs/ares_parse_srv_reply.3
index d16f0d8a4ee458..3d8e8437a03821 100644
--- a/deps/cares/docs/ares_parse_srv_reply.3
+++ b/deps/cares/docs/ares_parse_srv_reply.3
@@ -1,18 +1,5 @@
.\"
.\" Copyright 1998 by the Massachusetts Institute of Technology.
-.\"
-.\" Permission to use, copy, modify, and distribute this
-.\" software and its documentation for any purpose and without
-.\" fee is hereby granted, 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.
-.\"
.\" SPDX-License-Identifier: MIT
.\"
.TH ARES_PARSE_SRV_REPLY 3 "4 August 2009"
diff --git a/deps/cares/docs/ares_parse_txt_reply.3 b/deps/cares/docs/ares_parse_txt_reply.3
index 22807facf5d8bf..f85c67fad97db8 100644
--- a/deps/cares/docs/ares_parse_txt_reply.3
+++ b/deps/cares/docs/ares_parse_txt_reply.3
@@ -1,18 +1,5 @@
.\"
.\" Copyright 1998 by the Massachusetts Institute of Technology.
-.\"
-.\" Permission to use, copy, modify, and distribute this
-.\" software and its documentation for any purpose and without
-.\" fee is hereby granted, 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.
-.\"
.\" SPDX-License-Identifier: MIT
.\"
.TH ARES_PARSE_TXT_REPLY 3 "27 October 2009"
diff --git a/deps/cares/docs/ares_parse_uri_reply.3 b/deps/cares/docs/ares_parse_uri_reply.3
index d2ec037bdae9d9..3044d4ad6f0590 100644
--- a/deps/cares/docs/ares_parse_uri_reply.3
+++ b/deps/cares/docs/ares_parse_uri_reply.3
@@ -1,18 +1,5 @@
.\"
.\" Copyright 1998 by the Massachusetts Institute of Technology.
-.\"
-.\" Permission to use, copy, modify, and distribute this
-.\" software and its documentation for any purpose and without
-.\" fee is hereby granted, 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.
-.\"
.\" SPDX-License-Identifier: MIT
.\"
.TH ARES_PARSE_URI_REPLY 3 "14 August 2020"
diff --git a/deps/cares/docs/ares_process.3 b/deps/cares/docs/ares_process.3
index c4d118c1f58e16..94c98f60a3a744 100644
--- a/deps/cares/docs/ares_process.3
+++ b/deps/cares/docs/ares_process.3
@@ -1,18 +1,5 @@
.\"
.\" Copyright 1998 by the Massachusetts Institute of Technology.
-.\"
-.\" Permission to use, copy, modify, and distribute this
-.\" software and its documentation for any purpose and without
-.\" fee is hereby granted, 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.
-.\"
.\" SPDX-License-Identifier: MIT
.\"
.TH ARES_PROCESS 3 "25 July 1998"
diff --git a/deps/cares/docs/ares_query.3 b/deps/cares/docs/ares_query.3
index f87a5648222812..00e44f52594d90 100644
--- a/deps/cares/docs/ares_query.3
+++ b/deps/cares/docs/ares_query.3
@@ -1,18 +1,5 @@
.\"
.\" Copyright 1998 by the Massachusetts Institute of Technology.
-.\"
-.\" Permission to use, copy, modify, and distribute this
-.\" software and its documentation for any purpose and without
-.\" fee is hereby granted, 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.
-.\"
.\" SPDX-License-Identifier: MIT
.\"
.TH ARES_QUERY 3 "24 July 1998"
@@ -134,6 +121,10 @@ The query was cancelled.
The name service channel
.I channel
is being destroyed; the query will not be completed.
+.TP 19
+.B ARES_ENOSERVER
+The query will not be completed because no DNS servers were configured on the
+channel.
.PP
The callback argument
.I timeouts
diff --git a/deps/cares/docs/ares_save_options.3 b/deps/cares/docs/ares_save_options.3
index 7beecd52770278..ae171dc4c21ea5 100644
--- a/deps/cares/docs/ares_save_options.3
+++ b/deps/cares/docs/ares_save_options.3
@@ -1,18 +1,5 @@
.\"
.\" Copyright 1998 by the Massachusetts Institute of Technology.
-.\"
-.\" Permission to use, copy, modify, and distribute this
-.\" software and its documentation for any purpose and without
-.\" fee is hereby granted, 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.
-.\"
.\" SPDX-License-Identifier: MIT
.\"
.TH ARES_SAVE_OPTIONS 3 "5 March 2010"
diff --git a/deps/cares/docs/ares_search.3 b/deps/cares/docs/ares_search.3
index e4db64db8cecd4..08246d349d02fd 100644
--- a/deps/cares/docs/ares_search.3
+++ b/deps/cares/docs/ares_search.3
@@ -1,18 +1,5 @@
.\"
.\" Copyright 1998 by the Massachusetts Institute of Technology.
-.\"
-.\" Permission to use, copy, modify, and distribute this
-.\" software and its documentation for any purpose and without
-.\" fee is hereby granted, 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.
-.\"
.\" SPDX-License-Identifier: MIT
.\"
.TH ARES_SEARCH 3 "24 July 1998"
@@ -135,6 +122,9 @@ The query was cancelled.
The name service channel
.I channel
is being destroyed; the query will not be completed.
+.TP 19
+.B ARES_ENOSERVER
+No query completed successfully; no DNS servers were configured on the channel.
.PP
The callback argument
.I timeouts
diff --git a/deps/cares/docs/ares_send.3 b/deps/cares/docs/ares_send.3
index 8126647f4b7fcb..1fe1c0273e7379 100644
--- a/deps/cares/docs/ares_send.3
+++ b/deps/cares/docs/ares_send.3
@@ -77,6 +77,10 @@ The query was cancelled.
The name service channel
.I channel
is being destroyed; the query will not be completed.
+.TP 19
+.B ARES_ENOSERVER
+The query will not be completed because no DNS servers were configured on the
+channel.
.PP
The callback argument
.I timeouts
diff --git a/deps/cares/docs/ares_set_local_dev.3 b/deps/cares/docs/ares_set_local_dev.3
index 54dfcc51eebf8b..2289339768925f 100644
--- a/deps/cares/docs/ares_set_local_dev.3
+++ b/deps/cares/docs/ares_set_local_dev.3
@@ -1,18 +1,5 @@
.\"
.\" Copyright 2010 by Ben Greear
-.\"
-.\" Permission to use, copy, modify, and distribute this
-.\" software and its documentation for any purpose and without
-.\" fee is hereby granted, 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.
-.\"
.\" SPDX-License-Identifier: MIT
.\"
.TH ARES_SET_LOCAL_DEV 3 "30 June 2010"
diff --git a/deps/cares/docs/ares_set_local_ip4.3 b/deps/cares/docs/ares_set_local_ip4.3
index 51d7d02bad12ac..83ad8b86c19cfb 100644
--- a/deps/cares/docs/ares_set_local_ip4.3
+++ b/deps/cares/docs/ares_set_local_ip4.3
@@ -1,18 +1,5 @@
.\"
.\" Copyright 2010 by Ben Greear
-.\"
-.\" Permission to use, copy, modify, and distribute this
-.\" software and its documentation for any purpose and without
-.\" fee is hereby granted, 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.
-.\"
.\" SPDX-License-Identifier: MIT
.\"
.TH ARES_SET_LOCAL_IP4 3 "30 June 2010"
diff --git a/deps/cares/docs/ares_set_local_ip6.3 b/deps/cares/docs/ares_set_local_ip6.3
index 57d1f2315d4a63..fafae8dc913ec2 100644
--- a/deps/cares/docs/ares_set_local_ip6.3
+++ b/deps/cares/docs/ares_set_local_ip6.3
@@ -1,18 +1,5 @@
.\"
.\" Copyright 2010 by Ben Greear
-.\"
-.\" Permission to use, copy, modify, and distribute this
-.\" software and its documentation for any purpose and without
-.\" fee is hereby granted, 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.
-.\"
.\" SPDX-License-Identifier: MIT
.\"
.TH ARES_SET_LOCAL_IP6 3 "30 June 2010"
diff --git a/deps/cares/docs/ares_set_servers.3 b/deps/cares/docs/ares_set_servers.3
index ca58231b27f59b..410c279c806a41 100644
--- a/deps/cares/docs/ares_set_servers.3
+++ b/deps/cares/docs/ares_set_servers.3
@@ -1,18 +1,5 @@
.\"
.\" Copyright 2010 by Ben Greear
-.\"
-.\" Permission to use, copy, modify, and distribute this
-.\" software and its documentation for any purpose and without
-.\" fee is hereby granted, 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.
-.\"
.\" SPDX-License-Identifier: MIT
.\"
.TH ARES_SET_SERVERS 3 "5 March 2010"
diff --git a/deps/cares/docs/ares_set_servers_csv.3 b/deps/cares/docs/ares_set_servers_csv.3
index 95abedfb8028f1..7d37a90fa43c65 100644
--- a/deps/cares/docs/ares_set_servers_csv.3
+++ b/deps/cares/docs/ares_set_servers_csv.3
@@ -1,18 +1,5 @@
.\"
.\" Copyright 2010 by Ben Greear
-.\"
-.\" Permission to use, copy, modify, and distribute this
-.\" software and its documentation for any purpose and without
-.\" fee is hereby granted, 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.
-.\"
.\" SPDX-License-Identifier: MIT
.\"
.TH ARES_SET_SERVERS_CSV 3 "5 Dec 2023"
diff --git a/deps/cares/docs/ares_set_sortlist.3 b/deps/cares/docs/ares_set_sortlist.3
index c93e5262b81465..eb7bf6dc9addf3 100644
--- a/deps/cares/docs/ares_set_sortlist.3
+++ b/deps/cares/docs/ares_set_sortlist.3
@@ -1,17 +1,5 @@
.\"
.\" Copyright (C) Daniel Stenberg
-.\" Permission to use, copy, modify, and distribute this
-.\" software and its documentation for any purpose and without
-.\" fee is hereby granted, 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.
-.\"
.\" SPDX-License-Identifier: MIT
.\"
.TH ARES_SET_SORTLIST 3 "23 November 2015"
diff --git a/deps/cares/docs/ares_strerror.3 b/deps/cares/docs/ares_strerror.3
index 745a0d607beb41..32eab05f311119 100644
--- a/deps/cares/docs/ares_strerror.3
+++ b/deps/cares/docs/ares_strerror.3
@@ -1,18 +1,5 @@
.\"
.\" Copyright 1998 by the Massachusetts Institute of Technology.
-.\"
-.\" Permission to use, copy, modify, and distribute this
-.\" software and its documentation for any purpose and without
-.\" fee is hereby granted, 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.
-.\"
.\" SPDX-License-Identifier: MIT
.\"
.TH ARES_STRERROR 3 "25 July 1998"
diff --git a/deps/cares/docs/ares_threadsafety.3 b/deps/cares/docs/ares_threadsafety.3
index 119c79ff5aa709..a3c29d5f6ecea5 100644
--- a/deps/cares/docs/ares_threadsafety.3
+++ b/deps/cares/docs/ares_threadsafety.3
@@ -1,7 +1,7 @@
.\"
.\" SPDX-License-Identifier: MIT
.\"
-.TH ARES_REINIT 3 "26 November 2023"
+.TH ARES_THREADSAFETY 3 "26 November 2023"
.SH NAME
ares_threadsafety \- Query if c-ares was built with thread-safety
.SH SYNOPSIS
diff --git a/deps/cares/docs/ares_timeout.3 b/deps/cares/docs/ares_timeout.3
index fd33193fe80857..c1e39545993d53 100644
--- a/deps/cares/docs/ares_timeout.3
+++ b/deps/cares/docs/ares_timeout.3
@@ -1,18 +1,5 @@
.\"
.\" Copyright 1998 by the Massachusetts Institute of Technology.
-.\"
-.\" Permission to use, copy, modify, and distribute this
-.\" software and its documentation for any purpose and without
-.\" fee is hereby granted, 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.
-.\"
.\" SPDX-License-Identifier: MIT
.\"
.TH ARES_TIMEOUT 3 "25 July 1998"
diff --git a/deps/cares/docs/ares_version.3 b/deps/cares/docs/ares_version.3
index e6a338e34108f9..c85be42bdbac83 100644
--- a/deps/cares/docs/ares_version.3
+++ b/deps/cares/docs/ares_version.3
@@ -1,18 +1,5 @@
.\"
.\" Copyright 2004 by Daniel Stenberg
-.\"
-.\" Permission to use, copy, modify, and distribute this
-.\" software and its documentation for any purpose and without
-.\" fee is hereby granted, 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.
-.\"
.\" SPDX-License-Identifier: MIT
.\"
.TH ARES_VERSION 3 "29 January 2004"
diff --git a/deps/cares/include/ares.h b/deps/cares/include/ares.h
index 99c4ec5081b64e..acbd6583074a56 100644
--- a/deps/cares/include/ares.h
+++ b/deps/cares/include/ares.h
@@ -109,9 +109,9 @@ extern "C" {
# endif
#else
# if defined(__GNUC__) && __GNUC__ >= 4
-# define CARES_EXTERN __attribute__ ((visibility ("default")))
+# define CARES_EXTERN __attribute__((visibility("default")))
# elif defined(__INTEL_COMPILER) && __INTEL_COMPILER >= 900
-# define CARES_EXTERN __attribute__ ((visibility ("default")))
+# define CARES_EXTERN __attribute__((visibility("default")))
# elif defined(__SUNPRO_C)
# define CARES_EXTERN _global
# else
@@ -161,8 +161,10 @@ typedef enum {
ARES_ECANCELLED = 24, /* introduced in 1.7.0 */
/* More ares_getaddrinfo error codes */
- ARES_ESERVICE = 25 /* ares_getaddrinfo() was passed a text service name that
- * is not recognized. introduced in 1.16.0 */
+ ARES_ESERVICE = 25, /* ares_getaddrinfo() was passed a text service name that
+ * is not recognized. introduced in 1.16.0 */
+
+ ARES_ENOSERVER = 26 /* No DNS servers were configured */
} ares_status_t;
typedef enum {
@@ -175,15 +177,15 @@ typedef enum {
/*! Default (best choice) event system */
ARES_EVSYS_DEFAULT = 0,
/*! Win32 IOCP/AFD_POLL event system */
- ARES_EVSYS_WIN32 = 1,
+ ARES_EVSYS_WIN32 = 1,
/*! Linux epoll */
- ARES_EVSYS_EPOLL = 2,
+ ARES_EVSYS_EPOLL = 2,
/*! BSD/MacOS kqueue */
- ARES_EVSYS_KQUEUE = 3,
+ ARES_EVSYS_KQUEUE = 3,
/*! POSIX poll() */
- ARES_EVSYS_POLL = 4,
+ ARES_EVSYS_POLL = 4,
/*! last fallback on Unix-like systems, select() */
- ARES_EVSYS_SELECT = 5
+ ARES_EVSYS_SELECT = 5
} ares_evsys_t;
/* Flag values */
@@ -196,6 +198,7 @@ typedef enum {
#define ARES_FLAG_NOALIASES (1 << 6)
#define ARES_FLAG_NOCHECKRESP (1 << 7)
#define ARES_FLAG_EDNS (1 << 8)
+#define ARES_FLAG_NO_DFLT_SVR (1 << 9)
/* Option mask values */
#define ARES_OPT_FLAGS (1 << 0)
@@ -333,7 +336,7 @@ struct ares_options {
int udp_max_queries;
int maxtimeout; /* in milliseconds */
unsigned int qcache_max_ttl; /* Maximum TTL for query cache, 0=disabled */
- ares_evsys_t evsys;
+ ares_evsys_t evsys;
};
struct hostent;
@@ -747,31 +750,54 @@ struct ares_addr_port_node {
CARES_EXTERN int ares_set_servers(ares_channel_t *channel,
const struct ares_addr_node *servers);
CARES_EXTERN int
- ares_set_servers_ports(ares_channel_t *channel,
- const struct ares_addr_port_node *servers);
+ ares_set_servers_ports(ares_channel_t *channel,
+ const struct ares_addr_port_node *servers);
/* Incoming string format: host[:port][,host[:port]]... */
-CARES_EXTERN int ares_set_servers_csv(ares_channel_t *channel,
- const char *servers);
-CARES_EXTERN int ares_set_servers_ports_csv(ares_channel_t *channel,
- const char *servers);
-CARES_EXTERN char *ares_get_servers_csv(ares_channel_t *channel);
+CARES_EXTERN int ares_set_servers_csv(ares_channel_t *channel,
+ const char *servers);
+CARES_EXTERN int ares_set_servers_ports_csv(ares_channel_t *channel,
+ const char *servers);
+CARES_EXTERN char *ares_get_servers_csv(ares_channel_t *channel);
-CARES_EXTERN int ares_get_servers(ares_channel_t *channel,
- struct ares_addr_node **servers);
-CARES_EXTERN int ares_get_servers_ports(ares_channel_t *channel,
- struct ares_addr_port_node **servers);
+CARES_EXTERN int ares_get_servers(ares_channel_t *channel,
+ struct ares_addr_node **servers);
+CARES_EXTERN int ares_get_servers_ports(ares_channel_t *channel,
+ struct ares_addr_port_node **servers);
-CARES_EXTERN const char *ares_inet_ntop(int af, const void *src, char *dst,
- ares_socklen_t size);
+CARES_EXTERN const char *ares_inet_ntop(int af, const void *src, char *dst,
+ ares_socklen_t size);
-CARES_EXTERN int ares_inet_pton(int af, const char *src, void *dst);
+CARES_EXTERN int ares_inet_pton(int af, const char *src, void *dst);
/*! Whether or not the c-ares library was built with threadsafety
*
* \return ARES_TRUE if built with threadsafety, ARES_FALSE if not
*/
-CARES_EXTERN ares_bool_t ares_threadsafety(void);
+CARES_EXTERN ares_bool_t ares_threadsafety(void);
+
+
+/*! Block until notified that there are no longer any queries in queue, or
+ * the specified timeout has expired.
+ *
+ * \param[in] channel Initialized ares channel
+ * \param[in] timeout_ms Number of milliseconds to wait for the queue to be
+ * empty. -1 for Infinite.
+ * \return ARES_ENOTIMP if not built with threading support, ARES_ETIMEOUT
+ * if requested timeout expires, ARES_SUCCESS when queue is empty.
+ */
+CARES_EXTERN ares_status_t ares_queue_wait_empty(ares_channel_t *channel,
+ int timeout_ms);
+
+
+/*! Retrieve the total number of active queries pending answers from servers.
+ * Some c-ares requests may spawn multiple queries, such as ares_getaddrinfo()
+ * when using AF_UNSPEC, which will be reflected in this number.
+ *
+ * \param[in] channel Initialized ares channel
+ * \return Number of active queries to servers
+ */
+CARES_EXTERN size_t ares_queue_active_queries(ares_channel_t *channel);
#ifdef __cplusplus
}
diff --git a/deps/cares/include/ares_dns_record.h b/deps/cares/include/ares_dns_record.h
index 8a6d7781bf50dd..3f802aefa3231e 100644
--- a/deps/cares/include/ares_dns_record.h
+++ b/deps/cares/include/ares_dns_record.h
@@ -386,12 +386,18 @@ typedef enum {
/*! Data type for flags to ares_dns_parse() */
typedef enum {
- ARES_DNS_PARSE_AN_BASE_RAW = 1 << 0, /*!< Parse Answers from RFC 1035 that allow name compression as RAW */
- ARES_DNS_PARSE_NS_BASE_RAW = 1 << 1, /*!< Parse Authority from RFC 1035 that allow name compression as RAW */
- ARES_DNS_PARSE_AR_BASE_RAW = 1 << 2, /*!< Parse Additional from RFC 1035 that allow name compression as RAW */
- ARES_DNS_PARSE_AN_EXT_RAW = 1 << 3, /*!< Parse Answers from later RFCs (no name compression) RAW */
- ARES_DNS_PARSE_NS_EXT_RAW = 1 << 4, /*!< Parse Authority from later RFCs (no name compression) as RAW */
- ARES_DNS_PARSE_AR_EXT_RAW = 1 << 5, /*!< Parse Additional from later RFCs (no name compression) as RAW */
+ /*! Parse Answers from RFC 1035 that allow name compression as RAW */
+ ARES_DNS_PARSE_AN_BASE_RAW = 1 << 0,
+ /*! Parse Authority from RFC 1035 that allow name compression as RAW */
+ ARES_DNS_PARSE_NS_BASE_RAW = 1 << 1,
+ /*! Parse Additional from RFC 1035 that allow name compression as RAW */
+ ARES_DNS_PARSE_AR_BASE_RAW = 1 << 2,
+ /*! Parse Answers from later RFCs (no name compression) RAW */
+ ARES_DNS_PARSE_AN_EXT_RAW = 1 << 3,
+ /*! Parse Authority from later RFCs (no name compression) as RAW */
+ ARES_DNS_PARSE_NS_EXT_RAW = 1 << 4,
+ /*< Parse Additional from later RFCs (no name compression) as RAW */
+ ARES_DNS_PARSE_AR_EXT_RAW = 1 << 5
} ares_dns_parse_flags_t;
/*! String representation of DNS Record Type
diff --git a/deps/cares/include/ares_version.h b/deps/cares/include/ares_version.h
index 6768a33e0814d8..44dbdef161ac35 100644
--- a/deps/cares/include/ares_version.h
+++ b/deps/cares/include/ares_version.h
@@ -31,12 +31,12 @@
#define ARES_COPYRIGHT "2004 - 2024 Daniel Stenberg, ."
#define ARES_VERSION_MAJOR 1
-#define ARES_VERSION_MINOR 26
+#define ARES_VERSION_MINOR 27
#define ARES_VERSION_PATCH 0
#define ARES_VERSION \
((ARES_VERSION_MAJOR << 16) | (ARES_VERSION_MINOR << 8) | \
(ARES_VERSION_PATCH))
-#define ARES_VERSION_STR "1.26.0"
+#define ARES_VERSION_STR "1.27.0"
#if (ARES_VERSION >= 0x010700)
# define CARES_HAVE_ARES_LIBRARY_INIT 1
diff --git a/deps/cares/libcares.pc.in b/deps/cares/libcares.pc.in
index 54f6d68bdceea1..36c7c8cf3d24e6 100644
--- a/deps/cares/libcares.pc.in
+++ b/deps/cares/libcares.pc.in
@@ -17,6 +17,6 @@ Description: asynchronous DNS lookup library
Version: @VERSION@
Requires:
Requires.private:
-Cflags: -I${includedir}
+Cflags: -I${includedir} @PKGCONFIG_CFLAGS@
Libs: -L${libdir} -lcares
Libs.private: @CARES_PRIVATE_LIBS@
diff --git a/deps/cares/src/lib/ares__buf.c b/deps/cares/src/lib/ares__buf.c
index 02b43cb5dc8974..8f9f32d71867ff 100644
--- a/deps/cares/src/lib/ares__buf.c
+++ b/deps/cares/src/lib/ares__buf.c
@@ -802,7 +802,7 @@ static ares_bool_t ares__buf_split_isduplicate(ares__llist_t *list,
for (node = ares__llist_node_first(list); node != NULL;
node = ares__llist_node_next(node)) {
- ares__buf_t *buf = ares__llist_node_val(node);
+ const ares__buf_t *buf = ares__llist_node_val(node);
size_t plen = 0;
const unsigned char *ptr = ares__buf_peek(buf, &plen);
diff --git a/deps/cares/src/lib/ares__htable.c b/deps/cares/src/lib/ares__htable.c
index 04bd8fdf7fd889..7aaf2d2089b231 100644
--- a/deps/cares/src/lib/ares__htable.c
+++ b/deps/cares/src/lib/ares__htable.c
@@ -135,23 +135,24 @@ ares__htable_t *ares__htable_create(ares__htable_hashfunc_t hash_func,
return NULL;
}
-
const void **ares__htable_all_buckets(const ares__htable_t *htable, size_t *num)
{
const void **out = NULL;
size_t cnt = 0;
size_t i;
- if (htable == NULL || num == NULL)
+ if (htable == NULL || num == NULL) {
return NULL;
+ }
*num = 0;
out = ares_malloc_zero(sizeof(*out) * htable->num_keys);
- if (out == NULL)
+ if (out == NULL) {
return NULL;
+ }
- for (i=0; isize; i++) {
+ for (i = 0; i < htable->size; i++) {
ares__llist_node_t *node;
for (node = ares__llist_node_first(htable->buckets[i]); node != NULL;
node = ares__llist_node_next(node)) {
@@ -163,7 +164,6 @@ const void **ares__htable_all_buckets(const ares__htable_t *htable, size_t *num)
return out;
}
-
/*! Grabs the Hashtable index from the key and length. The h index is
* the hash of the function reduced to the size of the bucket list.
* We are doing "hash & (size - 1)" since we are guaranteeing a power of
diff --git a/deps/cares/src/lib/ares__htable.h b/deps/cares/src/lib/ares__htable.h
index 0e83c24ef72eff..fd1c0a2366022f 100644
--- a/deps/cares/src/lib/ares__htable.h
+++ b/deps/cares/src/lib/ares__htable.h
@@ -120,7 +120,8 @@ size_t ares__htable_num_keys(const ares__htable_t *htable);
* will be a dangling pointer. It is expected wrappers will make
* such values safe by duplicating them.
*/
-const void **ares__htable_all_buckets(const ares__htable_t *htable, size_t *num);
+const void **ares__htable_all_buckets(const ares__htable_t *htable,
+ size_t *num);
/*! Insert bucket into hashtable
*
diff --git a/deps/cares/src/lib/ares__htable_asvp.c b/deps/cares/src/lib/ares__htable_asvp.c
index 66c9955f0f2199..3c1d2a336fad35 100644
--- a/deps/cares/src/lib/ares__htable_asvp.c
+++ b/deps/cares/src/lib/ares__htable_asvp.c
@@ -112,15 +112,17 @@ ares__htable_asvp_t *
return NULL;
}
-ares_socket_t *ares__htable_asvp_keys(const ares__htable_asvp_t *htable, size_t *num)
+ares_socket_t *ares__htable_asvp_keys(const ares__htable_asvp_t *htable,
+ size_t *num)
{
const void **buckets = NULL;
size_t cnt = 0;
ares_socket_t *out = NULL;
size_t i;
- if (htable == NULL || num == NULL)
+ if (htable == NULL || num == NULL) {
return NULL;
+ }
*num = 0;
@@ -135,7 +137,7 @@ ares_socket_t *ares__htable_asvp_keys(const ares__htable_asvp_t *htable, size_t
return NULL;
}
- for (i=0; ikey;
}
@@ -144,7 +146,6 @@ ares_socket_t *ares__htable_asvp_keys(const ares__htable_asvp_t *htable, size_t
return out;
}
-
ares_bool_t ares__htable_asvp_insert(ares__htable_asvp_t *htable,
ares_socket_t key, void *val)
{
diff --git a/deps/cares/src/lib/ares__htable_asvp.h b/deps/cares/src/lib/ares__htable_asvp.h
index 9de81c0993718a..ee253455b2690c 100644
--- a/deps/cares/src/lib/ares__htable_asvp.h
+++ b/deps/cares/src/lib/ares__htable_asvp.h
@@ -65,7 +65,7 @@ void ares__htable_asvp_destroy(ares__htable_asvp_t *htable);
* NULL it is expected the caller will clean up any user
* supplied values.
*/
-ares__htable_asvp_t *
+ares__htable_asvp_t *
ares__htable_asvp_create(ares__htable_asvp_val_free_t val_free);
/*! Retrieve an array of keys from the hashtable.
@@ -74,7 +74,8 @@ ares__htable_asvp_t *
* \param[out] num_keys Count of returned keys
* \return Array of keys in the hashtable. Must be free'd with ares_free().
*/
-ares_socket_t *ares__htable_asvp_keys(const ares__htable_asvp_t *htable, size_t *num);
+ares_socket_t *ares__htable_asvp_keys(const ares__htable_asvp_t *htable,
+ size_t *num);
/*! Insert key/value into hash table
@@ -84,8 +85,8 @@ ares_socket_t *ares__htable_asvp_keys(const ares__htable_asvp_t *htable, size_t
* \param[in] val value to store (takes ownership). May be NULL.
* \return ARES_TRUE on success, ARES_FALSE on out of memory or misuse
*/
-ares_bool_t ares__htable_asvp_insert(ares__htable_asvp_t *htable,
- ares_socket_t key, void *val);
+ares_bool_t ares__htable_asvp_insert(ares__htable_asvp_t *htable,
+ ares_socket_t key, void *val);
/*! Retrieve value from hashtable based on key
*
@@ -94,8 +95,8 @@ ares_bool_t ares__htable_asvp_insert(ares__htable_asvp_t *htable,
* \param[out] val Optional. Pointer to store value.
* \return ARES_TRUE on success, ARES_FALSE on failure
*/
-ares_bool_t ares__htable_asvp_get(const ares__htable_asvp_t *htable,
- ares_socket_t key, void **val);
+ares_bool_t ares__htable_asvp_get(const ares__htable_asvp_t *htable,
+ ares_socket_t key, void **val);
/*! Retrieve value from hashtable directly as return value. Caveat to this
* function over ares__htable_asvp_get() is that if a NULL value is stored
@@ -105,8 +106,8 @@ ares_bool_t ares__htable_asvp_get(const ares__htable_asvp_t *htable,
* \param[in] key key to use to search
* \return value associated with key in hashtable or NULL
*/
-void *ares__htable_asvp_get_direct(const ares__htable_asvp_t *htable,
- ares_socket_t key);
+void *ares__htable_asvp_get_direct(const ares__htable_asvp_t *htable,
+ ares_socket_t key);
/*! Remove a value from the hashtable by key
*
@@ -114,15 +115,15 @@ void *ares__htable_asvp_get_direct(const ares__htable_asvp_t *htable,
* \param[in] key key to use to search
* \return ARES_TRUE if found, ARES_FALSE if not found
*/
-ares_bool_t ares__htable_asvp_remove(ares__htable_asvp_t *htable,
- ares_socket_t key);
+ares_bool_t ares__htable_asvp_remove(ares__htable_asvp_t *htable,
+ ares_socket_t key);
/*! Retrieve the number of keys stored in the hash table
*
* \param[in] htable Initialized hash table
* \return count
*/
-size_t ares__htable_asvp_num_keys(const ares__htable_asvp_t *htable);
+size_t ares__htable_asvp_num_keys(const ares__htable_asvp_t *htable);
/*! @} */
diff --git a/deps/cares/src/lib/ares__read_line.c b/deps/cares/src/lib/ares__read_line.c
index d65ac1fcf85a18..018f55e8b2681f 100644
--- a/deps/cares/src/lib/ares__read_line.c
+++ b/deps/cares/src/lib/ares__read_line.c
@@ -59,6 +59,14 @@ ares_status_t ares__read_line(FILE *fp, char **buf, size_t *bufsize)
return (offset != 0) ? 0 : (ferror(fp)) ? ARES_EFILE : ARES_EOF;
}
len = offset + ares_strlen(*buf + offset);
+
+ /* Probably means there was an embedded NULL as the first character in
+ * the line, throw away line */
+ if (len == 0) {
+ offset = 0;
+ continue;
+ }
+
if ((*buf)[len - 1] == '\n') {
(*buf)[len - 1] = 0;
break;
diff --git a/deps/cares/src/lib/ares__socket.c b/deps/cares/src/lib/ares__socket.c
index ec6b745cbf724b..da03755a50db75 100644
--- a/deps/cares/src/lib/ares__socket.c
+++ b/deps/cares/src/lib/ares__socket.c
@@ -450,8 +450,9 @@ ares_ssize_t ares__socket_write(ares_channel_t *channel, ares_socket_t s,
void ares_set_socket_callback(ares_channel_t *channel,
ares_sock_create_callback cb, void *data)
{
- if (channel == NULL)
+ if (channel == NULL) {
return;
+ }
channel->sock_create_cb = cb;
channel->sock_create_cb_data = data;
}
@@ -460,8 +461,9 @@ void ares_set_socket_configure_callback(ares_channel_t *channel,
ares_sock_config_callback cb,
void *data)
{
- if (channel == NULL || channel->optmask & ARES_OPT_EVENT_THREAD)
+ if (channel == NULL || channel->optmask & ARES_OPT_EVENT_THREAD) {
return;
+ }
channel->sock_config_cb = cb;
channel->sock_config_cb_data = data;
}
@@ -470,8 +472,9 @@ void ares_set_socket_functions(ares_channel_t *channel,
const struct ares_socket_functions *funcs,
void *data)
{
- if (channel == NULL || channel->optmask & ARES_OPT_EVENT_THREAD)
+ if (channel == NULL || channel->optmask & ARES_OPT_EVENT_THREAD) {
return;
+ }
channel->sock_funcs = funcs;
channel->sock_func_cb_data = data;
}
diff --git a/deps/cares/src/lib/ares__threads.c b/deps/cares/src/lib/ares__threads.c
index d5182535b2aa97..028790aead5abe 100644
--- a/deps/cares/src/lib/ares__threads.c
+++ b/deps/cares/src/lib/ares__threads.c
@@ -70,13 +70,77 @@ void ares__thread_mutex_unlock(ares__thread_mutex_t *mut)
LeaveCriticalSection(&mut->mutex);
}
+struct ares__thread_cond {
+ CONDITION_VARIABLE cond;
+};
+
+ares__thread_cond_t *ares__thread_cond_create(void)
+{
+ ares__thread_cond_t *cond = ares_malloc_zero(sizeof(*cond));
+ if (cond == NULL) {
+ return NULL;
+ }
+ InitializeConditionVariable(&cond->cond);
+ return cond;
+}
+
+void ares__thread_cond_destroy(ares__thread_cond_t *cond)
+{
+ if (cond == NULL) {
+ return;
+ }
+ ares_free(cond);
+}
+
+void ares__thread_cond_signal(ares__thread_cond_t *cond)
+{
+ if (cond == NULL) {
+ return;
+ }
+ WakeConditionVariable(&cond->cond);
+}
+
+void ares__thread_cond_broadcast(ares__thread_cond_t *cond)
+{
+ if (cond == NULL) {
+ return;
+ }
+ WakeAllConditionVariable(&cond->cond);
+}
+
+ares_status_t ares__thread_cond_wait(ares__thread_cond_t *cond,
+ ares__thread_mutex_t *mut)
+{
+ if (cond == NULL || mut == NULL) {
+ return ARES_EFORMERR;
+ }
+
+ SleepConditionVariableCS(&cond->cond, &mut->mutex, INFINITE);
+ return ARES_SUCCESS;
+}
+
+ares_status_t ares__thread_cond_timedwait(ares__thread_cond_t *cond,
+ ares__thread_mutex_t *mut,
+ unsigned long timeout_ms)
+{
+ if (cond == NULL || mut == NULL) {
+ return ARES_EFORMERR;
+ }
+
+ if (!SleepConditionVariableCS(&cond->cond, &mut->mutex, timeout_ms)) {
+ return ARES_ETIMEOUT;
+ }
+
+ return ARES_SUCCESS;
+}
+
struct ares__thread {
HANDLE thread;
DWORD id;
- void *(*func)(void *arg);
- void *arg;
- void *rv;
+ void *(*func)(void *arg);
+ void *arg;
+ void *rv;
};
/* Wrap for pthread compatibility */
@@ -139,6 +203,16 @@ ares_status_t ares__thread_join(ares__thread_t *thread, void **rv)
# else /* !WIN32 == PTHREAD */
# include
+/* for clock_gettime() */
+# ifdef HAVE_TIME_H
+# include
+# endif
+
+/* for gettimeofday() */
+# ifdef HAVE_SYS_TIME_H
+# include
+# endif
+
struct ares__thread_mutex {
pthread_mutex_t mutex;
};
@@ -198,6 +272,98 @@ void ares__thread_mutex_unlock(ares__thread_mutex_t *mut)
pthread_mutex_unlock(&mut->mutex);
}
+struct ares__thread_cond {
+ pthread_cond_t cond;
+};
+
+ares__thread_cond_t *ares__thread_cond_create(void)
+{
+ ares__thread_cond_t *cond = ares_malloc_zero(sizeof(*cond));
+ if (cond == NULL) {
+ return NULL;
+ }
+ pthread_cond_init(&cond->cond, NULL);
+ return cond;
+}
+
+void ares__thread_cond_destroy(ares__thread_cond_t *cond)
+{
+ if (cond == NULL) {
+ return;
+ }
+ pthread_cond_destroy(&cond->cond);
+ ares_free(cond);
+}
+
+void ares__thread_cond_signal(ares__thread_cond_t *cond)
+{
+ if (cond == NULL) {
+ return;
+ }
+ pthread_cond_signal(&cond->cond);
+}
+
+void ares__thread_cond_broadcast(ares__thread_cond_t *cond)
+{
+ if (cond == NULL) {
+ return;
+ }
+ pthread_cond_broadcast(&cond->cond);
+}
+
+ares_status_t ares__thread_cond_wait(ares__thread_cond_t *cond,
+ ares__thread_mutex_t *mut)
+{
+ if (cond == NULL || mut == NULL) {
+ return ARES_EFORMERR;
+ }
+
+ pthread_cond_wait(&cond->cond, &mut->mutex);
+ return ARES_SUCCESS;
+}
+
+static void ares__timespec_timeout(struct timespec *ts, unsigned long add_ms)
+{
+# if defined(HAVE_CLOCK_GETTIME) && defined(CLOCK_REALTIME)
+ clock_gettime(CLOCK_REALTIME, ts);
+# elif defined(HAVE_GETTIMEOFDAY)
+ struct timeval tv;
+ gettimeofday(&tv, NULL);
+ ts->tv_sec = tv.tv_sec;
+ ts->tv_nsec = tv.tv_usec * 1000;
+# else
+# error cannot determine current system time
+# endif
+
+ ts->tv_sec += add_ms / 1000;
+ ts->tv_nsec += (add_ms % 1000) * 1000000;
+
+ /* Normalize if needed */
+ if (ts->tv_nsec >= 1000000000) {
+ ts->tv_sec += ts->tv_nsec / 1000000000;
+ ts->tv_nsec %= 1000000000;
+ }
+}
+
+ares_status_t ares__thread_cond_timedwait(ares__thread_cond_t *cond,
+ ares__thread_mutex_t *mut,
+ unsigned long timeout_ms)
+{
+ struct timespec ts;
+
+ if (cond == NULL || mut == NULL) {
+ return ARES_EFORMERR;
+ }
+
+ ares__timespec_timeout(&ts, timeout_ms);
+
+ if (pthread_cond_timedwait(&cond->cond, &mut->mutex, &ts) != 0) {
+ return ARES_ETIMEOUT;
+ }
+
+ return ARES_SUCCESS;
+}
+
struct ares__thread {
pthread_t thread;
};
@@ -274,6 +440,44 @@ void ares__thread_mutex_unlock(ares__thread_mutex_t *mut)
(void)mut;
}
+ares__thread_cond_t *ares__thread_cond_create(void)
+{
+ return NULL;
+}
+
+void ares__thread_cond_destroy(ares__thread_cond_t *cond)
+{
+ (void)cond;
+}
+
+void ares__thread_cond_signal(ares__thread_cond_t *cond)
+{
+ (void)cond;
+}
+
+void ares__thread_cond_broadcast(ares__thread_cond_t *cond)
+{
+ (void)cond;
+}
+
+ares_status_t ares__thread_cond_wait(ares__thread_cond_t *cond,
+ ares__thread_mutex_t *mut)
+{
+ (void)cond;
+ (void)mut;
+ return ARES_ENOTIMP;
+}
+
+ares_status_t ares__thread_cond_timedwait(ares__thread_cond_t *cond,
+ ares__thread_mutex_t *mut,
+ unsigned long timeout_ms)
+{
+ (void)cond;
+ (void)mut;
+ (void)timeout_ms;
+ return ARES_ENOTIMP;
+}
+
ares_status_t ares__thread_create(ares__thread_t **thread,
ares__thread_func_t func, void *arg)
{
@@ -299,21 +503,38 @@ ares_bool_t ares_threadsafety(void)
ares_status_t ares__channel_threading_init(ares_channel_t *channel)
{
+ ares_status_t status = ARES_SUCCESS;
+
+ /* Threading is optional! */
if (!ares_threadsafety()) {
- return ARES_ENOTIMP;
+ return ARES_SUCCESS;
}
channel->lock = ares__thread_mutex_create();
if (channel->lock == NULL) {
- return ARES_ENOMEM;
+ status = ARES_ENOMEM;
+ goto done;
}
- return ARES_SUCCESS;
+
+ channel->cond_empty = ares__thread_cond_create();
+ if (channel->cond_empty == NULL) {
+ status = ARES_ENOMEM;
+ goto done;
+ }
+
+done:
+ if (status != ARES_SUCCESS) {
+ ares__channel_threading_destroy(channel);
+ }
+ return status;
}
void ares__channel_threading_destroy(ares_channel_t *channel)
{
ares__thread_mutex_destroy(channel->lock);
channel->lock = NULL;
+ ares__thread_cond_destroy(channel->cond_empty);
+ channel->cond_empty = NULL;
}
void ares__channel_lock(ares_channel_t *channel)
@@ -325,3 +546,62 @@ void ares__channel_unlock(ares_channel_t *channel)
{
ares__thread_mutex_unlock(channel->lock);
}
+
+/* Must not be holding a channel lock already, public function only */
+ares_status_t ares_queue_wait_empty(ares_channel_t *channel, int timeout_ms)
+{
+ ares_status_t status = ARES_SUCCESS;
+ struct timeval tout;
+
+ if (!ares_threadsafety()) {
+ return ARES_ENOTIMP;
+ }
+
+ if (channel == NULL) {
+ return ARES_EFORMERR;
+ }
+
+ if (timeout_ms >= 0) {
+ tout = ares__tvnow();
+ tout.tv_sec += timeout_ms / 1000;
+ tout.tv_usec += (timeout_ms % 1000) * 1000;
+ }
+
+ ares__thread_mutex_lock(channel->lock);
+ while (ares__llist_len(channel->all_queries)) {
+ if (timeout_ms < 0) {
+ ares__thread_cond_wait(channel->cond_empty, channel->lock);
+ } else {
+ struct timeval tv_remaining;
+ struct timeval tv_now = ares__tvnow();
+ unsigned long tms;
+
+ ares__timeval_remaining(&tv_remaining, &tv_now, &tout);
+ tms = (unsigned long)((tv_remaining.tv_sec * 1000) +
+ (tv_remaining.tv_usec / 1000));
+ if (tms == 0) {
+ status = ARES_ETIMEOUT;
+ } else {
+ status =
+ ares__thread_cond_timedwait(channel->cond_empty, channel->lock, tms);
+ }
+ }
+ }
+ ares__thread_mutex_unlock(channel->lock);
+ return status;
+}
+
+void ares_queue_notify_empty(ares_channel_t *channel)
+{
+ if (channel == NULL) {
+ return;
+ }
+
+ /* We are guaranteed to be holding a channel lock already */
+ if (ares__llist_len(channel->all_queries)) {
+ return;
+ }
+
+ /* Notify all waiters of the conditional */
+ ares__thread_cond_broadcast(channel->cond_empty);
+}
diff --git a/deps/cares/src/lib/ares__threads.h b/deps/cares/src/lib/ares__threads.h
index 03f67f08e6593b..39764296478a07 100644
--- a/deps/cares/src/lib/ares__threads.h
+++ b/deps/cares/src/lib/ares__threads.h
@@ -34,6 +34,21 @@ void ares__thread_mutex_destroy(ares__thread_mutex_t *mut);
void ares__thread_mutex_lock(ares__thread_mutex_t *mut);
void ares__thread_mutex_unlock(ares__thread_mutex_t *mut);
+
+struct ares__thread_cond;
+typedef struct ares__thread_cond ares__thread_cond_t;
+
+ares__thread_cond_t *ares__thread_cond_create(void);
+void ares__thread_cond_destroy(ares__thread_cond_t *cond);
+void ares__thread_cond_signal(ares__thread_cond_t *cond);
+void ares__thread_cond_broadcast(ares__thread_cond_t *cond);
+ares_status_t ares__thread_cond_wait(ares__thread_cond_t *cond,
+ ares__thread_mutex_t *mut);
+ares_status_t ares__thread_cond_timedwait(ares__thread_cond_t *cond,
+ ares__thread_mutex_t *mut,
+ unsigned long timeout_ms);
+
+
struct ares__thread;
typedef struct ares__thread ares__thread_t;
diff --git a/deps/cares/src/lib/ares_cancel.c b/deps/cares/src/lib/ares_cancel.c
index 9841f9bf64fc0d..0ee6124dd71440 100644
--- a/deps/cares/src/lib/ares_cancel.c
+++ b/deps/cares/src/lib/ares_cancel.c
@@ -85,6 +85,9 @@ void ares_cancel(ares_channel_t *channel)
ares__llist_destroy(list_copy);
}
+
+ ares_queue_notify_empty(channel);
+
done:
ares__channel_unlock(channel);
}
diff --git a/deps/cares/src/lib/ares_destroy.c b/deps/cares/src/lib/ares_destroy.c
index f2f0d9a7a8109c..145084577f7fba 100644
--- a/deps/cares/src/lib/ares_destroy.c
+++ b/deps/cares/src/lib/ares_destroy.c
@@ -57,6 +57,8 @@ void ares_destroy(ares_channel_t *channel)
node = next;
}
+ ares_queue_notify_empty(channel);
+
#ifndef NDEBUG
/* Freeing the query should remove it from all the lists in which it sits,
* so all query lists should be empty now.
diff --git a/deps/cares/src/lib/ares_dns_parse.c b/deps/cares/src/lib/ares_dns_parse.c
index a201529165d915..169fd5b63d7eb1 100644
--- a/deps/cares/src/lib/ares_dns_parse.c
+++ b/deps/cares/src/lib/ares_dns_parse.c
@@ -1067,13 +1067,19 @@ static ares_status_t ares_dns_parse_rr(ares__buf_t *buf, unsigned int flags,
}
namecomp = ares_dns_rec_type_allow_name_compression(type);
- if (sect == ARES_SECTION_ANSWER && (flags & (namecomp ? ARES_DNS_PARSE_AN_BASE_RAW : ARES_DNS_PARSE_AN_EXT_RAW))) {
+ if (sect == ARES_SECTION_ANSWER &&
+ (flags &
+ (namecomp ? ARES_DNS_PARSE_AN_BASE_RAW : ARES_DNS_PARSE_AN_EXT_RAW))) {
type = ARES_REC_TYPE_RAW_RR;
}
- if (sect == ARES_SECTION_AUTHORITY && (flags & (namecomp ? ARES_DNS_PARSE_NS_BASE_RAW : ARES_DNS_PARSE_NS_EXT_RAW))) {
+ if (sect == ARES_SECTION_AUTHORITY &&
+ (flags &
+ (namecomp ? ARES_DNS_PARSE_NS_BASE_RAW : ARES_DNS_PARSE_NS_EXT_RAW))) {
type = ARES_REC_TYPE_RAW_RR;
}
- if (sect == ARES_SECTION_ADDITIONAL && (flags & (namecomp ? ARES_DNS_PARSE_AR_BASE_RAW : ARES_DNS_PARSE_AR_EXT_RAW))) {
+ if (sect == ARES_SECTION_ADDITIONAL &&
+ (flags &
+ (namecomp ? ARES_DNS_PARSE_AR_BASE_RAW : ARES_DNS_PARSE_AR_EXT_RAW))) {
type = ARES_REC_TYPE_RAW_RR;
}
diff --git a/deps/cares/src/lib/ares_event_epoll.c b/deps/cares/src/lib/ares_event_epoll.c
index 3c9ccbbb7529a2..9d3c097f8e4346 100644
--- a/deps/cares/src/lib/ares_event_epoll.c
+++ b/deps/cares/src/lib/ares_event_epoll.c
@@ -94,9 +94,9 @@ static ares_bool_t ares_evsys_epoll_init(ares_event_thread_t *e)
static ares_bool_t ares_evsys_epoll_event_add(ares_event_t *event)
{
- ares_event_thread_t *e = event->e;
- ares_evsys_epoll_t *ep = e->ev_sys_data;
- struct epoll_event epev;
+ const ares_event_thread_t *e = event->e;
+ const ares_evsys_epoll_t *ep = e->ev_sys_data;
+ struct epoll_event epev;
memset(&epev, 0, sizeof(epev));
epev.data.fd = event->fd;
@@ -115,9 +115,9 @@ static ares_bool_t ares_evsys_epoll_event_add(ares_event_t *event)
static void ares_evsys_epoll_event_del(ares_event_t *event)
{
- ares_event_thread_t *e = event->e;
- ares_evsys_epoll_t *ep = e->ev_sys_data;
- struct epoll_event epev;
+ const ares_event_thread_t *e = event->e;
+ const ares_evsys_epoll_t *ep = e->ev_sys_data;
+ struct epoll_event epev;
memset(&epev, 0, sizeof(epev));
epev.data.fd = event->fd;
@@ -127,9 +127,9 @@ static void ares_evsys_epoll_event_del(ares_event_t *event)
static void ares_evsys_epoll_event_mod(ares_event_t *event,
ares_event_flags_t new_flags)
{
- ares_event_thread_t *e = event->e;
- ares_evsys_epoll_t *ep = e->ev_sys_data;
- struct epoll_event epev;
+ const ares_event_thread_t *e = event->e;
+ const ares_evsys_epoll_t *ep = e->ev_sys_data;
+ struct epoll_event epev;
memset(&epev, 0, sizeof(epev));
epev.data.fd = event->fd;
@@ -146,12 +146,12 @@ static void ares_evsys_epoll_event_mod(ares_event_t *event,
static size_t ares_evsys_epoll_wait(ares_event_thread_t *e,
unsigned long timeout_ms)
{
- struct epoll_event events[8];
- size_t nevents = sizeof(events) / sizeof(*events);
- ares_evsys_epoll_t *ep = e->ev_sys_data;
- int rv;
- size_t i;
- size_t cnt = 0;
+ struct epoll_event events[8];
+ size_t nevents = sizeof(events) / sizeof(*events);
+ const ares_evsys_epoll_t *ep = e->ev_sys_data;
+ int rv;
+ size_t i;
+ size_t cnt = 0;
memset(events, 0, sizeof(events));
diff --git a/deps/cares/src/lib/ares_event_poll.c b/deps/cares/src/lib/ares_event_poll.c
index e2b1db12b4a814..c16b2824663544 100644
--- a/deps/cares/src/lib/ares_event_poll.c
+++ b/deps/cares/src/lib/ares_event_poll.c
@@ -78,8 +78,9 @@ static size_t ares_evsys_poll_wait(ares_event_thread_t *e,
if (num_fds) {
pollfd = ares_malloc_zero(sizeof(*pollfd) * num_fds);
for (i = 0; i < num_fds; i++) {
- ares_event_t *ev = ares__htable_asvp_get_direct(e->ev_handles, fdlist[i]);
- pollfd[i].fd = ev->fd;
+ const ares_event_t *ev =
+ ares__htable_asvp_get_direct(e->ev_handles, fdlist[i]);
+ pollfd[i].fd = ev->fd;
if (ev->flags & ARES_EVENT_FLAG_READ) {
pollfd[i].events |= POLLIN;
}
diff --git a/deps/cares/src/lib/ares_event_select.c b/deps/cares/src/lib/ares_event_select.c
index b73ac74716601a..4823e808f10df6 100644
--- a/deps/cares/src/lib/ares_event_select.c
+++ b/deps/cares/src/lib/ares_event_select.c
@@ -85,7 +85,8 @@ static size_t ares_evsys_select_wait(ares_event_thread_t *e,
FD_ZERO(&write_fds);
for (i = 0; i < num_fds; i++) {
- ares_event_t *ev = ares__htable_asvp_get_direct(e->ev_handles, fdlist[i]);
+ const ares_event_t *ev =
+ ares__htable_asvp_get_direct(e->ev_handles, fdlist[i]);
if (ev->flags & ARES_EVENT_FLAG_READ) {
FD_SET(ev->fd, &read_fds);
}
diff --git a/deps/cares/src/lib/ares_event_thread.c b/deps/cares/src/lib/ares_event_thread.c
index 6a69c8e4d702d2..6dd7b502a35745 100644
--- a/deps/cares/src/lib/ares_event_thread.c
+++ b/deps/cares/src/lib/ares_event_thread.c
@@ -37,7 +37,7 @@ static void ares_event_destroy_cb(void *arg)
/* Unregister from the event thread if it was registered with one */
if (event->e) {
- ares_event_thread_t *e = event->e;
+ const ares_event_thread_t *e = event->e;
e->ev_sys->event_del(event);
event->e = NULL;
}
@@ -52,9 +52,15 @@ static void ares_event_destroy_cb(void *arg)
/* See if a pending update already exists. We don't want to enqueue multiple
* updates for the same event handle. Right now this is O(n) based on number
* of updates already enqueued. In the future, it might make sense to make
- * this O(1) with a hashtable. */
+ * this O(1) with a hashtable.
+ * NOTE: in some cases a delete then re-add of the same fd, but really pointing
+ * to a different destination can happen due to a quick close of a
+ * connection then creation of a new one. So we need to look at the
+ * flags and ignore any delete events when finding a match since we
+ * need to process the delete always, it can't be combined with other
+ * updates. */
static ares_event_t *ares_event_update_find(ares_event_thread_t *e,
- ares_socket_t fd, void *data)
+ ares_socket_t fd, const void *data)
{
ares__llist_node_t *node;
@@ -62,12 +68,12 @@ static ares_event_t *ares_event_update_find(ares_event_thread_t *e,
node = ares__llist_node_next(node)) {
ares_event_t *ev = ares__llist_node_val(node);
- if (fd != ARES_SOCKET_BAD && fd == ev->fd) {
+ if (fd != ARES_SOCKET_BAD && fd == ev->fd && ev->flags != 0) {
return ev;
}
if (fd == ARES_SOCKET_BAD && ev->fd == ARES_SOCKET_BAD &&
- data == ev->data) {
+ data == ev->data && ev->flags != 0) {
return ev;
}
}
@@ -152,7 +158,7 @@ static void ares_event_signal(const ares_event_t *event)
event->signal_cb(event);
}
-static void ares_event_thread_wake(ares_event_thread_t *e)
+static void ares_event_thread_wake(const ares_event_thread_t *e)
{
if (e == NULL) {
return;
@@ -188,7 +194,6 @@ static void ares_event_thread_sockstate_cb(void *data, ares_socket_t socket_fd,
/* Update channel fd */
ares__thread_mutex_lock(e->mutex);
-
ares_event_update(NULL, e, flags, ares_event_thread_process_fd, socket_fd,
NULL, NULL, NULL);
@@ -247,9 +252,9 @@ static void *ares_event_thread(void *arg)
ares__thread_mutex_lock(e->mutex);
while (e->isup) {
- struct timeval tv;
- struct timeval *tvout;
- unsigned long timeout_ms = 0; /* 0 = unlimited */
+ struct timeval tv;
+ const struct timeval *tvout;
+ unsigned long timeout_ms = 0; /* 0 = unlimited */
tvout = ares_timeout(e->channel, NULL, &tv);
if (tvout != NULL) {
@@ -363,7 +368,7 @@ static const ares_event_sys_t *ares_event_fetch_sys(ares_evsys_t evsys)
return NULL;
#endif
- case ARES_EVSYS_DEFAULT:
+ /* case ARES_EVSYS_DEFAULT: */
default:
#if defined(_WIN32)
return &ares_evsys_win32;
diff --git a/deps/cares/src/lib/ares_event_wake_pipe.c b/deps/cares/src/lib/ares_event_wake_pipe.c
index eca7539a024a87..a2cd6f609a4c30 100644
--- a/deps/cares/src/lib/ares_event_wake_pipe.c
+++ b/deps/cares/src/lib/ares_event_wake_pipe.c
@@ -110,21 +110,21 @@ static ares_pipeevent_t *ares_pipeevent_init(void)
static void ares_pipeevent_signal(const ares_event_t *e)
{
- ares_pipeevent_t *p;
+ const ares_pipeevent_t *p;
if (e == NULL || e->data == NULL) {
return;
}
p = e->data;
- write(p->filedes[1], "1", 1);
+ (void)write(p->filedes[1], "1", 1);
}
static void ares_pipeevent_cb(ares_event_thread_t *e, ares_socket_t fd,
void *data, ares_event_flags_t flags)
{
- unsigned char buf[32];
- ares_pipeevent_t *p = NULL;
+ unsigned char buf[32];
+ const ares_pipeevent_t *p = NULL;
(void)e;
(void)fd;
diff --git a/deps/cares/src/lib/ares_getnameinfo.c b/deps/cares/src/lib/ares_getnameinfo.c
index 7a9c0d555f5960..8889e9eec6fe51 100644
--- a/deps/cares/src/lib/ares_getnameinfo.c
+++ b/deps/cares/src/lib/ares_getnameinfo.c
@@ -86,10 +86,10 @@ static void append_scopeid(const struct sockaddr_in6 *addr6,
#endif
static char *ares_striendstr(const char *s1, const char *s2);
-static void ares_getnameinfo_int(ares_channel_t *channel,
- const struct sockaddr *sa,
- ares_socklen_t salen, int flags_int,
- ares_nameinfo_callback callback, void *arg)
+static void ares_getnameinfo_int(ares_channel_t *channel,
+ const struct sockaddr *sa,
+ ares_socklen_t salen, int flags_int,
+ ares_nameinfo_callback callback, void *arg)
{
const struct sockaddr_in *addr = NULL;
const struct sockaddr_in6 *addr6 = NULL;
diff --git a/deps/cares/src/lib/ares_init.c b/deps/cares/src/lib/ares_init.c
index 014226f392bdfb..bae7c72fe2cf67 100644
--- a/deps/cares/src/lib/ares_init.c
+++ b/deps/cares/src/lib/ares_init.c
@@ -133,6 +133,8 @@ static ares_status_t init_by_defaults(ares_channel_t *channel)
#ifdef HAVE_GETHOSTNAME
const char *dot;
#endif
+ struct ares_addr addr;
+ ares__llist_t *sconfig = NULL;
/* Enable EDNS by default */
if (!(channel->optmask & ARES_OPT_FLAGS)) {
@@ -155,22 +157,27 @@ static ares_status_t init_by_defaults(ares_channel_t *channel)
}
if (ares__slist_len(channel->servers) == 0) {
- struct ares_addr addr;
- ares__llist_t *sconfig = NULL;
+ /* Add a default local named server to the channel unless configured not
+ * to (in which case return an error).
+ */
+ if (channel->flags & ARES_FLAG_NO_DFLT_SVR) {
+ rc = ARES_ENOSERVER;
+ goto error;
+ }
addr.family = AF_INET;
addr.addr.addr4.s_addr = htonl(INADDR_LOOPBACK);
rc = ares__sconfig_append(&sconfig, &addr, 0, 0, NULL);
if (rc != ARES_SUCCESS) {
- return rc;
+ goto error;
}
rc = ares__servers_update(channel, sconfig, ARES_FALSE);
ares__llist_destroy(sconfig);
if (rc != ARES_SUCCESS) {
- return rc;
+ goto error;
}
}
@@ -387,6 +394,7 @@ int ares_init_options(ares_channel_t **channelptr,
if (status != ARES_SUCCESS) {
DEBUGF(fprintf(stderr, "Error: init_by_defaults failed: %s\n",
ares_strerror(status)));
+ goto done;
}
/* Initialize the event thread */
diff --git a/deps/cares/src/lib/ares_options.c b/deps/cares/src/lib/ares_options.c
index 59e3aa7ab93229..342d2ea1bec968 100644
--- a/deps/cares/src/lib/ares_options.c
+++ b/deps/cares/src/lib/ares_options.c
@@ -275,10 +275,12 @@ ares_status_t ares__init_by_options(ares_channel_t *channel,
/* Event Thread requires threading support and is incompatible with socket
* state callbacks */
if (optmask & ARES_OPT_EVENT_THREAD) {
- if (!ares_threadsafety())
+ if (!ares_threadsafety()) {
return ARES_ENOTIMP;
- if (optmask & ARES_OPT_SOCK_STATE_CB)
+ }
+ if (optmask & ARES_OPT_SOCK_STATE_CB) {
return ARES_EFORMERR;
+ }
channel->evsys = options->evsys;
}
diff --git a/deps/cares/src/lib/ares_private.h b/deps/cares/src/lib/ares_private.h
index 53c8d532a40b73..fd321b911c4a1c 100644
--- a/deps/cares/src/lib/ares_private.h
+++ b/deps/cares/src/lib/ares_private.h
@@ -138,9 +138,9 @@ typedef struct ares_rand_state ares_rand_state;
#endif
/********* EDNS defines section ******/
-#define EDNSPACKETSZ \
- 1280 /* Reasonable UDP payload size, as suggested \
- in RFC2671 */
+#define EDNSPACKETSZ \
+ 1232 /* Reasonable UDP payload size, as agreed by operators \
+ https://www.dnsflagday.net/2020/#faq */
#define MAXENDSSZ 4096 /* Maximum (local) limit for edns packet size */
#define EDNSFIXEDSZ 11 /* Size of EDNS header */
@@ -264,6 +264,9 @@ struct ares_channeldata {
/* Thread safety lock */
ares__thread_mutex_t *lock;
+ /* Conditional to wake waiters when queue is empty */
+ ares__thread_cond_t *cond_empty;
+
/* Server addresses and communications state. Sorted by least consecutive
* failures, followed by the configuration order if failures are equal. */
ares__slist_t *servers;
@@ -532,6 +535,16 @@ ares_status_t ares__dns_name_write(ares__buf_t *buf, ares__llist_t **list,
ares_bool_t validate_hostname,
const char *name);
+/*! Check if the queue is empty, if so, wake any waiters. This is only
+ * effective if built with threading support.
+ *
+ * Must be holding a channel lock when calling this function.
+ *
+ * \param[in] channel Initialized ares channel object
+ */
+void ares_queue_notify_empty(ares_channel_t *channel);
+
+
#define ARES_SWAP_BYTE(a, b) \
do { \
unsigned char swapByte = *(a); \
@@ -583,7 +596,7 @@ void ares__channel_unlock(ares_channel_t *channel);
struct ares_event_thread;
typedef struct ares_event_thread ares_event_thread_t;
-void ares_event_thread_destroy(ares_channel_t *channel);
+void ares_event_thread_destroy(ares_channel_t *channel);
ares_status_t ares_event_thread_init(ares_channel_t *channel);
diff --git a/deps/cares/src/lib/ares_process.c b/deps/cares/src/lib/ares_process.c
index d24add054c79cb..bd84d09e134805 100644
--- a/deps/cares/src/lib/ares_process.c
+++ b/deps/cares/src/lib/ares_process.c
@@ -67,11 +67,11 @@ static ares_bool_t same_questions(const ares_dns_record_t *qrec,
const ares_dns_record_t *arec);
static ares_bool_t same_address(const struct sockaddr *sa,
const struct ares_addr *aa);
-static void end_query(const ares_channel_t *channel, struct query *query,
- ares_status_t status, const unsigned char *abuf,
- size_t alen);
+static void end_query(ares_channel_t *channel, struct query *query,
+ ares_status_t status, const unsigned char *abuf,
+ size_t alen);
-static void server_increment_failures(struct server_state *server)
+static void server_increment_failures(struct server_state *server)
{
ares__slist_node_t *node;
const ares_channel_t *channel = server->channel;
@@ -715,6 +715,7 @@ static ares_status_t process_answer(ares_channel_t *channel,
default:
break;
}
+
server_increment_failures(server);
ares__requeue_query(query, now);
@@ -759,8 +760,8 @@ static void handle_conn_error(struct server_connection *conn,
ares_status_t ares__requeue_query(struct query *query, struct timeval *now)
{
- const ares_channel_t *channel = query->channel;
- size_t max_tries = ares__slist_len(channel->servers) * channel->tries;
+ ares_channel_t *channel = query->channel;
+ size_t max_tries = ares__slist_len(channel->servers) * channel->tries;
query->try_count++;
@@ -892,8 +893,8 @@ ares_status_t ares__send_query(struct query *query, struct timeval *now)
}
if (server == NULL) {
- end_query(channel, query, ARES_ESERVFAIL /* ? */, NULL, 0);
- return ARES_ECONNREFUSED;
+ end_query(channel, query, ARES_ENOSERVER /* ? */, NULL, 0);
+ return ARES_ENOSERVER;
}
if (query->using_tcp) {
@@ -1122,18 +1123,23 @@ static void ares_detach_query(struct query *query)
query->node_all_queries = NULL;
}
-static void end_query(const ares_channel_t *channel, struct query *query,
+static void end_query(ares_channel_t *channel, struct query *query,
ares_status_t status, const unsigned char *abuf,
size_t alen)
{
- (void)channel;
-
/* Invoke the callback. */
query->callback(query->arg, (int)status, (int)query->timeouts,
/* due to prior design flaws, abuf isn't meant to be modified,
* but bad prototypes, ugh. Lets cast off constfor compat. */
(unsigned char *)((void *)((size_t)abuf)), (int)alen);
ares__free_query(query);
+
+ /* Check and notify if no other queries are enqueued on the channel. This
+ * must come after the callback and freeing the query for 2 reasons.
+ * 1) The callback itself may enqueue a new query
+ * 2) Technically the current query isn't detached until it is free()'d.
+ */
+ ares_queue_notify_empty(channel);
}
void ares__free_query(struct query *query)
diff --git a/deps/cares/src/lib/ares_send.c b/deps/cares/src/lib/ares_send.c
index 2510b1edd36dbe..6cefdb6a36a87e 100644
--- a/deps/cares/src/lib/ares_send.c
+++ b/deps/cares/src/lib/ares_send.c
@@ -66,8 +66,8 @@ ares_status_t ares_send_ex(ares_channel_t *channel, const unsigned char *qbuf,
return ARES_EBADQUERY;
}
if (ares__slist_len(channel->servers) == 0) {
- callback(arg, ARES_ESERVFAIL, 0, NULL, 0);
- return ARES_ESERVFAIL;
+ callback(arg, ARES_ENOSERVER, 0, NULL, 0);
+ return ARES_ENOSERVER;
}
/* Check query cache */
@@ -163,3 +163,20 @@ void ares_send(ares_channel_t *channel, const unsigned char *qbuf, int qlen,
ares__channel_unlock(channel);
}
+
+size_t ares_queue_active_queries(ares_channel_t *channel)
+{
+ size_t len;
+
+ if (channel == NULL) {
+ return 0;
+ }
+
+ ares__channel_lock(channel);
+
+ len = ares__llist_len(channel->all_queries);
+
+ ares__channel_unlock(channel);
+
+ return len;
+}
diff --git a/deps/cares/src/lib/ares_strerror.c b/deps/cares/src/lib/ares_strerror.c
index fd583c5cfbb65d..ae94f9619efa45 100644
--- a/deps/cares/src/lib/ares_strerror.c
+++ b/deps/cares/src/lib/ares_strerror.c
@@ -85,6 +85,8 @@ const char *ares_strerror(int code)
return "DNS query cancelled";
case ARES_ESERVICE:
return "Invalid service name or number";
+ case ARES_ENOSERVER:
+ return "No DNS servers were configured";
}
return "unknown";
diff --git a/deps/cares/src/lib/ares_sysconfig.c b/deps/cares/src/lib/ares_sysconfig.c
index 6b5408da75aa68..825008b7b8a543 100644
--- a/deps/cares/src/lib/ares_sysconfig.c
+++ b/deps/cares/src/lib/ares_sysconfig.c
@@ -624,6 +624,7 @@ static ares_status_t ares__init_sysconfig_windows(ares_sysconfig_t *sysconfig)
if (get_SuffixList_Windows(&line)) {
sysconfig->domains = ares__strsplit(line, ", ", &sysconfig->ndomains);
+ ares_free(line);
if (sysconfig->domains == NULL) {
status = ARES_EFILE;
}
diff --git a/deps/cares/src/tools/adig.c b/deps/cares/src/tools/adig.c
index 52215b3094fe28..cd427f4b193526 100644
--- a/deps/cares/src/tools/adig.c
+++ b/deps/cares/src/tools/adig.c
@@ -745,9 +745,9 @@ static void callback(void *arg, int status, int timeouts, unsigned char *abuf,
/* We got a "Server status" */
if (status >= ARES_SUCCESS && status <= ARES_EREFUSED) {
- printf(";; Got answer:");
+ printf(";; Got answer:");
} else {
- printf(";;");
+ printf(";;");
}
if (status != ARES_SUCCESS) {
diff --git a/deps/cares/unofficial.gni b/deps/cares/unofficial.gni
index a925eb14f33361..df6b2d0bcb11aa 100644
--- a/deps/cares/unofficial.gni
+++ b/deps/cares/unofficial.gni
@@ -69,6 +69,8 @@ template("cares_gn_build") {
cflags_c = [
"-Wno-implicit-fallthrough",
"-Wno-unreachable-code",
+ # Remove after https://github.com/c-ares/c-ares/pull/709 lands in Node.
+ "-Wno-unused-result",
]
}
}
diff --git a/deps/corepack/CHANGELOG.md b/deps/corepack/CHANGELOG.md
index 39e20b2a337b05..439f6fd3b8e968 100644
--- a/deps/corepack/CHANGELOG.md
+++ b/deps/corepack/CHANGELOG.md
@@ -1,5 +1,56 @@
# Changelog
+## [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)
diff --git a/deps/corepack/README.md b/deps/corepack/README.md
index 18bcf88e9f3825..2f5819d913eb37 100644
--- a/deps/corepack/README.md
+++ b/deps/corepack/README.md
@@ -81,18 +81,29 @@ along with the SHA-224 hash of this version for validation.
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"
+}
+```
+
## 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. In a way, you can
-compare this to Node.js, where each version ships with a specific version of
-npm.
+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
@@ -102,9 +113,6 @@ The utility commands detailed in the next section.
case you'll simply run `corepack pack` to make sure that your image
includes the Last Known Good release for the specified package manager.
- - If you want to have _all_ Last Known Good releases for all package managers,
- just use the `--all` flag which will do just that.
-
- 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
@@ -124,6 +132,14 @@ 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 |
@@ -177,11 +193,7 @@ 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> [--all] [... name[@]]`
-
-| Option | Description |
-| --------------------- | ------------------------------------------ |
-| `--all` | Install all Last Known Good releases |
+### `corepack install <-g,--global> [... name[@]]`
Install the selected package managers and install them on the system.
@@ -189,11 +201,10 @@ 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 [--all] [... name[@]]`
+### `corepack pack [... name[@]]`
| Option | Description |
| --------------------- | ------------------------------------------ |
-| `--all` | Pack all Last Known Good releases |
| `--json ` | Print the output folder rather than logs |
| `-o,--output ` | Path where to generate the archive |
@@ -221,7 +232,20 @@ same major line. Should you need to upgrade to a new major, use an explicit
- `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.
+ package manager, and to not update the Last Known Good version when it
+ downloads a new version of the same major line.
+
+- `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
+ implicitely (e.g. `pnpm …`), it is set to `1`.
+ 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
diff --git a/deps/corepack/dist/corepack.js b/deps/corepack/dist/corepack.js
index 309c78d7841366..b1b22662466f86 100755
--- a/deps/corepack/dist/corepack.js
+++ b/deps/corepack/dist/corepack.js
@@ -1,2 +1,3 @@
#!/usr/bin/env node
+process.env.COREPACK_ENABLE_DOWNLOAD_PROMPT??='0';
require('./lib/corepack.cjs').runMain(process.argv.slice(2));
\ No newline at end of file
diff --git a/deps/corepack/dist/lib/corepack.cjs b/deps/corepack/dist/lib/corepack.cjs
index 679c83f7904a4c..3d8e819e7997e7 100644
--- a/deps/corepack/dist/lib/corepack.cjs
+++ b/deps/corepack/dist/lib/corepack.cjs
@@ -1037,9 +1037,9 @@ var init_lib = __esm({
}
});
-// .yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/internal/constants.js
+// .yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/internal/constants.js
var require_constants = __commonJS({
- ".yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/internal/constants.js"(exports, module2) {
+ ".yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/internal/constants.js"(exports, module2) {
var SEMVER_SPEC_VERSION = "2.0.0";
var MAX_LENGTH = 256;
var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || /* istanbul ignore next */
@@ -1068,18 +1068,18 @@ var require_constants = __commonJS({
}
});
-// .yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/internal/debug.js
+// .yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/internal/debug.js
var require_debug = __commonJS({
- ".yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/internal/debug.js"(exports, module2) {
+ ".yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/internal/debug.js"(exports, module2) {
var debug2 = typeof process === "object" && process.env && process.env.NODE_DEBUG && /\bsemver\b/i.test(process.env.NODE_DEBUG) ? (...args) => console.error("SEMVER", ...args) : () => {
};
module2.exports = debug2;
}
});
-// .yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/internal/re.js
+// .yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/internal/re.js
var require_re = __commonJS({
- ".yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/internal/re.js"(exports, module2) {
+ ".yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/internal/re.js"(exports, module2) {
var {
MAX_SAFE_COMPONENT_LENGTH,
MAX_SAFE_BUILD_LENGTH,
@@ -1135,8 +1135,11 @@ var require_re = __commonJS({
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("COERCE", `${"(^|[^\\d])(\\d{1,"}${MAX_SAFE_COMPONENT_LENGTH}})(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?(?:$|[^\\d])`);
+ 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);
exports.tildeTrimReplace = "$1~";
@@ -1159,9 +1162,9 @@ var require_re = __commonJS({
}
});
-// .yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/internal/parse-options.js
+// .yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/internal/parse-options.js
var require_parse_options = __commonJS({
- ".yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/internal/parse-options.js"(exports, module2) {
+ ".yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/internal/parse-options.js"(exports, module2) {
var looseOption = Object.freeze({ loose: true });
var emptyOpts = Object.freeze({});
var parseOptions = (options) => {
@@ -1177,9 +1180,9 @@ var require_parse_options = __commonJS({
}
});
-// .yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/internal/identifiers.js
+// .yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/internal/identifiers.js
var require_identifiers = __commonJS({
- ".yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/internal/identifiers.js"(exports, module2) {
+ ".yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/internal/identifiers.js"(exports, module2) {
var numeric = /^[0-9]+$/;
var compareIdentifiers = (a, b) => {
const anum = numeric.test(a);
@@ -1198,9 +1201,9 @@ var require_identifiers = __commonJS({
}
});
-// .yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/classes/semver.js
+// .yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/classes/semver.js
var require_semver = __commonJS({
- ".yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/classes/semver.js"(exports, module2) {
+ ".yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/classes/semver.js"(exports, module2) {
var debug2 = require_debug();
var { MAX_LENGTH, MAX_SAFE_INTEGER } = require_constants();
var { safeRe: re, t } = require_re();
@@ -1440,9 +1443,9 @@ var require_semver = __commonJS({
}
});
-// .yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/functions/parse.js
+// .yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/functions/parse.js
var require_parse = __commonJS({
- ".yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/functions/parse.js"(exports, module2) {
+ ".yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/functions/parse.js"(exports, module2) {
var SemVer = require_semver();
var parse = (version2, options, throwErrors = false) => {
if (version2 instanceof SemVer) {
@@ -1461,9 +1464,9 @@ var require_parse = __commonJS({
}
});
-// .yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/functions/valid.js
+// .yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/functions/valid.js
var require_valid = __commonJS({
- ".yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/functions/valid.js"(exports, module2) {
+ ".yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/functions/valid.js"(exports, module2) {
var parse = require_parse();
var valid = (version2, options) => {
const v = parse(version2, options);
@@ -1473,9 +1476,9 @@ var require_valid = __commonJS({
}
});
-// .yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/functions/clean.js
+// .yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/functions/clean.js
var require_clean = __commonJS({
- ".yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/functions/clean.js"(exports, module2) {
+ ".yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/functions/clean.js"(exports, module2) {
var parse = require_parse();
var clean = (version2, options) => {
const s = parse(version2.trim().replace(/^[=v]+/, ""), options);
@@ -1485,9 +1488,9 @@ var require_clean = __commonJS({
}
});
-// .yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/functions/inc.js
+// .yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/functions/inc.js
var require_inc = __commonJS({
- ".yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/functions/inc.js"(exports, module2) {
+ ".yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/functions/inc.js"(exports, module2) {
var SemVer = require_semver();
var inc = (version2, release, options, identifier, identifierBase) => {
if (typeof options === "string") {
@@ -1508,9 +1511,9 @@ var require_inc = __commonJS({
}
});
-// .yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/functions/diff.js
+// .yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/functions/diff.js
var require_diff = __commonJS({
- ".yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/functions/diff.js"(exports, module2) {
+ ".yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/functions/diff.js"(exports, module2) {
var parse = require_parse();
var diff = (version1, version2) => {
const v1 = parse(version1, null, true);
@@ -1552,36 +1555,36 @@ var require_diff = __commonJS({
}
});
-// .yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/functions/major.js
+// .yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/functions/major.js
var require_major = __commonJS({
- ".yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/functions/major.js"(exports, module2) {
+ ".yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/functions/major.js"(exports, module2) {
var SemVer = require_semver();
var major = (a, loose) => new SemVer(a, loose).major;
module2.exports = major;
}
});
-// .yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/functions/minor.js
+// .yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/functions/minor.js
var require_minor = __commonJS({
- ".yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/functions/minor.js"(exports, module2) {
+ ".yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/functions/minor.js"(exports, module2) {
var SemVer = require_semver();
var minor = (a, loose) => new SemVer(a, loose).minor;
module2.exports = minor;
}
});
-// .yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/functions/patch.js
+// .yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/functions/patch.js
var require_patch = __commonJS({
- ".yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/functions/patch.js"(exports, module2) {
+ ".yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/functions/patch.js"(exports, module2) {
var SemVer = require_semver();
var patch = (a, loose) => new SemVer(a, loose).patch;
module2.exports = patch;
}
});
-// .yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/functions/prerelease.js
+// .yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/functions/prerelease.js
var require_prerelease = __commonJS({
- ".yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/functions/prerelease.js"(exports, module2) {
+ ".yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/functions/prerelease.js"(exports, module2) {
var parse = require_parse();
var prerelease = (version2, options) => {
const parsed = parse(version2, options);
@@ -1591,36 +1594,36 @@ var require_prerelease = __commonJS({
}
});
-// .yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/functions/compare.js
+// .yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/functions/compare.js
var require_compare = __commonJS({
- ".yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/functions/compare.js"(exports, module2) {
+ ".yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/functions/compare.js"(exports, module2) {
var SemVer = require_semver();
var compare = (a, b, loose) => new SemVer(a, loose).compare(new SemVer(b, loose));
module2.exports = compare;
}
});
-// .yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/functions/rcompare.js
+// .yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/functions/rcompare.js
var require_rcompare = __commonJS({
- ".yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/functions/rcompare.js"(exports, module2) {
+ ".yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/functions/rcompare.js"(exports, module2) {
var compare = require_compare();
var rcompare = (a, b, loose) => compare(b, a, loose);
module2.exports = rcompare;
}
});
-// .yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/functions/compare-loose.js
+// .yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/functions/compare-loose.js
var require_compare_loose = __commonJS({
- ".yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/functions/compare-loose.js"(exports, module2) {
+ ".yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/functions/compare-loose.js"(exports, module2) {
var compare = require_compare();
var compareLoose = (a, b) => compare(a, b, true);
module2.exports = compareLoose;
}
});
-// .yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/functions/compare-build.js
+// .yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/functions/compare-build.js
var require_compare_build = __commonJS({
- ".yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/functions/compare-build.js"(exports, module2) {
+ ".yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/functions/compare-build.js"(exports, module2) {
var SemVer = require_semver();
var compareBuild = (a, b, loose) => {
const versionA = new SemVer(a, loose);
@@ -1631,81 +1634,81 @@ var require_compare_build = __commonJS({
}
});
-// .yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/functions/sort.js
+// .yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/functions/sort.js
var require_sort = __commonJS({
- ".yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/functions/sort.js"(exports, module2) {
+ ".yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/functions/sort.js"(exports, module2) {
var compareBuild = require_compare_build();
var sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose));
module2.exports = sort;
}
});
-// .yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/functions/rsort.js
+// .yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/functions/rsort.js
var require_rsort = __commonJS({
- ".yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/functions/rsort.js"(exports, module2) {
+ ".yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/functions/rsort.js"(exports, module2) {
var compareBuild = require_compare_build();
var rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose));
module2.exports = rsort;
}
});
-// .yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/functions/gt.js
+// .yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/functions/gt.js
var require_gt = __commonJS({
- ".yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/functions/gt.js"(exports, module2) {
+ ".yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/functions/gt.js"(exports, module2) {
var compare = require_compare();
var gt = (a, b, loose) => compare(a, b, loose) > 0;
module2.exports = gt;
}
});
-// .yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/functions/lt.js
+// .yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/functions/lt.js
var require_lt = __commonJS({
- ".yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/functions/lt.js"(exports, module2) {
+ ".yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/functions/lt.js"(exports, module2) {
var compare = require_compare();
var lt = (a, b, loose) => compare(a, b, loose) < 0;
module2.exports = lt;
}
});
-// .yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/functions/eq.js
+// .yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/functions/eq.js
var require_eq = __commonJS({
- ".yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/functions/eq.js"(exports, module2) {
+ ".yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/functions/eq.js"(exports, module2) {
var compare = require_compare();
var eq = (a, b, loose) => compare(a, b, loose) === 0;
module2.exports = eq;
}
});
-// .yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/functions/neq.js
+// .yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/functions/neq.js
var require_neq = __commonJS({
- ".yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/functions/neq.js"(exports, module2) {
+ ".yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/functions/neq.js"(exports, module2) {
var compare = require_compare();
var neq = (a, b, loose) => compare(a, b, loose) !== 0;
module2.exports = neq;
}
});
-// .yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/functions/gte.js
+// .yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/functions/gte.js
var require_gte = __commonJS({
- ".yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/functions/gte.js"(exports, module2) {
+ ".yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/functions/gte.js"(exports, module2) {
var compare = require_compare();
var gte = (a, b, loose) => compare(a, b, loose) >= 0;
module2.exports = gte;
}
});
-// .yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/functions/lte.js
+// .yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/functions/lte.js
var require_lte = __commonJS({
- ".yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/functions/lte.js"(exports, module2) {
+ ".yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/functions/lte.js"(exports, module2) {
var compare = require_compare();
var lte = (a, b, loose) => compare(a, b, loose) <= 0;
module2.exports = lte;
}
});
-// .yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/functions/cmp.js
+// .yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/functions/cmp.js
var require_cmp = __commonJS({
- ".yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/functions/cmp.js"(exports, module2) {
+ ".yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/functions/cmp.js"(exports, module2) {
var eq = require_eq();
var neq = require_neq();
var gt = require_gt();
@@ -1752,9 +1755,9 @@ var require_cmp = __commonJS({
}
});
-// .yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/functions/coerce.js
+// .yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/functions/coerce.js
var require_coerce = __commonJS({
- ".yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/functions/coerce.js"(exports, module2) {
+ ".yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/functions/coerce.js"(exports, module2) {
var SemVer = require_semver();
var parse = require_parse();
var { safeRe: re, t } = require_re();
@@ -1771,21 +1774,27 @@ var require_coerce = __commonJS({
options = options || {};
let match = null;
if (!options.rtl) {
- match = version2.match(re[t.COERCE]);
+ match = version2.match(options.includePrerelease ? re[t.COERCEFULL] : re[t.COERCE]);
} else {
+ const coerceRtlRegex = options.includePrerelease ? re[t.COERCERTLFULL] : re[t.COERCERTL];
let next;
- while ((next = re[t.COERCERTL].exec(version2)) && (!match || match.index + match[0].length !== version2.length)) {
+ while ((next = coerceRtlRegex.exec(version2)) && (!match || match.index + match[0].length !== version2.length)) {
if (!match || next.index + next[0].length !== match.index + match[0].length) {
match = next;
}
- re[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length;
+ coerceRtlRegex.lastIndex = next.index + next[1].length + next[2].length;
}
- re[t.COERCERTL].lastIndex = -1;
+ coerceRtlRegex.lastIndex = -1;
}
if (match === null) {
return null;
}
- return parse(`${match[2]}.${match[3] || "0"}.${match[4] || "0"}`, options);
+ const major = match[2];
+ const minor = match[3] || "0";
+ const patch = match[4] || "0";
+ const prerelease = options.includePrerelease && match[5] ? `-${match[5]}` : "";
+ const build = options.includePrerelease && match[6] ? `+${match[6]}` : "";
+ return parse(`${major}.${minor}.${patch}${prerelease}${build}`, options);
};
module2.exports = coerce;
}
@@ -2444,9 +2453,9 @@ var require_lru_cache = __commonJS({
}
});
-// .yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/classes/range.js
+// .yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/classes/range.js
var require_range = __commonJS({
- ".yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/classes/range.js"(exports, module2) {
+ ".yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/classes/range.js"(exports, module2) {
var Range = class _Range {
constructor(range, options) {
options = parseOptions(options);
@@ -2801,9 +2810,9 @@ var require_range = __commonJS({
}
});
-// .yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/classes/comparator.js
+// .yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/classes/comparator.js
var require_comparator = __commonJS({
- ".yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/classes/comparator.js"(exports, module2) {
+ ".yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/classes/comparator.js"(exports, module2) {
var ANY = Symbol("SemVer ANY");
var Comparator = class _Comparator {
static get ANY() {
@@ -2913,9 +2922,9 @@ var require_comparator = __commonJS({
}
});
-// .yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/functions/satisfies.js
+// .yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/functions/satisfies.js
var require_satisfies = __commonJS({
- ".yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/functions/satisfies.js"(exports, module2) {
+ ".yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/functions/satisfies.js"(exports, module2) {
var Range = require_range();
var satisfies = (version2, range, options) => {
try {
@@ -2929,18 +2938,18 @@ var require_satisfies = __commonJS({
}
});
-// .yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/ranges/to-comparators.js
+// .yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/ranges/to-comparators.js
var require_to_comparators = __commonJS({
- ".yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/ranges/to-comparators.js"(exports, module2) {
+ ".yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/ranges/to-comparators.js"(exports, module2) {
var Range = require_range();
var toComparators = (range, options) => new Range(range, options).set.map((comp) => comp.map((c) => c.value).join(" ").trim().split(" "));
module2.exports = toComparators;
}
});
-// .yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/ranges/max-satisfying.js
+// .yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/ranges/max-satisfying.js
var require_max_satisfying = __commonJS({
- ".yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/ranges/max-satisfying.js"(exports, module2) {
+ ".yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/ranges/max-satisfying.js"(exports, module2) {
var SemVer = require_semver();
var Range = require_range();
var maxSatisfying = (versions, range, options) => {
@@ -2966,9 +2975,9 @@ var require_max_satisfying = __commonJS({
}
});
-// .yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/ranges/min-satisfying.js
+// .yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/ranges/min-satisfying.js
var require_min_satisfying = __commonJS({
- ".yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/ranges/min-satisfying.js"(exports, module2) {
+ ".yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/ranges/min-satisfying.js"(exports, module2) {
var SemVer = require_semver();
var Range = require_range();
var minSatisfying = (versions, range, options) => {
@@ -2994,9 +3003,9 @@ var require_min_satisfying = __commonJS({
}
});
-// .yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/ranges/min-version.js
+// .yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/ranges/min-version.js
var require_min_version = __commonJS({
- ".yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/ranges/min-version.js"(exports, module2) {
+ ".yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/ranges/min-version.js"(exports, module2) {
var SemVer = require_semver();
var Range = require_range();
var gt = require_gt();
@@ -3050,9 +3059,9 @@ var require_min_version = __commonJS({
}
});
-// .yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/ranges/valid.js
+// .yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/ranges/valid.js
var require_valid2 = __commonJS({
- ".yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/ranges/valid.js"(exports, module2) {
+ ".yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/ranges/valid.js"(exports, module2) {
var Range = require_range();
var validRange = (range, options) => {
try {
@@ -3065,9 +3074,9 @@ var require_valid2 = __commonJS({
}
});
-// .yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/ranges/outside.js
+// .yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/ranges/outside.js
var require_outside = __commonJS({
- ".yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/ranges/outside.js"(exports, module2) {
+ ".yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/ranges/outside.js"(exports, module2) {
var SemVer = require_semver();
var Comparator = require_comparator();
var { ANY } = Comparator;
@@ -3133,27 +3142,27 @@ var require_outside = __commonJS({
}
});
-// .yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/ranges/gtr.js
+// .yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/ranges/gtr.js
var require_gtr = __commonJS({
- ".yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/ranges/gtr.js"(exports, module2) {
+ ".yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/ranges/gtr.js"(exports, module2) {
var outside = require_outside();
var gtr = (version2, range, options) => outside(version2, range, ">", options);
module2.exports = gtr;
}
});
-// .yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/ranges/ltr.js
+// .yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/ranges/ltr.js
var require_ltr = __commonJS({
- ".yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/ranges/ltr.js"(exports, module2) {
+ ".yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/ranges/ltr.js"(exports, module2) {
var outside = require_outside();
var ltr = (version2, range, options) => outside(version2, range, "<", options);
module2.exports = ltr;
}
});
-// .yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/ranges/intersects.js
+// .yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/ranges/intersects.js
var require_intersects = __commonJS({
- ".yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/ranges/intersects.js"(exports, module2) {
+ ".yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/ranges/intersects.js"(exports, module2) {
var Range = require_range();
var intersects = (r1, r2, options) => {
r1 = new Range(r1, options);
@@ -3164,9 +3173,9 @@ var require_intersects = __commonJS({
}
});
-// .yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/ranges/simplify.js
+// .yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/ranges/simplify.js
var require_simplify = __commonJS({
- ".yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/ranges/simplify.js"(exports, module2) {
+ ".yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/ranges/simplify.js"(exports, module2) {
var satisfies = require_satisfies();
var compare = require_compare();
module2.exports = (versions, range, options) => {
@@ -3213,9 +3222,9 @@ var require_simplify = __commonJS({
}
});
-// .yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/ranges/subset.js
+// .yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/ranges/subset.js
var require_subset = __commonJS({
- ".yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/ranges/subset.js"(exports, module2) {
+ ".yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/ranges/subset.js"(exports, module2) {
var Range = require_range();
var Comparator = require_comparator();
var { ANY } = Comparator;
@@ -3375,9 +3384,9 @@ var require_subset = __commonJS({
}
});
-// .yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/index.js
+// .yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/index.js
var require_semver2 = __commonJS({
- ".yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip/node_modules/semver/index.js"(exports, module2) {
+ ".yarn/cache/semver-npm-7.6.0-f4630729f6-fbfe717094.zip/node_modules/semver/index.js"(exports, module2) {
var internalRe = require_re();
var constants = require_constants();
var SemVer = require_semver();
@@ -4237,33170 +4246,13037 @@ var require_src = __commonJS({
}
});
-// .yarn/cache/lru-cache-npm-7.18.3-e68be5b11c-b3a452b491.zip/node_modules/lru-cache/index.js
-var require_lru_cache2 = __commonJS({
- ".yarn/cache/lru-cache-npm-7.18.3-e68be5b11c-b3a452b491.zip/node_modules/lru-cache/index.js"(exports, module2) {
- var perf = typeof performance === "object" && performance && typeof performance.now === "function" ? performance : Date;
- var hasAbortController = typeof AbortController === "function";
- var AC = hasAbortController ? AbortController : class AbortController {
- constructor() {
- this.signal = new AS();
- }
- abort(reason = new Error("This operation was aborted")) {
- this.signal.reason = this.signal.reason || reason;
- this.signal.aborted = true;
- this.signal.dispatchEvent({
- type: "abort",
- target: this.signal
- });
- }
+// .yarn/cache/proxy-from-env-npm-1.1.0-c13d07f26b-fe7dd8b1bd.zip/node_modules/proxy-from-env/index.js
+var require_proxy_from_env = __commonJS({
+ ".yarn/cache/proxy-from-env-npm-1.1.0-c13d07f26b-fe7dd8b1bd.zip/node_modules/proxy-from-env/index.js"(exports) {
+ "use strict";
+ var parseUrl = require("url").parse;
+ var DEFAULT_PORTS = {
+ ftp: 21,
+ gopher: 70,
+ http: 80,
+ https: 443,
+ ws: 80,
+ wss: 443
};
- var hasAbortSignal = typeof AbortSignal === "function";
- var hasACAbortSignal = typeof AC.AbortSignal === "function";
- var AS = hasAbortSignal ? AbortSignal : hasACAbortSignal ? AC.AbortController : class AbortSignal {
- constructor() {
- this.reason = void 0;
- this.aborted = false;
- this._listeners = [];
+ var stringEndsWith = String.prototype.endsWith || function(s) {
+ return s.length <= this.length && this.indexOf(s, this.length - s.length) !== -1;
+ };
+ function getProxyForUrl(url) {
+ var parsedUrl = typeof url === "string" ? parseUrl(url) : url || {};
+ var proto = parsedUrl.protocol;
+ var hostname = parsedUrl.host;
+ var port = parsedUrl.port;
+ if (typeof hostname !== "string" || !hostname || typeof proto !== "string") {
+ return "";
}
- dispatchEvent(e) {
- if (e.type === "abort") {
- this.aborted = true;
- this.onabort(e);
- this._listeners.forEach((f) => f(e), this);
- }
+ proto = proto.split(":", 1)[0];
+ hostname = hostname.replace(/:\d*$/, "");
+ port = parseInt(port) || DEFAULT_PORTS[proto] || 0;
+ if (!shouldProxy(hostname, port)) {
+ return "";
}
- onabort() {
+ var proxy = getEnv("npm_config_" + proto + "_proxy") || getEnv(proto + "_proxy") || getEnv("npm_config_proxy") || getEnv("all_proxy");
+ if (proxy && proxy.indexOf("://") === -1) {
+ proxy = proto + "://" + proxy;
}
- addEventListener(ev, fn2) {
- if (ev === "abort") {
- this._listeners.push(fn2);
- }
+ return proxy;
+ }
+ function shouldProxy(hostname, port) {
+ var NO_PROXY = (getEnv("npm_config_no_proxy") || getEnv("no_proxy")).toLowerCase();
+ if (!NO_PROXY) {
+ return true;
+ }
+ if (NO_PROXY === "*") {
+ return false;
}
- removeEventListener(ev, fn2) {
- if (ev === "abort") {
- this._listeners = this._listeners.filter((f) => f !== fn2);
+ return NO_PROXY.split(/[,\s]/).every(function(proxy) {
+ if (!proxy) {
+ return true;
+ }
+ var parsedProxy = proxy.match(/^(.+):(\d+)$/);
+ var parsedProxyHostname = parsedProxy ? parsedProxy[1] : proxy;
+ var parsedProxyPort = parsedProxy ? parseInt(parsedProxy[2]) : 0;
+ if (parsedProxyPort && parsedProxyPort !== port) {
+ return true;
+ }
+ if (!/^[.*]/.test(parsedProxyHostname)) {
+ return hostname !== parsedProxyHostname;
+ }
+ if (parsedProxyHostname.charAt(0) === "*") {
+ parsedProxyHostname = parsedProxyHostname.slice(1);
}
+ return !stringEndsWith.call(hostname, parsedProxyHostname);
+ });
+ }
+ function getEnv(key) {
+ return process.env[key.toLowerCase()] || process.env[key.toUpperCase()] || "";
+ }
+ exports.getProxyForUrl = getProxyForUrl;
+ }
+});
+
+// .yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/core/symbols.js
+var require_symbols = __commonJS({
+ ".yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/core/symbols.js"(exports, module2) {
+ module2.exports = {
+ kClose: Symbol("close"),
+ kDestroy: Symbol("destroy"),
+ kDispatch: Symbol("dispatch"),
+ kUrl: Symbol("url"),
+ kWriting: Symbol("writing"),
+ kResuming: Symbol("resuming"),
+ kQueue: Symbol("queue"),
+ kConnect: Symbol("connect"),
+ kConnecting: Symbol("connecting"),
+ kHeadersList: Symbol("headers list"),
+ kKeepAliveDefaultTimeout: Symbol("default keep alive timeout"),
+ kKeepAliveMaxTimeout: Symbol("max keep alive timeout"),
+ kKeepAliveTimeoutThreshold: Symbol("keep alive timeout threshold"),
+ kKeepAliveTimeoutValue: Symbol("keep alive timeout"),
+ kKeepAlive: Symbol("keep alive"),
+ kHeadersTimeout: Symbol("headers timeout"),
+ kBodyTimeout: Symbol("body timeout"),
+ kServerName: Symbol("server name"),
+ kLocalAddress: Symbol("local address"),
+ kHost: Symbol("host"),
+ kNoRef: Symbol("no ref"),
+ kBodyUsed: Symbol("used"),
+ kRunning: Symbol("running"),
+ kBlocking: Symbol("blocking"),
+ kPending: Symbol("pending"),
+ kSize: Symbol("size"),
+ kBusy: Symbol("busy"),
+ kQueued: Symbol("queued"),
+ kFree: Symbol("free"),
+ kConnected: Symbol("connected"),
+ kClosed: Symbol("closed"),
+ kNeedDrain: Symbol("need drain"),
+ kReset: Symbol("reset"),
+ kDestroyed: Symbol.for("nodejs.stream.destroyed"),
+ kMaxHeadersSize: Symbol("max headers size"),
+ kRunningIdx: Symbol("running index"),
+ kPendingIdx: Symbol("pending index"),
+ kError: Symbol("error"),
+ kClients: Symbol("clients"),
+ kClient: Symbol("client"),
+ kParser: Symbol("parser"),
+ kOnDestroyed: Symbol("destroy callbacks"),
+ kPipelining: Symbol("pipelining"),
+ kSocket: Symbol("socket"),
+ kHostHeader: Symbol("host header"),
+ kConnector: Symbol("connector"),
+ kStrictContentLength: Symbol("strict content length"),
+ kMaxRedirections: Symbol("maxRedirections"),
+ kMaxRequests: Symbol("maxRequestsPerClient"),
+ kProxy: Symbol("proxy agent options"),
+ kCounter: Symbol("socket request counter"),
+ kInterceptors: Symbol("dispatch interceptors"),
+ kMaxResponseSize: Symbol("max response size"),
+ kHTTP2Session: Symbol("http2Session"),
+ kHTTP2SessionState: Symbol("http2Session state"),
+ kHTTP2BuildRequest: Symbol("http2 build request"),
+ kHTTP1BuildRequest: Symbol("http1 build request"),
+ kHTTP2CopyHeaders: Symbol("http2 copy headers"),
+ kHTTPConnVersion: Symbol("http connection version"),
+ kRetryHandlerDefaultRetry: Symbol("retry agent default retry"),
+ kConstruct: Symbol("constructable")
+ };
+ }
+});
+
+// .yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/core/errors.js
+var require_errors = __commonJS({
+ ".yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/core/errors.js"(exports, module2) {
+ "use strict";
+ var UndiciError = class extends Error {
+ constructor(message) {
+ super(message);
+ this.name = "UndiciError";
+ this.code = "UND_ERR";
+ }
+ };
+ var ConnectTimeoutError = class extends UndiciError {
+ constructor(message) {
+ super(message);
+ this.name = "ConnectTimeoutError";
+ this.message = message || "Connect Timeout Error";
+ this.code = "UND_ERR_CONNECT_TIMEOUT";
}
};
- var warned = /* @__PURE__ */ new Set();
- var deprecatedOption = (opt, instead) => {
- const code = `LRU_CACHE_OPTION_${opt}`;
- if (shouldWarn(code)) {
- warn(code, `${opt} option`, `options.${instead}`, LRUCache);
+ var HeadersTimeoutError = class extends UndiciError {
+ constructor(message) {
+ super(message);
+ this.name = "HeadersTimeoutError";
+ this.message = message || "Headers Timeout Error";
+ this.code = "UND_ERR_HEADERS_TIMEOUT";
}
};
- var deprecatedMethod = (method, instead) => {
- const code = `LRU_CACHE_METHOD_${method}`;
- if (shouldWarn(code)) {
- const { prototype } = LRUCache;
- const { get } = Object.getOwnPropertyDescriptor(prototype, method);
- warn(code, `${method} method`, `cache.${instead}()`, get);
+ var HeadersOverflowError = class extends UndiciError {
+ constructor(message) {
+ super(message);
+ this.name = "HeadersOverflowError";
+ this.message = message || "Headers Overflow Error";
+ this.code = "UND_ERR_HEADERS_OVERFLOW";
}
};
- var deprecatedProperty = (field, instead) => {
- const code = `LRU_CACHE_PROPERTY_${field}`;
- if (shouldWarn(code)) {
- const { prototype } = LRUCache;
- const { get } = Object.getOwnPropertyDescriptor(prototype, field);
- warn(code, `${field} property`, `cache.${instead}`, get);
+ var BodyTimeoutError = class extends UndiciError {
+ constructor(message) {
+ super(message);
+ this.name = "BodyTimeoutError";
+ this.message = message || "Body Timeout Error";
+ this.code = "UND_ERR_BODY_TIMEOUT";
}
};
- var emitWarning = (...a) => {
- typeof process === "object" && process && typeof process.emitWarning === "function" ? process.emitWarning(...a) : console.error(...a);
+ var ResponseStatusCodeError = class extends UndiciError {
+ constructor(message, statusCode, headers, body) {
+ super(message);
+ this.name = "ResponseStatusCodeError";
+ this.message = message || "Response Status Code Error";
+ this.code = "UND_ERR_RESPONSE_STATUS_CODE";
+ this.body = body;
+ this.status = statusCode;
+ this.statusCode = statusCode;
+ this.headers = headers;
+ }
};
- var shouldWarn = (code) => !warned.has(code);
- var warn = (code, what, instead, fn2) => {
- warned.add(code);
- const msg = `The ${what} is deprecated. Please use ${instead} instead.`;
- emitWarning(msg, "DeprecationWarning", code, fn2);
+ var InvalidArgumentError = class extends UndiciError {
+ constructor(message) {
+ super(message);
+ this.name = "InvalidArgumentError";
+ this.message = message || "Invalid Argument Error";
+ this.code = "UND_ERR_INVALID_ARG";
+ }
};
- var isPosInt = (n) => n && n === Math.floor(n) && n > 0 && isFinite(n);
- var getUintArray = (max) => !isPosInt(max) ? null : max <= Math.pow(2, 8) ? Uint8Array : max <= Math.pow(2, 16) ? Uint16Array : max <= Math.pow(2, 32) ? Uint32Array : max <= Number.MAX_SAFE_INTEGER ? ZeroArray : null;
- var ZeroArray = class extends Array {
- constructor(size) {
- super(size);
- this.fill(0);
+ var InvalidReturnValueError = class extends UndiciError {
+ constructor(message) {
+ super(message);
+ this.name = "InvalidReturnValueError";
+ this.message = message || "Invalid Return Value Error";
+ this.code = "UND_ERR_INVALID_RETURN_VALUE";
}
};
- var Stack = class {
- constructor(max) {
- if (max === 0) {
- return [];
- }
- const UintArray = getUintArray(max);
- this.heap = new UintArray(max);
- this.length = 0;
+ var AbortError = class extends UndiciError {
+ constructor(message) {
+ super(message);
+ this.name = "AbortError";
+ this.message = message || "The operation was aborted";
}
- push(n) {
- this.heap[this.length++] = n;
+ };
+ var RequestAbortedError = class extends AbortError {
+ constructor(message) {
+ super(message);
+ this.name = "AbortError";
+ this.message = message || "Request aborted";
+ this.code = "UND_ERR_ABORTED";
}
- pop() {
- return this.heap[--this.length];
+ };
+ var InformationalError = class extends UndiciError {
+ constructor(message) {
+ super(message);
+ this.name = "InformationalError";
+ this.message = message || "Request information";
+ this.code = "UND_ERR_INFO";
}
};
- var LRUCache = class _LRUCache {
- constructor(options = {}) {
- const {
- max = 0,
- ttl,
- ttlResolution = 1,
- ttlAutopurge,
- updateAgeOnGet,
- updateAgeOnHas,
- allowStale,
- dispose,
- disposeAfter,
- noDisposeOnSet,
- noUpdateTTL,
- maxSize = 0,
- maxEntrySize = 0,
- sizeCalculation,
- fetchMethod,
- fetchContext,
- noDeleteOnFetchRejection,
- noDeleteOnStaleGet,
- allowStaleOnFetchRejection,
- allowStaleOnFetchAbort,
- ignoreFetchAbort
- } = options;
- const { length, maxAge, stale } = options instanceof _LRUCache ? {} : options;
- if (max !== 0 && !isPosInt(max)) {
- throw new TypeError("max option must be a nonnegative integer");
- }
- const UintArray = max ? getUintArray(max) : Array;
- if (!UintArray) {
- throw new Error("invalid max value: " + max);
- }
- this.max = max;
- this.maxSize = maxSize;
- this.maxEntrySize = maxEntrySize || this.maxSize;
- this.sizeCalculation = sizeCalculation || length;
- if (this.sizeCalculation) {
- if (!this.maxSize && !this.maxEntrySize) {
- throw new TypeError(
- "cannot set sizeCalculation without setting maxSize or maxEntrySize"
- );
- }
- if (typeof this.sizeCalculation !== "function") {
- throw new TypeError("sizeCalculation set to non-function");
+ var RequestContentLengthMismatchError = class extends UndiciError {
+ constructor(message) {
+ super(message);
+ this.name = "RequestContentLengthMismatchError";
+ this.message = message || "Request body length does not match content-length header";
+ this.code = "UND_ERR_REQ_CONTENT_LENGTH_MISMATCH";
+ }
+ };
+ var ResponseContentLengthMismatchError = class extends UndiciError {
+ constructor(message) {
+ super(message);
+ this.name = "ResponseContentLengthMismatchError";
+ this.message = message || "Response body length does not match content-length header";
+ this.code = "UND_ERR_RES_CONTENT_LENGTH_MISMATCH";
+ }
+ };
+ var ClientDestroyedError = class extends UndiciError {
+ constructor(message) {
+ super(message);
+ this.name = "ClientDestroyedError";
+ this.message = message || "The client is destroyed";
+ this.code = "UND_ERR_DESTROYED";
+ }
+ };
+ var ClientClosedError = class extends UndiciError {
+ constructor(message) {
+ super(message);
+ this.name = "ClientClosedError";
+ this.message = message || "The client is closed";
+ this.code = "UND_ERR_CLOSED";
+ }
+ };
+ var SocketError = class extends UndiciError {
+ constructor(message, socket) {
+ super(message);
+ this.name = "SocketError";
+ this.message = message || "Socket error";
+ this.code = "UND_ERR_SOCKET";
+ this.socket = socket;
+ }
+ };
+ var NotSupportedError = class extends UndiciError {
+ constructor(message) {
+ super(message);
+ this.name = "NotSupportedError";
+ this.message = message || "Not supported error";
+ this.code = "UND_ERR_NOT_SUPPORTED";
+ }
+ };
+ var BalancedPoolMissingUpstreamError = class extends UndiciError {
+ constructor(message) {
+ super(message);
+ this.name = "MissingUpstreamError";
+ this.message = message || "No upstream has been added to the BalancedPool";
+ this.code = "UND_ERR_BPL_MISSING_UPSTREAM";
+ }
+ };
+ var HTTPParserError = class extends Error {
+ constructor(message, code, data) {
+ super(message);
+ this.name = "HTTPParserError";
+ this.code = code ? `HPE_${code}` : void 0;
+ this.data = data ? data.toString() : void 0;
+ }
+ };
+ var ResponseExceededMaxSizeError = class extends UndiciError {
+ constructor(message) {
+ super(message);
+ this.name = "ResponseExceededMaxSizeError";
+ this.message = message || "Response content exceeded max size";
+ this.code = "UND_ERR_RES_EXCEEDED_MAX_SIZE";
+ }
+ };
+ var RequestRetryError = class extends UndiciError {
+ constructor(message, code, { headers, data }) {
+ super(message);
+ this.name = "RequestRetryError";
+ this.message = message || "Request retry error";
+ this.code = "UND_ERR_REQ_RETRY";
+ this.statusCode = code;
+ this.data = data;
+ this.headers = headers;
+ }
+ };
+ module2.exports = {
+ AbortError,
+ HTTPParserError,
+ UndiciError,
+ HeadersTimeoutError,
+ HeadersOverflowError,
+ BodyTimeoutError,
+ RequestContentLengthMismatchError,
+ ConnectTimeoutError,
+ ResponseStatusCodeError,
+ InvalidArgumentError,
+ InvalidReturnValueError,
+ RequestAbortedError,
+ ClientDestroyedError,
+ ClientClosedError,
+ InformationalError,
+ SocketError,
+ NotSupportedError,
+ ResponseContentLengthMismatchError,
+ BalancedPoolMissingUpstreamError,
+ ResponseExceededMaxSizeError,
+ RequestRetryError
+ };
+ }
+});
+
+// .yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/dispatcher.js
+var require_dispatcher = __commonJS({
+ ".yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/dispatcher.js"(exports, module2) {
+ "use strict";
+ var EventEmitter = require("node:events");
+ var Dispatcher = class extends EventEmitter {
+ dispatch() {
+ throw new Error("not implemented");
+ }
+ close() {
+ throw new Error("not implemented");
+ }
+ destroy() {
+ throw new Error("not implemented");
+ }
+ };
+ module2.exports = Dispatcher;
+ }
+});
+
+// .yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/dispatcher-base.js
+var require_dispatcher_base = __commonJS({
+ ".yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/dispatcher-base.js"(exports, module2) {
+ "use strict";
+ var Dispatcher = require_dispatcher();
+ var {
+ ClientDestroyedError,
+ ClientClosedError,
+ InvalidArgumentError
+ } = require_errors();
+ var { kDestroy, kClose, kDispatch, kInterceptors } = require_symbols();
+ var kDestroyed = Symbol("destroyed");
+ var kClosed = Symbol("closed");
+ var kOnDestroyed = Symbol("onDestroyed");
+ var kOnClosed = Symbol("onClosed");
+ var kInterceptedDispatch = Symbol("Intercepted Dispatch");
+ var DispatcherBase = class extends Dispatcher {
+ constructor() {
+ super();
+ this[kDestroyed] = false;
+ this[kOnDestroyed] = null;
+ this[kClosed] = false;
+ this[kOnClosed] = [];
+ }
+ get destroyed() {
+ return this[kDestroyed];
+ }
+ get closed() {
+ return this[kClosed];
+ }
+ get interceptors() {
+ return this[kInterceptors];
+ }
+ set interceptors(newInterceptors) {
+ if (newInterceptors) {
+ for (let i = newInterceptors.length - 1; i >= 0; i--) {
+ const interceptor = this[kInterceptors][i];
+ if (typeof interceptor !== "function") {
+ throw new InvalidArgumentError("interceptor must be an function");
+ }
}
}
- this.fetchMethod = fetchMethod || null;
- if (this.fetchMethod && typeof this.fetchMethod !== "function") {
- throw new TypeError(
- "fetchMethod must be a function if specified"
- );
+ this[kInterceptors] = newInterceptors;
+ }
+ close(callback) {
+ if (callback === void 0) {
+ return new Promise((resolve, reject) => {
+ this.close((err, data) => {
+ return err ? reject(err) : resolve(data);
+ });
+ });
}
- this.fetchContext = fetchContext;
- if (!this.fetchMethod && fetchContext !== void 0) {
- throw new TypeError(
- "cannot set fetchContext without fetchMethod"
- );
+ if (typeof callback !== "function") {
+ throw new InvalidArgumentError("invalid callback");
}
- this.keyMap = /* @__PURE__ */ new Map();
- this.keyList = new Array(max).fill(null);
- this.valList = new Array(max).fill(null);
- this.next = new UintArray(max);
- this.prev = new UintArray(max);
- this.head = 0;
- this.tail = 0;
- this.free = new Stack(max);
- this.initialFill = 1;
- this.size = 0;
- if (typeof dispose === "function") {
- this.dispose = dispose;
- }
- if (typeof disposeAfter === "function") {
- this.disposeAfter = disposeAfter;
- this.disposed = [];
- } else {
- this.disposeAfter = null;
- this.disposed = null;
- }
- this.noDisposeOnSet = !!noDisposeOnSet;
- this.noUpdateTTL = !!noUpdateTTL;
- this.noDeleteOnFetchRejection = !!noDeleteOnFetchRejection;
- this.allowStaleOnFetchRejection = !!allowStaleOnFetchRejection;
- this.allowStaleOnFetchAbort = !!allowStaleOnFetchAbort;
- this.ignoreFetchAbort = !!ignoreFetchAbort;
- if (this.maxEntrySize !== 0) {
- if (this.maxSize !== 0) {
- if (!isPosInt(this.maxSize)) {
- throw new TypeError(
- "maxSize must be a positive integer if specified"
- );
- }
- }
- if (!isPosInt(this.maxEntrySize)) {
- throw new TypeError(
- "maxEntrySize must be a positive integer if specified"
- );
+ if (this[kDestroyed]) {
+ queueMicrotask(() => callback(new ClientDestroyedError(), null));
+ return;
+ }
+ if (this[kClosed]) {
+ if (this[kOnClosed]) {
+ this[kOnClosed].push(callback);
+ } else {
+ queueMicrotask(() => callback(null, null));
}
- this.initializeSizeTracking();
- }
- this.allowStale = !!allowStale || !!stale;
- this.noDeleteOnStaleGet = !!noDeleteOnStaleGet;
- this.updateAgeOnGet = !!updateAgeOnGet;
- this.updateAgeOnHas = !!updateAgeOnHas;
- this.ttlResolution = isPosInt(ttlResolution) || ttlResolution === 0 ? ttlResolution : 1;
- this.ttlAutopurge = !!ttlAutopurge;
- this.ttl = ttl || maxAge || 0;
- if (this.ttl) {
- if (!isPosInt(this.ttl)) {
- throw new TypeError(
- "ttl must be a positive integer if specified"
- );
+ return;
+ }
+ this[kClosed] = true;
+ this[kOnClosed].push(callback);
+ const onClosed = () => {
+ const callbacks = this[kOnClosed];
+ this[kOnClosed] = null;
+ for (let i = 0; i < callbacks.length; i++) {
+ callbacks[i](null, null);
}
- this.initializeTTLTracking();
+ };
+ this[kClose]().then(() => this.destroy()).then(() => {
+ queueMicrotask(onClosed);
+ });
+ }
+ destroy(err, callback) {
+ if (typeof err === "function") {
+ callback = err;
+ err = null;
}
- if (this.max === 0 && this.ttl === 0 && this.maxSize === 0) {
- throw new TypeError(
- "At least one of max, maxSize, or ttl is required"
- );
+ if (callback === void 0) {
+ return new Promise((resolve, reject) => {
+ this.destroy(err, (err2, data) => {
+ return err2 ? (
+ /* istanbul ignore next: should never error */
+ reject(err2)
+ ) : resolve(data);
+ });
+ });
+ }
+ if (typeof callback !== "function") {
+ throw new InvalidArgumentError("invalid callback");
}
- if (!this.ttlAutopurge && !this.max && !this.maxSize) {
- const code = "LRU_CACHE_UNBOUNDED";
- if (shouldWarn(code)) {
- warned.add(code);
- const msg = "TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.";
- emitWarning(msg, "UnboundedCacheWarning", code, _LRUCache);
+ if (this[kDestroyed]) {
+ if (this[kOnDestroyed]) {
+ this[kOnDestroyed].push(callback);
+ } else {
+ queueMicrotask(() => callback(null, null));
}
+ return;
}
- if (stale) {
- deprecatedOption("stale", "allowStale");
+ if (!err) {
+ err = new ClientDestroyedError();
}
- if (maxAge) {
- deprecatedOption("maxAge", "ttl");
+ this[kDestroyed] = true;
+ this[kOnDestroyed] = this[kOnDestroyed] || [];
+ this[kOnDestroyed].push(callback);
+ const onDestroyed = () => {
+ const callbacks = this[kOnDestroyed];
+ this[kOnDestroyed] = null;
+ for (let i = 0; i < callbacks.length; i++) {
+ callbacks[i](null, null);
+ }
+ };
+ this[kDestroy](err).then(() => {
+ queueMicrotask(onDestroyed);
+ });
+ }
+ [kInterceptedDispatch](opts, handler) {
+ if (!this[kInterceptors] || this[kInterceptors].length === 0) {
+ this[kInterceptedDispatch] = this[kDispatch];
+ return this[kDispatch](opts, handler);
}
- if (length) {
- deprecatedOption("length", "sizeCalculation");
+ let dispatch = this[kDispatch].bind(this);
+ for (let i = this[kInterceptors].length - 1; i >= 0; i--) {
+ dispatch = this[kInterceptors][i](dispatch);
}
+ this[kInterceptedDispatch] = dispatch;
+ return dispatch(opts, handler);
}
- getRemainingTTL(key) {
- return this.has(key, { updateAgeOnHas: false }) ? Infinity : 0;
- }
- initializeTTLTracking() {
- this.ttls = new ZeroArray(this.max);
- this.starts = new ZeroArray(this.max);
- this.setItemTTL = (index, ttl, start = perf.now()) => {
- this.starts[index] = ttl !== 0 ? start : 0;
- this.ttls[index] = ttl;
- if (ttl !== 0 && this.ttlAutopurge) {
- const t = setTimeout(() => {
- if (this.isStale(index)) {
- this.delete(this.keyList[index]);
- }
- }, ttl + 1);
- if (t.unref) {
- t.unref();
- }
+ dispatch(opts, handler) {
+ if (!handler || typeof handler !== "object") {
+ throw new InvalidArgumentError("handler must be an object");
+ }
+ try {
+ if (!opts || typeof opts !== "object") {
+ throw new InvalidArgumentError("opts must be an object.");
}
- };
- this.updateItemAge = (index) => {
- this.starts[index] = this.ttls[index] !== 0 ? perf.now() : 0;
- };
- this.statusTTL = (status, index) => {
- if (status) {
- status.ttl = this.ttls[index];
- status.start = this.starts[index];
- status.now = cachedNow || getNow();
- status.remainingTTL = status.now + status.ttl - status.start;
+ if (this[kDestroyed] || this[kOnDestroyed]) {
+ throw new ClientDestroyedError();
}
- };
- let cachedNow = 0;
- const getNow = () => {
- const n = perf.now();
- if (this.ttlResolution > 0) {
- cachedNow = n;
- const t = setTimeout(
- () => cachedNow = 0,
- this.ttlResolution
- );
- if (t.unref) {
- t.unref();
- }
+ if (this[kClosed]) {
+ throw new ClientClosedError();
}
- return n;
- };
- this.getRemainingTTL = (key) => {
- const index = this.keyMap.get(key);
- if (index === void 0) {
- return 0;
+ return this[kInterceptedDispatch](opts, handler);
+ } catch (err) {
+ if (typeof handler.onError !== "function") {
+ throw new InvalidArgumentError("invalid onError method");
}
- return this.ttls[index] === 0 || this.starts[index] === 0 ? Infinity : this.starts[index] + this.ttls[index] - (cachedNow || getNow());
- };
- this.isStale = (index) => {
- return this.ttls[index] !== 0 && this.starts[index] !== 0 && (cachedNow || getNow()) - this.starts[index] > this.ttls[index];
- };
+ handler.onError(err);
+ return false;
+ }
}
- updateItemAge(_index) {
+ };
+ module2.exports = DispatcherBase;
+ }
+});
+
+// .yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/node/fixed-queue.js
+var require_fixed_queue = __commonJS({
+ ".yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/node/fixed-queue.js"(exports, module2) {
+ "use strict";
+ var kSize = 2048;
+ var kMask = kSize - 1;
+ var FixedCircularBuffer = class {
+ constructor() {
+ this.bottom = 0;
+ this.top = 0;
+ this.list = new Array(kSize);
+ this.next = null;
}
- statusTTL(_status, _index) {
+ isEmpty() {
+ return this.top === this.bottom;
}
- setItemTTL(_index, _ttl, _start) {
+ isFull() {
+ return (this.top + 1 & kMask) === this.bottom;
}
- isStale(_index) {
- return false;
+ push(data) {
+ this.list[this.top] = data;
+ this.top = this.top + 1 & kMask;
}
- initializeSizeTracking() {
- this.calculatedSize = 0;
- this.sizes = new ZeroArray(this.max);
- this.removeItemSize = (index) => {
- this.calculatedSize -= this.sizes[index];
- this.sizes[index] = 0;
- };
- this.requireSize = (k, v, size, sizeCalculation) => {
- if (this.isBackgroundFetch(v)) {
- return 0;
- }
- if (!isPosInt(size)) {
- if (sizeCalculation) {
- if (typeof sizeCalculation !== "function") {
- throw new TypeError("sizeCalculation must be a function");
- }
- size = sizeCalculation(v, k);
- if (!isPosInt(size)) {
- throw new TypeError(
- "sizeCalculation return invalid (expect positive integer)"
- );
- }
- } else {
- throw new TypeError(
- "invalid size value (must be positive integer). When maxSize or maxEntrySize is used, sizeCalculation or size must be set."
- );
- }
- }
- return size;
- };
- this.addItemSize = (index, size, status) => {
- this.sizes[index] = size;
- if (this.maxSize) {
- const maxSize = this.maxSize - this.sizes[index];
- while (this.calculatedSize > maxSize) {
- this.evict(true);
- }
- }
- this.calculatedSize += this.sizes[index];
- if (status) {
- status.entrySize = size;
- status.totalCalculatedSize = this.calculatedSize;
- }
- };
+ shift() {
+ const nextItem = this.list[this.bottom];
+ if (nextItem === void 0)
+ return null;
+ this.list[this.bottom] = void 0;
+ this.bottom = this.bottom + 1 & kMask;
+ return nextItem;
}
- removeItemSize(_index) {
+ };
+ module2.exports = class FixedQueue {
+ constructor() {
+ this.head = this.tail = new FixedCircularBuffer();
}
- addItemSize(_index, _size) {
+ isEmpty() {
+ return this.head.isEmpty();
}
- requireSize(_k, _v, size, sizeCalculation) {
- if (size || sizeCalculation) {
- throw new TypeError(
- "cannot set size without setting maxSize or maxEntrySize on cache"
- );
+ push(data) {
+ if (this.head.isFull()) {
+ this.head = this.head.next = new FixedCircularBuffer();
}
+ this.head.push(data);
}
- *indexes({ allowStale = this.allowStale } = {}) {
- if (this.size) {
- for (let i = this.tail; true; ) {
- if (!this.isValidIndex(i)) {
- break;
- }
- if (allowStale || !this.isStale(i)) {
- yield i;
- }
- if (i === this.head) {
- break;
- } else {
- i = this.prev[i];
- }
- }
+ shift() {
+ const tail = this.tail;
+ const next = tail.shift();
+ if (tail.isEmpty() && tail.next !== null) {
+ this.tail = tail.next;
}
+ return next;
}
- *rindexes({ allowStale = this.allowStale } = {}) {
- if (this.size) {
- for (let i = this.head; true; ) {
- if (!this.isValidIndex(i)) {
- break;
- }
- if (allowStale || !this.isStale(i)) {
- yield i;
- }
- if (i === this.tail) {
+ };
+ }
+});
+
+// .yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/pool-stats.js
+var require_pool_stats = __commonJS({
+ ".yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/pool-stats.js"(exports, module2) {
+ var { kFree, kConnected, kPending, kQueued, kRunning, kSize } = require_symbols();
+ var kPool = Symbol("pool");
+ var PoolStats = class {
+ constructor(pool) {
+ this[kPool] = pool;
+ }
+ get connected() {
+ return this[kPool][kConnected];
+ }
+ get free() {
+ return this[kPool][kFree];
+ }
+ get pending() {
+ return this[kPool][kPending];
+ }
+ get queued() {
+ return this[kPool][kQueued];
+ }
+ get running() {
+ return this[kPool][kRunning];
+ }
+ get size() {
+ return this[kPool][kSize];
+ }
+ };
+ module2.exports = PoolStats;
+ }
+});
+
+// .yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/pool-base.js
+var require_pool_base = __commonJS({
+ ".yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/pool-base.js"(exports, module2) {
+ "use strict";
+ var DispatcherBase = require_dispatcher_base();
+ var FixedQueue = require_fixed_queue();
+ var { kConnected, kSize, kRunning, kPending, kQueued, kBusy, kFree, kUrl, kClose, kDestroy, kDispatch } = require_symbols();
+ var PoolStats = require_pool_stats();
+ var kClients = Symbol("clients");
+ var kNeedDrain = Symbol("needDrain");
+ var kQueue = Symbol("queue");
+ var kClosedResolve = Symbol("closed resolve");
+ var kOnDrain = Symbol("onDrain");
+ var kOnConnect = Symbol("onConnect");
+ var kOnDisconnect = Symbol("onDisconnect");
+ var kOnConnectionError = Symbol("onConnectionError");
+ var kGetDispatcher = Symbol("get dispatcher");
+ var kAddClient = Symbol("add client");
+ var kRemoveClient = Symbol("remove client");
+ var kStats = Symbol("stats");
+ var PoolBase = class extends DispatcherBase {
+ constructor() {
+ super();
+ this[kQueue] = new FixedQueue();
+ this[kClients] = [];
+ this[kQueued] = 0;
+ const pool = this;
+ this[kOnDrain] = function onDrain(origin, targets) {
+ const queue = pool[kQueue];
+ let needDrain = false;
+ while (!needDrain) {
+ const item = queue.shift();
+ if (!item) {
break;
- } else {
- i = this.next[i];
}
+ pool[kQueued]--;
+ needDrain = !this.dispatch(item.opts, item.handler);
}
- }
+ this[kNeedDrain] = needDrain;
+ if (!this[kNeedDrain] && pool[kNeedDrain]) {
+ pool[kNeedDrain] = false;
+ pool.emit("drain", origin, [pool, ...targets]);
+ }
+ if (pool[kClosedResolve] && queue.isEmpty()) {
+ Promise.all(pool[kClients].map((c) => c.close())).then(pool[kClosedResolve]);
+ }
+ };
+ this[kOnConnect] = (origin, targets) => {
+ pool.emit("connect", origin, [pool, ...targets]);
+ };
+ this[kOnDisconnect] = (origin, targets, err) => {
+ pool.emit("disconnect", origin, [pool, ...targets], err);
+ };
+ this[kOnConnectionError] = (origin, targets, err) => {
+ pool.emit("connectionError", origin, [pool, ...targets], err);
+ };
+ this[kStats] = new PoolStats(this);
}
- isValidIndex(index) {
- return index !== void 0 && this.keyMap.get(this.keyList[index]) === index;
+ get [kBusy]() {
+ return this[kNeedDrain];
}
- *entries() {
- for (const i of this.indexes()) {
- if (this.valList[i] !== void 0 && this.keyList[i] !== void 0 && !this.isBackgroundFetch(this.valList[i])) {
- yield [this.keyList[i], this.valList[i]];
- }
+ get [kConnected]() {
+ return this[kClients].filter((client) => client[kConnected]).length;
+ }
+ get [kFree]() {
+ return this[kClients].filter((client) => client[kConnected] && !client[kNeedDrain]).length;
+ }
+ get [kPending]() {
+ let ret = this[kQueued];
+ for (const { [kPending]: pending } of this[kClients]) {
+ ret += pending;
}
+ return ret;
}
- *rentries() {
- for (const i of this.rindexes()) {
- if (this.valList[i] !== void 0 && this.keyList[i] !== void 0 && !this.isBackgroundFetch(this.valList[i])) {
- yield [this.keyList[i], this.valList[i]];
- }
+ get [kRunning]() {
+ let ret = 0;
+ for (const { [kRunning]: running } of this[kClients]) {
+ ret += running;
}
+ return ret;
}
- *keys() {
- for (const i of this.indexes()) {
- if (this.keyList[i] !== void 0 && !this.isBackgroundFetch(this.valList[i])) {
- yield this.keyList[i];
- }
+ get [kSize]() {
+ let ret = this[kQueued];
+ for (const { [kSize]: size } of this[kClients]) {
+ ret += size;
}
+ return ret;
}
- *rkeys() {
- for (const i of this.rindexes()) {
- if (this.keyList[i] !== void 0 && !this.isBackgroundFetch(this.valList[i])) {
- yield this.keyList[i];
- }
+ get stats() {
+ return this[kStats];
+ }
+ async [kClose]() {
+ if (this[kQueue].isEmpty()) {
+ return Promise.all(this[kClients].map((c) => c.close()));
+ } else {
+ return new Promise((resolve) => {
+ this[kClosedResolve] = resolve;
+ });
}
}
- *values() {
- for (const i of this.indexes()) {
- if (this.valList[i] !== void 0 && !this.isBackgroundFetch(this.valList[i])) {
- yield this.valList[i];
+ async [kDestroy](err) {
+ while (true) {
+ const item = this[kQueue].shift();
+ if (!item) {
+ break;
}
+ item.handler.onError(err);
}
+ return Promise.all(this[kClients].map((c) => c.destroy(err)));
}
- *rvalues() {
- for (const i of this.rindexes()) {
- if (this.valList[i] !== void 0 && !this.isBackgroundFetch(this.valList[i])) {
- yield this.valList[i];
- }
+ [kDispatch](opts, handler) {
+ const dispatcher = this[kGetDispatcher]();
+ if (!dispatcher) {
+ this[kNeedDrain] = true;
+ this[kQueue].push({ opts, handler });
+ this[kQueued]++;
+ } else if (!dispatcher.dispatch(opts, handler)) {
+ dispatcher[kNeedDrain] = true;
+ this[kNeedDrain] = !this[kGetDispatcher]();
}
+ return !this[kNeedDrain];
}
- [Symbol.iterator]() {
- return this.entries();
+ [kAddClient](client) {
+ client.on("drain", this[kOnDrain]).on("connect", this[kOnConnect]).on("disconnect", this[kOnDisconnect]).on("connectionError", this[kOnConnectionError]);
+ this[kClients].push(client);
+ if (this[kNeedDrain]) {
+ process.nextTick(() => {
+ if (this[kNeedDrain]) {
+ this[kOnDrain](client[kUrl], [this, client]);
+ }
+ });
+ }
+ return this;
}
- find(fn2, getOptions) {
- for (const i of this.indexes()) {
- const v = this.valList[i];
- const value = this.isBackgroundFetch(v) ? v.__staleWhileFetching : v;
- if (value === void 0)
- continue;
- if (fn2(value, this.keyList[i], this)) {
- return this.get(this.keyList[i], getOptions);
+ [kRemoveClient](client) {
+ client.close(() => {
+ const idx = this[kClients].indexOf(client);
+ if (idx !== -1) {
+ this[kClients].splice(idx, 1);
}
- }
+ });
+ this[kNeedDrain] = this[kClients].some((dispatcher) => !dispatcher[kNeedDrain] && dispatcher.closed !== true && dispatcher.destroyed !== true);
}
- forEach(fn2, thisp = this) {
- for (const i of this.indexes()) {
- const v = this.valList[i];
- const value = this.isBackgroundFetch(v) ? v.__staleWhileFetching : v;
- if (value === void 0)
- continue;
- fn2.call(thisp, value, this.keyList[i], this);
+ };
+ module2.exports = {
+ PoolBase,
+ kClients,
+ kNeedDrain,
+ kAddClient,
+ kRemoveClient,
+ kGetDispatcher
+ };
+ }
+});
+
+// .yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/core/constants.js
+var require_constants2 = __commonJS({
+ ".yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/core/constants.js"(exports, module2) {
+ "use strict";
+ var headerNameLowerCasedRecord = {};
+ var wellknownHeaderNames = [
+ "Accept",
+ "Accept-Encoding",
+ "Accept-Language",
+ "Accept-Ranges",
+ "Access-Control-Allow-Credentials",
+ "Access-Control-Allow-Headers",
+ "Access-Control-Allow-Methods",
+ "Access-Control-Allow-Origin",
+ "Access-Control-Expose-Headers",
+ "Access-Control-Max-Age",
+ "Access-Control-Request-Headers",
+ "Access-Control-Request-Method",
+ "Age",
+ "Allow",
+ "Alt-Svc",
+ "Alt-Used",
+ "Authorization",
+ "Cache-Control",
+ "Clear-Site-Data",
+ "Connection",
+ "Content-Disposition",
+ "Content-Encoding",
+ "Content-Language",
+ "Content-Length",
+ "Content-Location",
+ "Content-Range",
+ "Content-Security-Policy",
+ "Content-Security-Policy-Report-Only",
+ "Content-Type",
+ "Cookie",
+ "Cross-Origin-Embedder-Policy",
+ "Cross-Origin-Opener-Policy",
+ "Cross-Origin-Resource-Policy",
+ "Date",
+ "Device-Memory",
+ "Downlink",
+ "ECT",
+ "ETag",
+ "Expect",
+ "Expect-CT",
+ "Expires",
+ "Forwarded",
+ "From",
+ "Host",
+ "If-Match",
+ "If-Modified-Since",
+ "If-None-Match",
+ "If-Range",
+ "If-Unmodified-Since",
+ "Keep-Alive",
+ "Last-Modified",
+ "Link",
+ "Location",
+ "Max-Forwards",
+ "Origin",
+ "Permissions-Policy",
+ "Pragma",
+ "Proxy-Authenticate",
+ "Proxy-Authorization",
+ "RTT",
+ "Range",
+ "Referer",
+ "Referrer-Policy",
+ "Refresh",
+ "Retry-After",
+ "Sec-WebSocket-Accept",
+ "Sec-WebSocket-Extensions",
+ "Sec-WebSocket-Key",
+ "Sec-WebSocket-Protocol",
+ "Sec-WebSocket-Version",
+ "Server",
+ "Server-Timing",
+ "Service-Worker-Allowed",
+ "Service-Worker-Navigation-Preload",
+ "Set-Cookie",
+ "SourceMap",
+ "Strict-Transport-Security",
+ "Supports-Loading-Mode",
+ "TE",
+ "Timing-Allow-Origin",
+ "Trailer",
+ "Transfer-Encoding",
+ "Upgrade",
+ "Upgrade-Insecure-Requests",
+ "User-Agent",
+ "Vary",
+ "Via",
+ "WWW-Authenticate",
+ "X-Content-Type-Options",
+ "X-DNS-Prefetch-Control",
+ "X-Frame-Options",
+ "X-Permitted-Cross-Domain-Policies",
+ "X-Powered-By",
+ "X-Requested-With",
+ "X-XSS-Protection"
+ ];
+ for (let i = 0; i < wellknownHeaderNames.length; ++i) {
+ const key = wellknownHeaderNames[i];
+ const lowerCasedKey = key.toLowerCase();
+ headerNameLowerCasedRecord[key] = headerNameLowerCasedRecord[lowerCasedKey] = lowerCasedKey;
+ }
+ Object.setPrototypeOf(headerNameLowerCasedRecord, null);
+ module2.exports = {
+ wellknownHeaderNames,
+ headerNameLowerCasedRecord
+ };
+ }
+});
+
+// .yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/core/tree.js
+var require_tree = __commonJS({
+ ".yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/core/tree.js"(exports, module2) {
+ "use strict";
+ var {
+ wellknownHeaderNames,
+ headerNameLowerCasedRecord
+ } = require_constants2();
+ var TstNode = class _TstNode {
+ /** @type {any} */
+ value = null;
+ /** @type {null | TstNode} */
+ left = null;
+ /** @type {null | TstNode} */
+ middle = null;
+ /** @type {null | TstNode} */
+ right = null;
+ /** @type {number} */
+ code;
+ /**
+ * @param {Uint8Array} key
+ * @param {any} value
+ * @param {number} index
+ */
+ constructor(key, value, index) {
+ if (index === void 0 || index >= key.length) {
+ throw new TypeError("Unreachable");
+ }
+ this.code = key[index];
+ if (key.length !== ++index) {
+ this.middle = new _TstNode(key, value, index);
+ } else {
+ this.value = value;
}
}
- rforEach(fn2, thisp = this) {
- for (const i of this.rindexes()) {
- const v = this.valList[i];
- const value = this.isBackgroundFetch(v) ? v.__staleWhileFetching : v;
- if (value === void 0)
- continue;
- fn2.call(thisp, value, this.keyList[i], this);
+ /**
+ * @param {Uint8Array} key
+ * @param {any} value
+ * @param {number} index
+ */
+ add(key, value, index) {
+ if (index === void 0 || index >= key.length) {
+ throw new TypeError("Unreachable");
}
- }
- get prune() {
- deprecatedMethod("prune", "purgeStale");
- return this.purgeStale;
- }
- purgeStale() {
- let deleted = false;
- for (const i of this.rindexes({ allowStale: true })) {
- if (this.isStale(i)) {
- this.delete(this.keyList[i]);
- deleted = true;
+ const code = key[index];
+ if (this.code === code) {
+ if (key.length === ++index) {
+ this.value = value;
+ } else if (this.middle !== null) {
+ this.middle.add(key, value, index);
+ } else {
+ this.middle = new _TstNode(key, value, index);
+ }
+ } else if (this.code < code) {
+ if (this.left !== null) {
+ this.left.add(key, value, index);
+ } else {
+ this.left = new _TstNode(key, value, index);
}
+ } else if (this.right !== null) {
+ this.right.add(key, value, index);
+ } else {
+ this.right = new _TstNode(key, value, index);
}
- return deleted;
}
- dump() {
- const arr = [];
- for (const i of this.indexes({ allowStale: true })) {
- const key = this.keyList[i];
- const v = this.valList[i];
- const value = this.isBackgroundFetch(v) ? v.__staleWhileFetching : v;
- if (value === void 0)
- continue;
- const entry = { value };
- if (this.ttls) {
- entry.ttl = this.ttls[i];
- const age = perf.now() - this.starts[i];
- entry.start = Math.floor(Date.now() - age);
+ /**
+ * @param {Uint8Array} key
+ * @return {TstNode | null}
+ */
+ search(key) {
+ const keylength = key.length;
+ let index = 0;
+ let node = this;
+ while (node !== null && index < keylength) {
+ let code = key[index];
+ if (code >= 65 && code <= 90) {
+ code |= 32;
}
- if (this.sizes) {
- entry.size = this.sizes[i];
+ while (node !== null) {
+ if (code === node.code) {
+ if (keylength === ++index) {
+ return node;
+ }
+ node = node.middle;
+ break;
+ }
+ node = node.code < code ? node.left : node.right;
}
- arr.unshift([key, entry]);
}
- return arr;
+ return null;
}
- load(arr) {
- this.clear();
- for (const [key, entry] of arr) {
- if (entry.start) {
- const age = Date.now() - entry.start;
- entry.start = perf.now() - age;
- }
- this.set(key, entry.value, entry);
+ };
+ var TernarySearchTree = class {
+ /** @type {TstNode | null} */
+ node = null;
+ /**
+ * @param {Uint8Array} key
+ * @param {any} value
+ * */
+ insert(key, value) {
+ if (this.node === null) {
+ this.node = new TstNode(key, value, 0);
+ } else {
+ this.node.add(key, value, 0);
}
}
- dispose(_v, _k, _reason) {
+ /**
+ * @param {Uint8Array} key
+ */
+ lookup(key) {
+ return this.node?.search(key)?.value ?? null;
+ }
+ };
+ var tree = new TernarySearchTree();
+ for (let i = 0; i < wellknownHeaderNames.length; ++i) {
+ const key = headerNameLowerCasedRecord[wellknownHeaderNames[i]];
+ tree.insert(Buffer.from(key), key);
+ }
+ module2.exports = {
+ TernarySearchTree,
+ tree
+ };
+ }
+});
+
+// .yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/core/util.js
+var require_util = __commonJS({
+ ".yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/core/util.js"(exports, module2) {
+ "use strict";
+ var assert3 = require("node:assert");
+ var { kDestroyed, kBodyUsed } = require_symbols();
+ var { IncomingMessage } = require("node:http");
+ var stream = require("node:stream");
+ var net = require("node:net");
+ var { InvalidArgumentError } = require_errors();
+ var { Blob: Blob2 } = require("node:buffer");
+ var nodeUtil = require("node:util");
+ var { stringify } = require("node:querystring");
+ var { headerNameLowerCasedRecord } = require_constants2();
+ var { tree } = require_tree();
+ var [nodeMajor, nodeMinor] = process.versions.node.split(".").map((v) => Number(v));
+ function nop() {
+ }
+ function isStream(obj) {
+ return obj && typeof obj === "object" && typeof obj.pipe === "function" && typeof obj.on === "function";
+ }
+ function isBlobLike(object) {
+ return Blob2 && object instanceof Blob2 || object && typeof object === "object" && (typeof object.stream === "function" || typeof object.arrayBuffer === "function") && /^(Blob|File)$/.test(object[Symbol.toStringTag]);
+ }
+ function buildURL(url, queryParams) {
+ if (url.includes("?") || url.includes("#")) {
+ throw new Error('Query params cannot be passed when url already contains "?" or "#".');
+ }
+ const stringified = stringify(queryParams);
+ if (stringified) {
+ url += "?" + stringified;
}
- set(k, v, {
- ttl = this.ttl,
- start,
- noDisposeOnSet = this.noDisposeOnSet,
- size = 0,
- sizeCalculation = this.sizeCalculation,
- noUpdateTTL = this.noUpdateTTL,
- status
- } = {}) {
- size = this.requireSize(k, v, size, sizeCalculation);
- if (this.maxEntrySize && size > this.maxEntrySize) {
- if (status) {
- status.set = "miss";
- status.maxEntrySizeExceeded = true;
- }
- this.delete(k);
- return this;
+ return url;
+ }
+ function parseURL(url) {
+ if (typeof url === "string") {
+ url = new URL(url);
+ if (!/^https?:/.test(url.origin || url.protocol)) {
+ throw new InvalidArgumentError("Invalid URL protocol: the URL must start with `http:` or `https:`.");
}
- let index = this.size === 0 ? void 0 : this.keyMap.get(k);
- if (index === void 0) {
- index = this.newIndex();
- this.keyList[index] = k;
- this.valList[index] = v;
- this.keyMap.set(k, index);
- this.next[this.tail] = index;
- this.prev[index] = this.tail;
- this.tail = index;
- this.size++;
- this.addItemSize(index, size, status);
- if (status) {
- status.set = "add";
- }
- noUpdateTTL = false;
- } else {
- this.moveToTail(index);
- const oldVal = this.valList[index];
- if (v !== oldVal) {
- if (this.isBackgroundFetch(oldVal)) {
- oldVal.__abortController.abort(new Error("replaced"));
- } else {
- if (!noDisposeOnSet) {
- this.dispose(oldVal, k, "set");
- if (this.disposeAfter) {
- this.disposed.push([oldVal, k, "set"]);
- }
- }
- }
- this.removeItemSize(index);
- this.valList[index] = v;
- this.addItemSize(index, size, status);
- if (status) {
- status.set = "replace";
- const oldValue = oldVal && this.isBackgroundFetch(oldVal) ? oldVal.__staleWhileFetching : oldVal;
- if (oldValue !== void 0)
- status.oldValue = oldValue;
- }
- } else if (status) {
- status.set = "update";
- }
+ return url;
+ }
+ if (!url || typeof url !== "object") {
+ throw new InvalidArgumentError("Invalid URL: The URL argument must be a non-null object.");
+ }
+ if (!/^https?:/.test(url.origin || url.protocol)) {
+ throw new InvalidArgumentError("Invalid URL protocol: the URL must start with `http:` or `https:`.");
+ }
+ if (!(url instanceof URL)) {
+ if (url.port != null && url.port !== "" && !Number.isFinite(parseInt(url.port))) {
+ throw new InvalidArgumentError("Invalid URL: port must be a valid integer or a string representation of an integer.");
}
- if (ttl !== 0 && this.ttl === 0 && !this.ttls) {
- this.initializeTTLTracking();
+ if (url.path != null && typeof url.path !== "string") {
+ throw new InvalidArgumentError("Invalid URL path: the path must be a string or null/undefined.");
}
- if (!noUpdateTTL) {
- this.setItemTTL(index, ttl, start);
+ if (url.pathname != null && typeof url.pathname !== "string") {
+ throw new InvalidArgumentError("Invalid URL pathname: the pathname must be a string or null/undefined.");
}
- this.statusTTL(status, index);
- if (this.disposeAfter) {
- while (this.disposed.length) {
- this.disposeAfter(...this.disposed.shift());
- }
+ if (url.hostname != null && typeof url.hostname !== "string") {
+ throw new InvalidArgumentError("Invalid URL hostname: the hostname must be a string or null/undefined.");
}
- return this;
- }
- newIndex() {
- if (this.size === 0) {
- return this.tail;
+ if (url.origin != null && typeof url.origin !== "string") {
+ throw new InvalidArgumentError("Invalid URL origin: the origin must be a string or null/undefined.");
}
- if (this.size === this.max && this.max !== 0) {
- return this.evict(false);
+ const port = url.port != null ? url.port : url.protocol === "https:" ? 443 : 80;
+ let origin = url.origin != null ? url.origin : `${url.protocol}//${url.hostname}:${port}`;
+ let path10 = url.path != null ? url.path : `${url.pathname || ""}${url.search || ""}`;
+ if (origin.endsWith("/")) {
+ origin = origin.substring(0, origin.length - 1);
}
- if (this.free.length !== 0) {
- return this.free.pop();
+ if (path10 && !path10.startsWith("/")) {
+ path10 = `/${path10}`;
}
- return this.initialFill++;
+ url = new URL(origin + path10);
}
- pop() {
- if (this.size) {
- const val = this.valList[this.head];
- this.evict(true);
- return val;
- }
- }
- evict(free) {
- const head = this.head;
- const k = this.keyList[head];
- const v = this.valList[head];
- if (this.isBackgroundFetch(v)) {
- v.__abortController.abort(new Error("evicted"));
+ return url;
+ }
+ function parseOrigin(url) {
+ url = parseURL(url);
+ if (url.pathname !== "/" || url.search || url.hash) {
+ throw new InvalidArgumentError("invalid url");
+ }
+ return url;
+ }
+ function getHostname(host) {
+ if (host[0] === "[") {
+ const idx2 = host.indexOf("]");
+ assert3(idx2 !== -1);
+ return host.substring(1, idx2);
+ }
+ const idx = host.indexOf(":");
+ if (idx === -1)
+ return host;
+ return host.substring(0, idx);
+ }
+ function getServerName(host) {
+ if (!host) {
+ return null;
+ }
+ assert3.strictEqual(typeof host, "string");
+ const servername = getHostname(host);
+ if (net.isIP(servername)) {
+ return "";
+ }
+ return servername;
+ }
+ function deepClone(obj) {
+ return JSON.parse(JSON.stringify(obj));
+ }
+ function isAsyncIterable(obj) {
+ return !!(obj != null && typeof obj[Symbol.asyncIterator] === "function");
+ }
+ function isIterable(obj) {
+ return !!(obj != null && (typeof obj[Symbol.iterator] === "function" || typeof obj[Symbol.asyncIterator] === "function"));
+ }
+ function bodyLength(body) {
+ if (body == null) {
+ return 0;
+ } else if (isStream(body)) {
+ const state = body._readableState;
+ return state && state.objectMode === false && state.ended === true && Number.isFinite(state.length) ? state.length : null;
+ } else if (isBlobLike(body)) {
+ return body.size != null ? body.size : null;
+ } else if (isBuffer(body)) {
+ return body.byteLength;
+ }
+ return null;
+ }
+ function isDestroyed(stream2) {
+ return !stream2 || !!(stream2.destroyed || stream2[kDestroyed]);
+ }
+ function isReadableAborted(stream2) {
+ const state = stream2?._readableState;
+ return isDestroyed(stream2) && state && !state.endEmitted;
+ }
+ function destroy(stream2, err) {
+ if (stream2 == null || !isStream(stream2) || isDestroyed(stream2)) {
+ return;
+ }
+ if (typeof stream2.destroy === "function") {
+ if (Object.getPrototypeOf(stream2).constructor === IncomingMessage) {
+ stream2.socket = null;
+ }
+ stream2.destroy(err);
+ } else if (err) {
+ process.nextTick((stream3, err2) => {
+ stream3.emit("error", err2);
+ }, stream2, err);
+ }
+ if (stream2.destroyed !== true) {
+ stream2[kDestroyed] = true;
+ }
+ }
+ var KEEPALIVE_TIMEOUT_EXPR = /timeout=(\d+)/;
+ function parseKeepAliveTimeout(val) {
+ const m = val.toString().match(KEEPALIVE_TIMEOUT_EXPR);
+ return m ? parseInt(m[1], 10) * 1e3 : null;
+ }
+ function headerNameToString(value) {
+ return typeof value === "string" ? headerNameLowerCasedRecord[value] ?? value.toLowerCase() : tree.lookup(value) ?? value.toString("latin1").toLowerCase();
+ }
+ function bufferToLowerCasedHeaderName(value) {
+ return tree.lookup(value) ?? value.toString("latin1").toLowerCase();
+ }
+ function parseHeaders(headers, obj) {
+ if (!Array.isArray(headers))
+ return headers;
+ if (obj === void 0)
+ obj = {};
+ for (let i = 0; i < headers.length; i += 2) {
+ const key = headerNameToString(headers[i]);
+ let val = obj[key];
+ if (val) {
+ if (typeof val === "string") {
+ val = [val];
+ obj[key] = val;
+ }
+ val.push(headers[i + 1].toString("utf8"));
} else {
- this.dispose(v, k, "evict");
- if (this.disposeAfter) {
- this.disposed.push([v, k, "evict"]);
- }
- }
- this.removeItemSize(head);
- if (free) {
- this.keyList[head] = null;
- this.valList[head] = null;
- this.free.push(head);
- }
- this.head = this.next[head];
- this.keyMap.delete(k);
- this.size--;
- return head;
- }
- has(k, { updateAgeOnHas = this.updateAgeOnHas, status } = {}) {
- const index = this.keyMap.get(k);
- if (index !== void 0) {
- if (!this.isStale(index)) {
- if (updateAgeOnHas) {
- this.updateItemAge(index);
- }
- if (status)
- status.has = "hit";
- this.statusTTL(status, index);
- return true;
- } else if (status) {
- status.has = "stale";
- this.statusTTL(status, index);
+ const headersValue = headers[i + 1];
+ if (typeof headersValue === "string") {
+ obj[key] = headersValue;
+ } else {
+ obj[key] = Array.isArray(headersValue) ? headersValue.map((x) => x.toString("utf8")) : headersValue.toString("utf8");
}
- } else if (status) {
- status.has = "miss";
}
- return false;
}
- // like get(), but without any LRU updating or TTL expiration
- peek(k, { allowStale = this.allowStale } = {}) {
- const index = this.keyMap.get(k);
- if (index !== void 0 && (allowStale || !this.isStale(index))) {
- const v = this.valList[index];
- return this.isBackgroundFetch(v) ? v.__staleWhileFetching : v;
- }
+ if ("content-length" in obj && "content-disposition" in obj) {
+ obj["content-disposition"] = Buffer.from(obj["content-disposition"]).toString("latin1");
}
- backgroundFetch(k, index, options, context) {
- const v = index === void 0 ? void 0 : this.valList[index];
- if (this.isBackgroundFetch(v)) {
- return v;
- }
- const ac = new AC();
- if (options.signal) {
- options.signal.addEventListener(
- "abort",
- () => ac.abort(options.signal.reason)
- );
- }
- const fetchOpts = {
- signal: ac.signal,
- options,
- context
- };
- const cb = (v2, updateCache = false) => {
- const { aborted } = ac.signal;
- const ignoreAbort = options.ignoreFetchAbort && v2 !== void 0;
- if (options.status) {
- if (aborted && !updateCache) {
- options.status.fetchAborted = true;
- options.status.fetchError = ac.signal.reason;
- if (ignoreAbort)
- options.status.fetchAbortIgnored = true;
- } else {
- options.status.fetchResolved = true;
- }
- }
- if (aborted && !ignoreAbort && !updateCache) {
- return fetchFail(ac.signal.reason);
- }
- if (this.valList[index] === p) {
- if (v2 === void 0) {
- if (p.__staleWhileFetching) {
- this.valList[index] = p.__staleWhileFetching;
- } else {
- this.delete(k);
- }
- } else {
- if (options.status)
- options.status.fetchUpdated = true;
- this.set(k, v2, fetchOpts.options);
- }
- }
- return v2;
- };
- const eb = (er) => {
- if (options.status) {
- options.status.fetchRejected = true;
- options.status.fetchError = er;
- }
- return fetchFail(er);
- };
- const fetchFail = (er) => {
- const { aborted } = ac.signal;
- const allowStaleAborted = aborted && options.allowStaleOnFetchAbort;
- const allowStale = allowStaleAborted || options.allowStaleOnFetchRejection;
- const noDelete = allowStale || options.noDeleteOnFetchRejection;
- if (this.valList[index] === p) {
- const del = !noDelete || p.__staleWhileFetching === void 0;
- if (del) {
- this.delete(k);
- } else if (!allowStaleAborted) {
- this.valList[index] = p.__staleWhileFetching;
- }
- }
- if (allowStale) {
- if (options.status && p.__staleWhileFetching !== void 0) {
- options.status.returnedStale = true;
- }
- return p.__staleWhileFetching;
- } else if (p.__returned === p) {
- throw er;
- }
- };
- const pcall = (res, rej) => {
- this.fetchMethod(k, v, fetchOpts).then((v2) => res(v2), rej);
- ac.signal.addEventListener("abort", () => {
- if (!options.ignoreFetchAbort || options.allowStaleOnFetchAbort) {
- res();
- if (options.allowStaleOnFetchAbort) {
- res = (v2) => cb(v2, true);
- }
- }
- });
- };
- if (options.status)
- options.status.fetchDispatched = true;
- const p = new Promise(pcall).then(cb, eb);
- p.__abortController = ac;
- p.__staleWhileFetching = v;
- p.__returned = null;
- if (index === void 0) {
- this.set(k, p, { ...fetchOpts.options, status: void 0 });
- index = this.keyMap.get(k);
- } else {
- this.valList[index] = p;
- }
- return p;
- }
- isBackgroundFetch(p) {
- return p && typeof p === "object" && typeof p.then === "function" && Object.prototype.hasOwnProperty.call(
- p,
- "__staleWhileFetching"
- ) && Object.prototype.hasOwnProperty.call(p, "__returned") && (p.__returned === p || p.__returned === null);
- }
- // this takes the union of get() and set() opts, because it does both
- async fetch(k, {
- // get options
- allowStale = this.allowStale,
- updateAgeOnGet = this.updateAgeOnGet,
- noDeleteOnStaleGet = this.noDeleteOnStaleGet,
- // set options
- ttl = this.ttl,
- noDisposeOnSet = this.noDisposeOnSet,
- size = 0,
- sizeCalculation = this.sizeCalculation,
- noUpdateTTL = this.noUpdateTTL,
- // fetch exclusive options
- noDeleteOnFetchRejection = this.noDeleteOnFetchRejection,
- allowStaleOnFetchRejection = this.allowStaleOnFetchRejection,
- ignoreFetchAbort = this.ignoreFetchAbort,
- allowStaleOnFetchAbort = this.allowStaleOnFetchAbort,
- fetchContext = this.fetchContext,
- forceRefresh = false,
- status,
- signal
- } = {}) {
- if (!this.fetchMethod) {
- if (status)
- status.fetch = "get";
- return this.get(k, {
- allowStale,
- updateAgeOnGet,
- noDeleteOnStaleGet,
- status
- });
- }
- const options = {
- allowStale,
- updateAgeOnGet,
- noDeleteOnStaleGet,
- ttl,
- noDisposeOnSet,
- size,
- sizeCalculation,
- noUpdateTTL,
- noDeleteOnFetchRejection,
- allowStaleOnFetchRejection,
- allowStaleOnFetchAbort,
- ignoreFetchAbort,
- status,
- signal
- };
- let index = this.keyMap.get(k);
- if (index === void 0) {
- if (status)
- status.fetch = "miss";
- const p = this.backgroundFetch(k, index, options, fetchContext);
- return p.__returned = p;
+ return obj;
+ }
+ function parseRawHeaders(headers) {
+ const ret = [];
+ let hasContentLength = false;
+ let contentDispositionIdx = -1;
+ for (let n = 0; n < headers.length; n += 2) {
+ const key = headers[n + 0].toString();
+ const val = headers[n + 1].toString("utf8");
+ if (key.length === 14 && (key === "content-length" || key.toLowerCase() === "content-length")) {
+ ret.push(key, val);
+ hasContentLength = true;
+ } else if (key.length === 19 && (key === "content-disposition" || key.toLowerCase() === "content-disposition")) {
+ contentDispositionIdx = ret.push(key, val) - 1;
} else {
- const v = this.valList[index];
- if (this.isBackgroundFetch(v)) {
- const stale = allowStale && v.__staleWhileFetching !== void 0;
- if (status) {
- status.fetch = "inflight";
- if (stale)
- status.returnedStale = true;
- }
- return stale ? v.__staleWhileFetching : v.__returned = v;
- }
- const isStale = this.isStale(index);
- if (!forceRefresh && !isStale) {
- if (status)
- status.fetch = "hit";
- this.moveToTail(index);
- if (updateAgeOnGet) {
- this.updateItemAge(index);
- }
- this.statusTTL(status, index);
- return v;
- }
- const p = this.backgroundFetch(k, index, options, fetchContext);
- const hasStale = p.__staleWhileFetching !== void 0;
- const staleVal = hasStale && allowStale;
- if (status) {
- status.fetch = hasStale && isStale ? "stale" : "refresh";
- if (staleVal && isStale)
- status.returnedStale = true;
- }
- return staleVal ? p.__staleWhileFetching : p.__returned = p;
+ ret.push(key, val);
}
}
- get(k, {
- allowStale = this.allowStale,
- updateAgeOnGet = this.updateAgeOnGet,
- noDeleteOnStaleGet = this.noDeleteOnStaleGet,
- status
- } = {}) {
- const index = this.keyMap.get(k);
- if (index !== void 0) {
- const value = this.valList[index];
- const fetching = this.isBackgroundFetch(value);
- this.statusTTL(status, index);
- if (this.isStale(index)) {
- if (status)
- status.get = "stale";
- if (!fetching) {
- if (!noDeleteOnStaleGet) {
- this.delete(k);
- }
- if (status)
- status.returnedStale = allowStale;
- return allowStale ? value : void 0;
- } else {
- if (status) {
- status.returnedStale = allowStale && value.__staleWhileFetching !== void 0;
- }
- return allowStale ? value.__staleWhileFetching : void 0;
- }
- } else {
- if (status)
- status.get = "hit";
- if (fetching) {
- return value.__staleWhileFetching;
- }
- this.moveToTail(index);
- if (updateAgeOnGet) {
- this.updateItemAge(index);
- }
- return value;
- }
- } else if (status) {
- status.get = "miss";
- }
+ if (hasContentLength && contentDispositionIdx !== -1) {
+ ret[contentDispositionIdx] = Buffer.from(ret[contentDispositionIdx]).toString("latin1");
}
- connect(p, n) {
- this.prev[n] = p;
- this.next[p] = n;
+ return ret;
+ }
+ function isBuffer(buffer) {
+ return buffer instanceof Uint8Array || Buffer.isBuffer(buffer);
+ }
+ function validateHandler(handler, method, upgrade) {
+ if (!handler || typeof handler !== "object") {
+ throw new InvalidArgumentError("handler must be an object");
}
- moveToTail(index) {
- if (index !== this.tail) {
- if (index === this.head) {
- this.head = this.next[index];
- } else {
- this.connect(this.prev[index], this.next[index]);
- }
- this.connect(this.tail, index);
- this.tail = index;
- }
+ if (typeof handler.onConnect !== "function") {
+ throw new InvalidArgumentError("invalid onConnect method");
}
- get del() {
- deprecatedMethod("del", "delete");
- return this.delete;
+ if (typeof handler.onError !== "function") {
+ throw new InvalidArgumentError("invalid onError method");
}
- delete(k) {
- let deleted = false;
- if (this.size !== 0) {
- const index = this.keyMap.get(k);
- if (index !== void 0) {
- deleted = true;
- if (this.size === 1) {
- this.clear();
- } else {
- this.removeItemSize(index);
- const v = this.valList[index];
- if (this.isBackgroundFetch(v)) {
- v.__abortController.abort(new Error("deleted"));
- } else {
- this.dispose(v, k, "delete");
- if (this.disposeAfter) {
- this.disposed.push([v, k, "delete"]);
- }
- }
- this.keyMap.delete(k);
- this.keyList[index] = null;
- this.valList[index] = null;
- if (index === this.tail) {
- this.tail = this.prev[index];
- } else if (index === this.head) {
- this.head = this.next[index];
- } else {
- this.next[this.prev[index]] = this.next[index];
- this.prev[this.next[index]] = this.prev[index];
- }
- this.size--;
- this.free.push(index);
- }
- }
- }
- if (this.disposed) {
- while (this.disposed.length) {
- this.disposeAfter(...this.disposed.shift());
- }
- }
- return deleted;
+ if (typeof handler.onBodySent !== "function" && handler.onBodySent !== void 0) {
+ throw new InvalidArgumentError("invalid onBodySent method");
}
- clear() {
- for (const index of this.rindexes({ allowStale: true })) {
- const v = this.valList[index];
- if (this.isBackgroundFetch(v)) {
- v.__abortController.abort(new Error("deleted"));
- } else {
- const k = this.keyList[index];
- this.dispose(v, k, "delete");
- if (this.disposeAfter) {
- this.disposed.push([v, k, "delete"]);
- }
- }
+ if (upgrade || method === "CONNECT") {
+ if (typeof handler.onUpgrade !== "function") {
+ throw new InvalidArgumentError("invalid onUpgrade method");
}
- this.keyMap.clear();
- this.valList.fill(null);
- this.keyList.fill(null);
- if (this.ttls) {
- this.ttls.fill(0);
- this.starts.fill(0);
+ } else {
+ if (typeof handler.onHeaders !== "function") {
+ throw new InvalidArgumentError("invalid onHeaders method");
}
- if (this.sizes) {
- this.sizes.fill(0);
+ if (typeof handler.onData !== "function") {
+ throw new InvalidArgumentError("invalid onData method");
}
- this.head = 0;
- this.tail = 0;
- this.initialFill = 1;
- this.free.length = 0;
- this.calculatedSize = 0;
- this.size = 0;
- if (this.disposed) {
- while (this.disposed.length) {
- this.disposeAfter(...this.disposed.shift());
- }
+ if (typeof handler.onComplete !== "function") {
+ throw new InvalidArgumentError("invalid onComplete method");
}
}
- get reset() {
- deprecatedMethod("reset", "clear");
- return this.clear;
- }
- get length() {
- deprecatedProperty("length", "size");
- return this.size;
+ }
+ function isDisturbed(body) {
+ return !!(body && (stream.isDisturbed(body) || body[kBodyUsed]));
+ }
+ function isErrored(body) {
+ return !!(body && stream.isErrored(body));
+ }
+ function isReadable(body) {
+ return !!(body && stream.isReadable(body));
+ }
+ function getSocketInfo(socket) {
+ return {
+ localAddress: socket.localAddress,
+ localPort: socket.localPort,
+ remoteAddress: socket.remoteAddress,
+ remotePort: socket.remotePort,
+ remoteFamily: socket.remoteFamily,
+ timeout: socket.timeout,
+ bytesWritten: socket.bytesWritten,
+ bytesRead: socket.bytesRead
+ };
+ }
+ function ReadableStreamFrom(iterable) {
+ let iterator;
+ return new ReadableStream(
+ {
+ async start() {
+ iterator = iterable[Symbol.asyncIterator]();
+ },
+ async pull(controller) {
+ const { done, value } = await iterator.next();
+ if (done) {
+ queueMicrotask(() => {
+ controller.close();
+ controller.byobRequest?.respond(0);
+ });
+ } else {
+ const buf = Buffer.isBuffer(value) ? value : Buffer.from(value);
+ if (buf.byteLength) {
+ controller.enqueue(new Uint8Array(buf));
+ }
+ }
+ return controller.desiredSize > 0;
+ },
+ async cancel(reason) {
+ await iterator.return();
+ },
+ type: "bytes"
+ }
+ );
+ }
+ function isFormDataLike(object) {
+ return object && typeof object === "object" && typeof object.append === "function" && typeof object.delete === "function" && typeof object.get === "function" && typeof object.getAll === "function" && typeof object.has === "function" && typeof object.set === "function" && object[Symbol.toStringTag] === "FormData";
+ }
+ function addAbortListener(signal, listener) {
+ if ("addEventListener" in signal) {
+ signal.addEventListener("abort", listener, { once: true });
+ return () => signal.removeEventListener("abort", listener);
+ }
+ signal.addListener("abort", listener);
+ return () => signal.removeListener("abort", listener);
+ }
+ var hasToWellFormed = !!String.prototype.toWellFormed;
+ function toUSVString(val) {
+ if (hasToWellFormed) {
+ return `${val}`.toWellFormed();
+ } else if (nodeUtil.toUSVString) {
+ return nodeUtil.toUSVString(val);
+ }
+ return `${val}`;
+ }
+ function isTokenCharCode(c) {
+ switch (c) {
+ case 34:
+ case 40:
+ case 41:
+ case 44:
+ case 47:
+ case 58:
+ case 59:
+ case 60:
+ case 61:
+ case 62:
+ case 63:
+ case 64:
+ case 91:
+ case 92:
+ case 93:
+ case 123:
+ case 125:
+ return false;
+ default:
+ return c >= 33 && c <= 126;
}
- static get AbortController() {
- return AC;
+ }
+ function isValidHTTPToken(characters) {
+ if (characters.length === 0) {
+ return false;
}
- static get AbortSignal() {
- return AS;
+ for (let i = 0; i < characters.length; ++i) {
+ if (!isTokenCharCode(characters.charCodeAt(i))) {
+ return false;
+ }
}
- };
- module2.exports = LRUCache;
- }
-});
-
-// .yarn/cache/agent-base-npm-7.1.0-4b12ba5111-fc974ab57f.zip/node_modules/agent-base/dist/helpers.js
-var require_helpers = __commonJS({
- ".yarn/cache/agent-base-npm-7.1.0-4b12ba5111-fc974ab57f.zip/node_modules/agent-base/dist/helpers.js"(exports) {
+ return true;
+ }
+ function parseRangeHeader(range) {
+ if (range == null || range === "")
+ return { start: 0, end: null, size: null };
+ const m = range ? range.match(/^bytes (\d+)-(\d+)\/(\d+)?$/) : null;
+ return m ? {
+ start: parseInt(m[1]),
+ end: m[2] ? parseInt(m[2]) : null,
+ size: m[3] ? parseInt(m[3]) : null
+ } : null;
+ }
+ var kEnumerableProperty = /* @__PURE__ */ Object.create(null);
+ kEnumerableProperty.enumerable = true;
+ module2.exports = {
+ kEnumerableProperty,
+ nop,
+ isDisturbed,
+ isErrored,
+ isReadable,
+ toUSVString,
+ isReadableAborted,
+ isBlobLike,
+ parseOrigin,
+ parseURL,
+ getServerName,
+ isStream,
+ isIterable,
+ isAsyncIterable,
+ isDestroyed,
+ headerNameToString,
+ bufferToLowerCasedHeaderName,
+ parseRawHeaders,
+ parseHeaders,
+ parseKeepAliveTimeout,
+ destroy,
+ bodyLength,
+ deepClone,
+ ReadableStreamFrom,
+ isBuffer,
+ validateHandler,
+ getSocketInfo,
+ isFormDataLike,
+ buildURL,
+ addAbortListener,
+ isValidHTTPToken,
+ isTokenCharCode,
+ parseRangeHeader,
+ nodeMajor,
+ nodeMinor,
+ nodeHasAutoSelectFamily: nodeMajor > 18 || nodeMajor === 18 && nodeMinor >= 13,
+ safeHTTPMethods: ["GET", "HEAD", "OPTIONS", "TRACE"]
+ };
+ }
+});
+
+// .yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/core/diagnostics.js
+var require_diagnostics = __commonJS({
+ ".yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/core/diagnostics.js"(exports, module2) {
"use strict";
- var __createBinding2 = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) {
- if (k2 === void 0)
- k2 = k;
- var desc = Object.getOwnPropertyDescriptor(m, k);
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
- desc = { enumerable: true, get: function() {
- return m[k];
- } };
- }
- Object.defineProperty(o, k2, desc);
- } : function(o, m, k, k2) {
- if (k2 === void 0)
- k2 = k;
- o[k2] = m[k];
- });
- var __setModuleDefault2 = exports && exports.__setModuleDefault || (Object.create ? function(o, v) {
- Object.defineProperty(o, "default", { enumerable: true, value: v });
- } : function(o, v) {
- o["default"] = v;
- });
- var __importStar2 = exports && exports.__importStar || function(mod) {
- if (mod && mod.__esModule)
- return mod;
- var result = {};
- if (mod != null) {
- for (var k in mod)
- if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k))
- __createBinding2(result, mod, k);
- }
- __setModuleDefault2(result, mod);
- return result;
- };
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.req = exports.json = exports.toBuffer = void 0;
- var http = __importStar2(require("http"));
- var https = __importStar2(require("https"));
- async function toBuffer(stream) {
- let length = 0;
- const chunks = [];
- for await (const chunk of stream) {
- length += chunk.length;
- chunks.push(chunk);
- }
- return Buffer.concat(chunks, length);
- }
- exports.toBuffer = toBuffer;
- async function json(stream) {
- const buf = await toBuffer(stream);
- const str = buf.toString("utf8");
- try {
- return JSON.parse(str);
- } catch (_err) {
- const err = _err;
- err.message += ` (input: ${str})`;
- throw err;
+ var diagnosticsChannel = require("node:diagnostics_channel");
+ var util = require("node:util");
+ var undiciDebugLog = util.debuglog("undici");
+ var fetchDebuglog = util.debuglog("fetch");
+ var websocketDebuglog = util.debuglog("websocket");
+ var isClientSet = false;
+ var channels = {
+ // Client
+ beforeConnect: diagnosticsChannel.channel("undici:client:beforeConnect"),
+ connected: diagnosticsChannel.channel("undici:client:connected"),
+ connectError: diagnosticsChannel.channel("undici:client:connectError"),
+ sendHeaders: diagnosticsChannel.channel("undici:client:sendHeaders"),
+ // Request
+ create: diagnosticsChannel.channel("undici:request:create"),
+ bodySent: diagnosticsChannel.channel("undici:request:bodySent"),
+ headers: diagnosticsChannel.channel("undici:request:headers"),
+ trailers: diagnosticsChannel.channel("undici:request:trailers"),
+ error: diagnosticsChannel.channel("undici:request:error"),
+ // WebSocket
+ open: diagnosticsChannel.channel("undici:websocket:open"),
+ close: diagnosticsChannel.channel("undici:websocket:close"),
+ socketError: diagnosticsChannel.channel("undici:websocket:socket_error"),
+ ping: diagnosticsChannel.channel("undici:websocket:ping"),
+ pong: diagnosticsChannel.channel("undici:websocket:pong")
+ };
+ if (undiciDebugLog.enabled || fetchDebuglog.enabled) {
+ const debuglog = fetchDebuglog.enabled ? fetchDebuglog : undiciDebugLog;
+ diagnosticsChannel.channel("undici:client:beforeConnect").subscribe((evt) => {
+ const {
+ connectParams: { version: version2, protocol, port, host }
+ } = evt;
+ debuglog(
+ "connecting to %s using %s%s",
+ `${host}${port ? `:${port}` : ""}`,
+ protocol,
+ version2
+ );
+ });
+ diagnosticsChannel.channel("undici:client:connected").subscribe((evt) => {
+ const {
+ connectParams: { version: version2, protocol, port, host }
+ } = evt;
+ debuglog(
+ "connected to %s using %s%s",
+ `${host}${port ? `:${port}` : ""}`,
+ protocol,
+ version2
+ );
+ });
+ diagnosticsChannel.channel("undici:client:connectError").subscribe((evt) => {
+ const {
+ connectParams: { version: version2, protocol, port, host },
+ error
+ } = evt;
+ debuglog(
+ "connection to %s using %s%s errored - %s",
+ `${host}${port ? `:${port}` : ""}`,
+ protocol,
+ version2,
+ error.message
+ );
+ });
+ diagnosticsChannel.channel("undici:client:sendHeaders").subscribe((evt) => {
+ const {
+ request: { method, path: path10, origin }
+ } = evt;
+ debuglog("sending request to %s %s/%s", method, origin, path10);
+ });
+ diagnosticsChannel.channel("undici:request:headers").subscribe((evt) => {
+ const {
+ request: { method, path: path10, origin },
+ response: { statusCode }
+ } = evt;
+ debuglog(
+ "received response to %s %s/%s - HTTP %d",
+ method,
+ origin,
+ path10,
+ statusCode
+ );
+ });
+ diagnosticsChannel.channel("undici:request:trailers").subscribe((evt) => {
+ const {
+ request: { method, path: path10, origin }
+ } = evt;
+ debuglog("trailers received from %s %s/%s", method, origin, path10);
+ });
+ diagnosticsChannel.channel("undici:request:error").subscribe((evt) => {
+ const {
+ request: { method, path: path10, origin },
+ error
+ } = evt;
+ debuglog(
+ "request to %s %s/%s errored - %s",
+ method,
+ origin,
+ path10,
+ error.message
+ );
+ });
+ isClientSet = true;
+ }
+ if (websocketDebuglog.enabled) {
+ if (!isClientSet) {
+ const debuglog = undiciDebugLog.enabled ? undiciDebugLog : websocketDebuglog;
+ diagnosticsChannel.channel("undici:client:beforeConnect").subscribe((evt) => {
+ const {
+ connectParams: { version: version2, protocol, port, host }
+ } = evt;
+ debuglog(
+ "connecting to %s%s using %s%s",
+ host,
+ port ? `:${port}` : "",
+ protocol,
+ version2
+ );
+ });
+ diagnosticsChannel.channel("undici:client:connected").subscribe((evt) => {
+ const {
+ connectParams: { version: version2, protocol, port, host }
+ } = evt;
+ debuglog(
+ "connected to %s%s using %s%s",
+ host,
+ port ? `:${port}` : "",
+ protocol,
+ version2
+ );
+ });
+ diagnosticsChannel.channel("undici:client:connectError").subscribe((evt) => {
+ const {
+ connectParams: { version: version2, protocol, port, host },
+ error
+ } = evt;
+ debuglog(
+ "connection to %s%s using %s%s errored - %s",
+ host,
+ port ? `:${port}` : "",
+ protocol,
+ version2,
+ error.message
+ );
+ });
+ diagnosticsChannel.channel("undici:client:sendHeaders").subscribe((evt) => {
+ const {
+ request: { method, path: path10, origin }
+ } = evt;
+ debuglog("sending request to %s %s/%s", method, origin, path10);
+ });
}
- }
- exports.json = json;
- function req(url, opts = {}) {
- const href = typeof url === "string" ? url : url.href;
- const req2 = (href.startsWith("https:") ? https : http).request(url, opts);
- const promise = new Promise((resolve, reject) => {
- req2.once("response", resolve).once("error", reject).end();
+ diagnosticsChannel.channel("undici:websocket:open").subscribe((evt) => {
+ const {
+ address: { address, port }
+ } = evt;
+ websocketDebuglog("connection opened %s%s", address, port ? `:${port}` : "");
+ });
+ diagnosticsChannel.channel("undici:websocket:close").subscribe((evt) => {
+ const { websocket, code, reason } = evt;
+ websocketDebuglog(
+ "closed connection to %s - %s %s",
+ websocket.url,
+ code,
+ reason
+ );
+ });
+ diagnosticsChannel.channel("undici:websocket:socket_error").subscribe((err) => {
+ websocketDebuglog("connection errored - %s", err.message);
+ });
+ diagnosticsChannel.channel("undici:websocket:ping").subscribe((evt) => {
+ websocketDebuglog("ping received");
+ });
+ diagnosticsChannel.channel("undici:websocket:pong").subscribe((evt) => {
+ websocketDebuglog("pong received");
});
- req2.then = promise.then.bind(promise);
- return req2;
}
- exports.req = req;
+ module2.exports = {
+ channels
+ };
}
});
-// .yarn/cache/agent-base-npm-7.1.0-4b12ba5111-fc974ab57f.zip/node_modules/agent-base/dist/index.js
-var require_dist = __commonJS({
- ".yarn/cache/agent-base-npm-7.1.0-4b12ba5111-fc974ab57f.zip/node_modules/agent-base/dist/index.js"(exports) {
+// .yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/timers.js
+var require_timers = __commonJS({
+ ".yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/timers.js"(exports, module2) {
"use strict";
- var __createBinding2 = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) {
- if (k2 === void 0)
- k2 = k;
- var desc = Object.getOwnPropertyDescriptor(m, k);
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
- desc = { enumerable: true, get: function() {
- return m[k];
- } };
+ var fastNow = Date.now();
+ var fastNowTimeout;
+ var fastTimers = [];
+ function onTimeout() {
+ fastNow = Date.now();
+ let len = fastTimers.length;
+ let idx = 0;
+ while (idx < len) {
+ const timer = fastTimers[idx];
+ if (timer.state === 0) {
+ timer.state = fastNow + timer.delay;
+ } else if (timer.state > 0 && fastNow >= timer.state) {
+ timer.state = -1;
+ timer.callback(timer.opaque);
+ }
+ if (timer.state === -1) {
+ timer.state = -2;
+ if (idx !== len - 1) {
+ fastTimers[idx] = fastTimers.pop();
+ } else {
+ fastTimers.pop();
+ }
+ len -= 1;
+ } else {
+ idx += 1;
+ }
}
- Object.defineProperty(o, k2, desc);
- } : function(o, m, k, k2) {
- if (k2 === void 0)
- k2 = k;
- o[k2] = m[k];
- });
- var __setModuleDefault2 = exports && exports.__setModuleDefault || (Object.create ? function(o, v) {
- Object.defineProperty(o, "default", { enumerable: true, value: v });
- } : function(o, v) {
- o["default"] = v;
- });
- var __importStar2 = exports && exports.__importStar || function(mod) {
- if (mod && mod.__esModule)
- return mod;
- var result = {};
- if (mod != null) {
- for (var k in mod)
- if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k))
- __createBinding2(result, mod, k);
+ if (fastTimers.length > 0) {
+ refreshTimeout();
}
- __setModuleDefault2(result, mod);
- return result;
- };
- var __exportStar2 = exports && exports.__exportStar || function(m, exports2) {
- for (var p in m)
- if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports2, p))
- __createBinding2(exports2, m, p);
- };
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.Agent = void 0;
- var http = __importStar2(require("http"));
- __exportStar2(require_helpers(), exports);
- var INTERNAL = Symbol("AgentBaseInternalState");
- var Agent = class extends http.Agent {
- constructor(opts) {
- super(opts);
- this[INTERNAL] = {};
+ }
+ function refreshTimeout() {
+ if (fastNowTimeout?.refresh) {
+ fastNowTimeout.refresh();
+ } else {
+ clearTimeout(fastNowTimeout);
+ fastNowTimeout = setTimeout(onTimeout, 1e3);
+ if (fastNowTimeout.unref) {
+ fastNowTimeout.unref();
+ }
}
- /**
- * Determine whether this is an `http` or `https` request.
- */
- isSecureEndpoint(options) {
- if (options) {
- if (typeof options.secureEndpoint === "boolean") {
- return options.secureEndpoint;
- }
- if (typeof options.protocol === "string") {
- return options.protocol === "https:";
+ }
+ var Timeout = class {
+ constructor(callback, delay, opaque) {
+ this.callback = callback;
+ this.delay = delay;
+ this.opaque = opaque;
+ this.state = -2;
+ this.refresh();
+ }
+ refresh() {
+ if (this.state === -2) {
+ fastTimers.push(this);
+ if (!fastNowTimeout || fastTimers.length === 1) {
+ refreshTimeout();
}
}
- const { stack } = new Error();
- if (typeof stack !== "string")
- return false;
- return stack.split("\n").some((l) => l.indexOf("(https.js:") !== -1 || l.indexOf("node:https:") !== -1);
+ this.state = 0;
}
- createSocket(req, options, cb) {
- const connectOpts = {
- ...options,
- secureEndpoint: this.isSecureEndpoint(options)
- };
- Promise.resolve().then(() => this.connect(req, connectOpts)).then((socket) => {
- if (socket instanceof http.Agent) {
- return socket.addRequest(req, connectOpts);
- }
- this[INTERNAL].currentSocket = socket;
- super.createSocket(req, options, cb);
- }, cb);
+ clear() {
+ this.state = -1;
}
- createConnection() {
- const socket = this[INTERNAL].currentSocket;
- this[INTERNAL].currentSocket = void 0;
- if (!socket) {
- throw new Error("No socket was returned in the `connect()` function");
+ };
+ module2.exports = {
+ setTimeout(callback, delay, opaque) {
+ return delay < 1e3 ? setTimeout(callback, delay, opaque) : new Timeout(callback, delay, opaque);
+ },
+ clearTimeout(timeout) {
+ if (timeout instanceof Timeout) {
+ timeout.clear();
+ } else {
+ clearTimeout(timeout);
}
- return socket;
}
- get defaultPort() {
- return this[INTERNAL].defaultPort ?? (this.protocol === "https:" ? 443 : 80);
+ };
+ }
+});
+
+// .yarn/cache/@fastify-busboy-npm-2.1.0-960844a007-7bb641080a.zip/node_modules/@fastify/busboy/deps/streamsearch/sbmh.js
+var require_sbmh = __commonJS({
+ ".yarn/cache/@fastify-busboy-npm-2.1.0-960844a007-7bb641080a.zip/node_modules/@fastify/busboy/deps/streamsearch/sbmh.js"(exports, module2) {
+ "use strict";
+ var EventEmitter = require("node:events").EventEmitter;
+ var inherits = require("node:util").inherits;
+ function SBMH(needle) {
+ if (typeof needle === "string") {
+ needle = Buffer.from(needle);
+ }
+ if (!Buffer.isBuffer(needle)) {
+ throw new TypeError("The needle has to be a String or a Buffer.");
+ }
+ const needleLength = needle.length;
+ if (needleLength === 0) {
+ throw new Error("The needle cannot be an empty String/Buffer.");
+ }
+ if (needleLength > 256) {
+ throw new Error("The needle cannot have a length bigger than 256.");
+ }
+ this.maxMatches = Infinity;
+ this.matches = 0;
+ this._occ = new Array(256).fill(needleLength);
+ this._lookbehind_size = 0;
+ this._needle = needle;
+ this._bufpos = 0;
+ this._lookbehind = Buffer.alloc(needleLength);
+ for (var i = 0; i < needleLength - 1; ++i) {
+ this._occ[needle[i]] = needleLength - 1 - i;
+ }
+ }
+ inherits(SBMH, EventEmitter);
+ SBMH.prototype.reset = function() {
+ this._lookbehind_size = 0;
+ this.matches = 0;
+ this._bufpos = 0;
+ };
+ SBMH.prototype.push = function(chunk, pos) {
+ if (!Buffer.isBuffer(chunk)) {
+ chunk = Buffer.from(chunk, "binary");
+ }
+ const chlen = chunk.length;
+ this._bufpos = pos || 0;
+ let r;
+ while (r !== chlen && this.matches < this.maxMatches) {
+ r = this._sbmh_feed(chunk);
}
- set defaultPort(v) {
- if (this[INTERNAL]) {
- this[INTERNAL].defaultPort = v;
+ return r;
+ };
+ SBMH.prototype._sbmh_feed = function(data) {
+ const len = data.length;
+ const needle = this._needle;
+ const needleLength = needle.length;
+ const lastNeedleChar = needle[needleLength - 1];
+ let pos = -this._lookbehind_size;
+ let ch;
+ if (pos < 0) {
+ while (pos < 0 && pos <= len - needleLength) {
+ ch = this._sbmh_lookup_char(data, pos + needleLength - 1);
+ if (ch === lastNeedleChar && this._sbmh_memcmp(data, pos, needleLength - 1)) {
+ this._lookbehind_size = 0;
+ ++this.matches;
+ this.emit("info", true);
+ return this._bufpos = pos + needleLength;
+ }
+ pos += this._occ[ch];
+ }
+ if (pos < 0) {
+ while (pos < 0 && !this._sbmh_memcmp(data, pos, len - pos)) {
+ ++pos;
+ }
+ }
+ if (pos >= 0) {
+ this.emit("info", false, this._lookbehind, 0, this._lookbehind_size);
+ this._lookbehind_size = 0;
+ } else {
+ const bytesToCutOff = this._lookbehind_size + pos;
+ if (bytesToCutOff > 0) {
+ this.emit("info", false, this._lookbehind, 0, bytesToCutOff);
+ }
+ this._lookbehind.copy(
+ this._lookbehind,
+ 0,
+ bytesToCutOff,
+ this._lookbehind_size - bytesToCutOff
+ );
+ this._lookbehind_size -= bytesToCutOff;
+ data.copy(this._lookbehind, this._lookbehind_size);
+ this._lookbehind_size += len;
+ this._bufpos = len;
+ return len;
+ }
+ }
+ pos += (pos >= 0) * this._bufpos;
+ if (data.indexOf(needle, pos) !== -1) {
+ pos = data.indexOf(needle, pos);
+ ++this.matches;
+ if (pos > 0) {
+ this.emit("info", true, data, this._bufpos, pos);
+ } else {
+ this.emit("info", true);
}
+ return this._bufpos = pos + needleLength;
+ } else {
+ pos = len - needleLength;
+ }
+ while (pos < len && (data[pos] !== needle[0] || Buffer.compare(
+ data.subarray(pos, pos + len - pos),
+ needle.subarray(0, len - pos)
+ ) !== 0)) {
+ ++pos;
+ }
+ if (pos < len) {
+ data.copy(this._lookbehind, 0, pos, pos + (len - pos));
+ this._lookbehind_size = len - pos;
}
- get protocol() {
- return this[INTERNAL].protocol ?? (this.isSecureEndpoint() ? "https:" : "http:");
+ if (pos > 0) {
+ this.emit("info", false, data, this._bufpos, pos < len ? pos : len);
}
- set protocol(v) {
- if (this[INTERNAL]) {
- this[INTERNAL].protocol = v;
+ this._bufpos = len;
+ return len;
+ };
+ SBMH.prototype._sbmh_lookup_char = function(data, pos) {
+ return pos < 0 ? this._lookbehind[this._lookbehind_size + pos] : data[pos];
+ };
+ SBMH.prototype._sbmh_memcmp = function(data, pos, len) {
+ for (var i = 0; i < len; ++i) {
+ if (this._sbmh_lookup_char(data, pos + i) !== this._needle[i]) {
+ return false;
}
}
+ return true;
};
- exports.Agent = Agent;
+ module2.exports = SBMH;
}
});
-// .yarn/__virtual__/debug-virtual-eaebcdc48e/0/cache/debug-npm-4.3.4-4513954577-cedbec4529.zip/node_modules/debug/src/common.js
-var require_common2 = __commonJS({
- ".yarn/__virtual__/debug-virtual-eaebcdc48e/0/cache/debug-npm-4.3.4-4513954577-cedbec4529.zip/node_modules/debug/src/common.js"(exports, 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];
+// .yarn/cache/@fastify-busboy-npm-2.1.0-960844a007-7bb641080a.zip/node_modules/@fastify/busboy/deps/dicer/lib/PartStream.js
+var require_PartStream = __commonJS({
+ ".yarn/cache/@fastify-busboy-npm-2.1.0-960844a007-7bb641080a.zip/node_modules/@fastify/busboy/deps/dicer/lib/PartStream.js"(exports, module2) {
+ "use strict";
+ var inherits = require("node:util").inherits;
+ var ReadableStream2 = require("node:stream").Readable;
+ function PartStream(opts) {
+ ReadableStream2.call(this, opts);
+ }
+ inherits(PartStream, ReadableStream2);
+ PartStream.prototype._read = function(n) {
+ };
+ module2.exports = PartStream;
+ }
+});
+
+// .yarn/cache/@fastify-busboy-npm-2.1.0-960844a007-7bb641080a.zip/node_modules/@fastify/busboy/lib/utils/getLimit.js
+var require_getLimit = __commonJS({
+ ".yarn/cache/@fastify-busboy-npm-2.1.0-960844a007-7bb641080a.zip/node_modules/@fastify/busboy/lib/utils/getLimit.js"(exports, module2) {
+ "use strict";
+ module2.exports = function getLimit(limits, name, defaultLimit) {
+ if (!limits || limits[name] === void 0 || limits[name] === null) {
+ return defaultLimit;
}
- createDebug.selectColor = selectColor;
- function createDebug(namespace) {
- let prevTime;
- let enableOverride = null;
- let namespacesCache;
- let enabledCache;
- function debug2(...args) {
- if (!debug2.enabled) {
- return;
- }
- const self2 = debug2;
- 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");
+ if (typeof limits[name] !== "number" || isNaN(limits[name])) {
+ throw new TypeError("Limit " + name + " is not a valid number");
+ }
+ return limits[name];
+ };
+ }
+});
+
+// .yarn/cache/@fastify-busboy-npm-2.1.0-960844a007-7bb641080a.zip/node_modules/@fastify/busboy/deps/dicer/lib/HeaderParser.js
+var require_HeaderParser = __commonJS({
+ ".yarn/cache/@fastify-busboy-npm-2.1.0-960844a007-7bb641080a.zip/node_modules/@fastify/busboy/deps/dicer/lib/HeaderParser.js"(exports, module2) {
+ "use strict";
+ var EventEmitter = require("node:events").EventEmitter;
+ var inherits = require("node:util").inherits;
+ var getLimit = require_getLimit();
+ var StreamSearch = require_sbmh();
+ var B_DCRLF = Buffer.from("\r\n\r\n");
+ var RE_CRLF = /\r\n/g;
+ var RE_HDR = /^([^:]+):[ \t]?([\x00-\xFF]+)?$/;
+ function HeaderParser(cfg) {
+ EventEmitter.call(this);
+ cfg = cfg || {};
+ const self2 = this;
+ this.nread = 0;
+ this.maxed = false;
+ this.npairs = 0;
+ this.maxHeaderPairs = getLimit(cfg, "maxHeaderPairs", 2e3);
+ this.maxHeaderSize = getLimit(cfg, "maxHeaderSize", 80 * 1024);
+ this.buffer = "";
+ this.header = {};
+ this.finished = false;
+ this.ss = new StreamSearch(B_DCRLF);
+ this.ss.on("info", function(isMatch, data, start, end) {
+ if (data && !self2.maxed) {
+ if (self2.nread + end - start >= self2.maxHeaderSize) {
+ end = self2.maxHeaderSize - self2.nread + start;
+ self2.nread = self2.maxHeaderSize;
+ self2.maxed = true;
+ } else {
+ self2.nread += end - start;
}
- 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);
+ self2.buffer += data.toString("binary", start, end);
}
- debug2.namespace = namespace;
- debug2.useColors = createDebug.useColors();
- debug2.color = createDebug.selectColor(namespace);
- debug2.extend = extend;
- debug2.destroy = createDebug.destroy;
- Object.defineProperty(debug2, "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 (isMatch) {
+ self2._finish();
+ }
+ });
+ }
+ inherits(HeaderParser, EventEmitter);
+ HeaderParser.prototype.push = function(data) {
+ const r = this.ss.push(data);
+ if (this.finished) {
+ return r;
+ }
+ };
+ HeaderParser.prototype.reset = function() {
+ this.finished = false;
+ this.buffer = "";
+ this.header = {};
+ this.ss.reset();
+ };
+ HeaderParser.prototype._finish = function() {
+ if (this.buffer) {
+ this._parseHeader();
+ }
+ this.ss.matches = this.ss.maxMatches;
+ const header = this.header;
+ this.header = {};
+ this.buffer = "";
+ this.finished = true;
+ this.nread = this.npairs = 0;
+ this.maxed = false;
+ this.emit("header", header);
+ };
+ HeaderParser.prototype._parseHeader = function() {
+ if (this.npairs === this.maxHeaderPairs) {
+ return;
+ }
+ const lines = this.buffer.split(RE_CRLF);
+ const len = lines.length;
+ let m, h;
+ for (var i = 0; i < len; ++i) {
+ if (lines[i].length === 0) {
+ continue;
+ }
+ if (lines[i][0] === " " || lines[i][0] === " ") {
+ if (h) {
+ this.header[h][this.header[h].length - 1] += lines[i];
+ continue;
}
- });
- if (typeof createDebug.init === "function") {
- createDebug.init(debug2);
}
- return debug2;
+ const posColon = lines[i].indexOf(":");
+ if (posColon === -1 || posColon === 0) {
+ return;
+ }
+ m = RE_HDR.exec(lines[i]);
+ h = m[1].toLowerCase();
+ this.header[h] = this.header[h] || [];
+ this.header[h].push(m[2] || "");
+ if (++this.npairs === this.maxHeaderPairs) {
+ break;
+ }
}
- function extend(namespace, delimiter) {
- const newDebug = createDebug(this.namespace + (typeof delimiter === "undefined" ? ":" : delimiter) + namespace);
- newDebug.log = this.log;
- return newDebug;
+ };
+ module2.exports = HeaderParser;
+ }
+});
+
+// .yarn/cache/@fastify-busboy-npm-2.1.0-960844a007-7bb641080a.zip/node_modules/@fastify/busboy/deps/dicer/lib/Dicer.js
+var require_Dicer = __commonJS({
+ ".yarn/cache/@fastify-busboy-npm-2.1.0-960844a007-7bb641080a.zip/node_modules/@fastify/busboy/deps/dicer/lib/Dicer.js"(exports, module2) {
+ "use strict";
+ var WritableStream = require("node:stream").Writable;
+ var inherits = require("node:util").inherits;
+ var StreamSearch = require_sbmh();
+ var PartStream = require_PartStream();
+ var HeaderParser = require_HeaderParser();
+ var DASH = 45;
+ var B_ONEDASH = Buffer.from("-");
+ var B_CRLF = Buffer.from("\r\n");
+ var EMPTY_FN = function() {
+ };
+ function Dicer(cfg) {
+ if (!(this instanceof Dicer)) {
+ return new Dicer(cfg);
+ }
+ WritableStream.call(this, cfg);
+ if (!cfg || !cfg.headerFirst && typeof cfg.boundary !== "string") {
+ throw new TypeError("Boundary required");
+ }
+ if (typeof cfg.boundary === "string") {
+ this.setBoundary(cfg.boundary);
+ } else {
+ this._bparser = void 0;
+ }
+ this._headerFirst = cfg.headerFirst;
+ this._dashes = 0;
+ this._parts = 0;
+ this._finished = false;
+ this._realFinish = false;
+ this._isPreamble = true;
+ this._justMatched = false;
+ this._firstWrite = true;
+ this._inHeader = true;
+ this._part = void 0;
+ this._cb = void 0;
+ this._ignoreData = false;
+ this._partOpts = { highWaterMark: cfg.partHwm };
+ this._pause = false;
+ const self2 = this;
+ this._hparser = new HeaderParser(cfg);
+ this._hparser.on("header", function(header) {
+ self2._inHeader = false;
+ self2._part.emit("header", header);
+ });
+ }
+ inherits(Dicer, WritableStream);
+ Dicer.prototype.emit = function(ev) {
+ if (ev === "finish" && !this._realFinish) {
+ if (!this._finished) {
+ const self2 = this;
+ process.nextTick(function() {
+ self2.emit("error", new Error("Unexpected end of multipart data"));
+ if (self2._part && !self2._ignoreData) {
+ const type = self2._isPreamble ? "Preamble" : "Part";
+ self2._part.emit("error", new Error(type + " terminated early due to unexpected end of multipart data"));
+ self2._part.push(null);
+ process.nextTick(function() {
+ self2._realFinish = true;
+ self2.emit("finish");
+ self2._realFinish = false;
+ });
+ return;
+ }
+ self2._realFinish = true;
+ self2.emit("finish");
+ self2._realFinish = false;
+ });
+ }
+ } else {
+ WritableStream.prototype.emit.apply(this, arguments);
}
- function enable(namespaces) {
- createDebug.save(namespaces);
- createDebug.namespaces = namespaces;
- createDebug.names = [];
- createDebug.skips = [];
- let i;
- const split = (typeof namespaces === "string" ? namespaces : "").split(/[\s,]+/);
- const len = split.length;
- for (i = 0; i < len; i++) {
- if (!split[i]) {
- continue;
- }
- namespaces = split[i].replace(/\*/g, ".*?");
- if (namespaces[0] === "-") {
- createDebug.skips.push(new RegExp("^" + namespaces.slice(1) + "$"));
+ };
+ Dicer.prototype._write = function(data, encoding, cb) {
+ if (!this._hparser && !this._bparser) {
+ return cb();
+ }
+ if (this._headerFirst && this._isPreamble) {
+ if (!this._part) {
+ this._part = new PartStream(this._partOpts);
+ if (this._events.preamble) {
+ this.emit("preamble", this._part);
} else {
- createDebug.names.push(new RegExp("^" + namespaces + "$"));
+ this._ignore();
}
}
+ const r = this._hparser.push(data);
+ if (!this._inHeader && r !== void 0 && r < data.length) {
+ data = data.slice(r);
+ } else {
+ return cb();
+ }
}
- function disable() {
- const namespaces = [
- ...createDebug.names.map(toNamespace),
- ...createDebug.skips.map(toNamespace).map((namespace) => "-" + namespace)
- ].join(",");
- createDebug.enable("");
- return namespaces;
+ if (this._firstWrite) {
+ this._bparser.push(B_CRLF);
+ this._firstWrite = false;
}
- function enabled(name) {
- if (name[name.length - 1] === "*") {
- return true;
- }
- let i;
- let len;
- for (i = 0, len = createDebug.skips.length; i < len; i++) {
- if (createDebug.skips[i].test(name)) {
- return false;
+ this._bparser.push(data);
+ if (this._pause) {
+ this._cb = cb;
+ } else {
+ cb();
+ }
+ };
+ Dicer.prototype.reset = function() {
+ this._part = void 0;
+ this._bparser = void 0;
+ this._hparser = void 0;
+ };
+ Dicer.prototype.setBoundary = function(boundary) {
+ const self2 = this;
+ this._bparser = new StreamSearch("\r\n--" + boundary);
+ this._bparser.on("info", function(isMatch, data, start, end) {
+ self2._oninfo(isMatch, data, start, end);
+ });
+ };
+ Dicer.prototype._ignore = function() {
+ if (this._part && !this._ignoreData) {
+ this._ignoreData = true;
+ this._part.on("error", EMPTY_FN);
+ this._part.resume();
+ }
+ };
+ Dicer.prototype._oninfo = function(isMatch, data, start, end) {
+ let buf;
+ const self2 = this;
+ let i = 0;
+ let r;
+ let shouldWriteMore = true;
+ if (!this._part && this._justMatched && data) {
+ while (this._dashes < 2 && start + i < end) {
+ if (data[start + i] === DASH) {
+ ++i;
+ ++this._dashes;
+ } else {
+ if (this._dashes) {
+ buf = B_ONEDASH;
+ }
+ this._dashes = 0;
+ break;
}
}
- for (i = 0, len = createDebug.names.length; i < len; i++) {
- if (createDebug.names[i].test(name)) {
- return true;
+ if (this._dashes === 2) {
+ if (start + i < end && this._events.trailer) {
+ this.emit("trailer", data.slice(start + i, end));
+ }
+ this.reset();
+ this._finished = true;
+ if (self2._parts === 0) {
+ self2._realFinish = true;
+ self2.emit("finish");
+ self2._realFinish = false;
}
}
- return false;
+ if (this._dashes) {
+ return;
+ }
}
- function toNamespace(regexp) {
- return regexp.toString().substring(2, regexp.toString().length - 2).replace(/\.\*\?$/, "*");
+ if (this._justMatched) {
+ this._justMatched = false;
}
- function coerce(val) {
- if (val instanceof Error) {
- return val.stack || val.message;
+ if (!this._part) {
+ this._part = new PartStream(this._partOpts);
+ this._part._read = function(n) {
+ self2._unpause();
+ };
+ if (this._isPreamble && this._events.preamble) {
+ this.emit("preamble", this._part);
+ } else if (this._isPreamble !== true && this._events.part) {
+ this.emit("part", this._part);
+ } else {
+ this._ignore();
+ }
+ if (!this._isPreamble) {
+ this._inHeader = true;
}
- 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`.");
+ if (data && start < end && !this._ignoreData) {
+ if (this._isPreamble || !this._inHeader) {
+ if (buf) {
+ shouldWriteMore = this._part.push(buf);
+ }
+ shouldWriteMore = this._part.push(data.slice(start, end));
+ if (!shouldWriteMore) {
+ this._pause = true;
+ }
+ } else if (!this._isPreamble && this._inHeader) {
+ if (buf) {
+ this._hparser.push(buf);
+ }
+ r = this._hparser.push(data.slice(start, end));
+ if (!this._inHeader && r !== void 0 && r < end) {
+ this._oninfo(false, data, start + r, end);
+ }
+ }
}
- createDebug.enable(createDebug.load());
- return createDebug;
- }
- module2.exports = setup;
+ if (isMatch) {
+ this._hparser.reset();
+ if (this._isPreamble) {
+ this._isPreamble = false;
+ } else {
+ if (start !== end) {
+ ++this._parts;
+ this._part.on("end", function() {
+ if (--self2._parts === 0) {
+ if (self2._finished) {
+ self2._realFinish = true;
+ self2.emit("finish");
+ self2._realFinish = false;
+ } else {
+ self2._unpause();
+ }
+ }
+ });
+ }
+ }
+ this._part.push(null);
+ this._part = void 0;
+ this._ignoreData = false;
+ this._justMatched = true;
+ this._dashes = 0;
+ }
+ };
+ Dicer.prototype._unpause = function() {
+ if (!this._pause) {
+ return;
+ }
+ this._pause = false;
+ if (this._cb) {
+ const cb = this._cb;
+ this._cb = void 0;
+ cb();
+ }
+ };
+ module2.exports = Dicer;
}
});
-// .yarn/__virtual__/debug-virtual-eaebcdc48e/0/cache/debug-npm-4.3.4-4513954577-cedbec4529.zip/node_modules/debug/src/browser.js
-var require_browser2 = __commonJS({
- ".yarn/__virtual__/debug-virtual-eaebcdc48e/0/cache/debug-npm-4.3.4-4513954577-cedbec4529.zip/node_modules/debug/src/browser.js"(exports, module2) {
- exports.formatArgs = formatArgs;
- exports.save = save;
- exports.load = load;
- exports.useColors = useColors;
- exports.storage = localstorage();
- exports.destroy = (() => {
- 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`.");
+// .yarn/cache/@fastify-busboy-npm-2.1.0-960844a007-7bb641080a.zip/node_modules/@fastify/busboy/lib/utils/decodeText.js
+var require_decodeText = __commonJS({
+ ".yarn/cache/@fastify-busboy-npm-2.1.0-960844a007-7bb641080a.zip/node_modules/@fastify/busboy/lib/utils/decodeText.js"(exports, module2) {
+ "use strict";
+ var utf8Decoder = new TextDecoder("utf-8");
+ var textDecoders = /* @__PURE__ */ new Map([
+ ["utf-8", utf8Decoder],
+ ["utf8", utf8Decoder]
+ ]);
+ function getDecoder(charset) {
+ let lc;
+ while (true) {
+ switch (charset) {
+ case "utf-8":
+ case "utf8":
+ return decoders.utf8;
+ case "latin1":
+ case "ascii":
+ case "us-ascii":
+ case "iso-8859-1":
+ case "iso8859-1":
+ case "iso88591":
+ case "iso_8859-1":
+ case "windows-1252":
+ case "iso_8859-1:1987":
+ case "cp1252":
+ case "x-cp1252":
+ return decoders.latin1;
+ case "utf16le":
+ case "utf-16le":
+ case "ucs2":
+ case "ucs-2":
+ return decoders.utf16le;
+ case "base64":
+ return decoders.base64;
+ default:
+ if (lc === void 0) {
+ lc = true;
+ charset = charset.toLowerCase();
+ continue;
+ }
+ return decoders.other.bind(charset);
}
- };
- })();
- exports.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;
}
- 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 && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$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;
+ var decoders = {
+ utf8: (data, sourceEncoding) => {
+ if (data.length === 0) {
+ return "";
}
- index++;
- if (match === "%c") {
- lastC = index;
+ if (typeof data === "string") {
+ data = Buffer.from(data, sourceEncoding);
}
- });
- args.splice(lastC, 0, c);
- }
- exports.log = console.debug || console.log || (() => {
- });
- function save(namespaces) {
- try {
- if (namespaces) {
- exports.storage.setItem("debug", namespaces);
- } else {
- exports.storage.removeItem("debug");
+ return data.utf8Slice(0, data.length);
+ },
+ latin1: (data, sourceEncoding) => {
+ if (data.length === 0) {
+ return "";
}
- } catch (error) {
- }
- }
- function load() {
- let r;
- try {
- r = exports.storage.getItem("debug");
- } catch (error) {
- }
- if (!r && typeof process !== "undefined" && "env" in process) {
- r = process.env.DEBUG;
+ if (typeof data === "string") {
+ return data;
+ }
+ return data.latin1Slice(0, data.length);
+ },
+ utf16le: (data, sourceEncoding) => {
+ if (data.length === 0) {
+ return "";
+ }
+ if (typeof data === "string") {
+ data = Buffer.from(data, sourceEncoding);
+ }
+ return data.ucs2Slice(0, data.length);
+ },
+ base64: (data, sourceEncoding) => {
+ if (data.length === 0) {
+ return "";
+ }
+ if (typeof data === "string") {
+ data = Buffer.from(data, sourceEncoding);
+ }
+ return data.base64Slice(0, data.length);
+ },
+ other: (data, sourceEncoding) => {
+ if (data.length === 0) {
+ return "";
+ }
+ if (typeof data === "string") {
+ data = Buffer.from(data, sourceEncoding);
+ }
+ if (textDecoders.has(exports.toString())) {
+ try {
+ return textDecoders.get(exports).decode(data);
+ } catch (e) {
+ }
+ }
+ return typeof data === "string" ? data : data.toString();
}
- return r;
- }
- function localstorage() {
- try {
- return localStorage;
- } catch (error) {
+ };
+ function decodeText(text, sourceEncoding, destEncoding) {
+ if (text) {
+ return getDecoder(destEncoding)(text, sourceEncoding);
}
+ return text;
}
- module2.exports = require_common2()(exports);
- var { formatters } = module2.exports;
- formatters.j = function(v) {
- try {
- return JSON.stringify(v);
- } catch (error) {
- return "[UnexpectedJSONParseError]: " + error.message;
- }
- };
+ module2.exports = decodeText;
}
});
-// .yarn/__virtual__/debug-virtual-eaebcdc48e/0/cache/debug-npm-4.3.4-4513954577-cedbec4529.zip/node_modules/debug/src/node.js
-var require_node2 = __commonJS({
- ".yarn/__virtual__/debug-virtual-eaebcdc48e/0/cache/debug-npm-4.3.4-4513954577-cedbec4529.zip/node_modules/debug/src/node.js"(exports, module2) {
- var tty3 = require("tty");
- var util = require("util");
- exports.init = init;
- exports.log = log2;
- exports.formatArgs = formatArgs;
- exports.save = save;
- exports.load = load;
- exports.useColors = useColors;
- exports.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`."
- );
- exports.colors = [6, 2, 3, 4, 5, 1];
- try {
- const supportsColor2 = (init_supports_color(), __toCommonJS(supports_color_exports));
- if (supportsColor2 && (supportsColor2.stderr || supportsColor2).level >= 2) {
- exports.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
- ];
+// .yarn/cache/@fastify-busboy-npm-2.1.0-960844a007-7bb641080a.zip/node_modules/@fastify/busboy/lib/utils/parseParams.js
+var require_parseParams = __commonJS({
+ ".yarn/cache/@fastify-busboy-npm-2.1.0-960844a007-7bb641080a.zip/node_modules/@fastify/busboy/lib/utils/parseParams.js"(exports, module2) {
+ "use strict";
+ var decodeText = require_decodeText();
+ var RE_ENCODED = /%[a-fA-F0-9][a-fA-F0-9]/g;
+ var EncodedLookup = {
+ "%00": "\0",
+ "%01": "",
+ "%02": "",
+ "%03": "",
+ "%04": "",
+ "%05": "",
+ "%06": "",
+ "%07": "\x07",
+ "%08": "\b",
+ "%09": " ",
+ "%0a": "\n",
+ "%0A": "\n",
+ "%0b": "\v",
+ "%0B": "\v",
+ "%0c": "\f",
+ "%0C": "\f",
+ "%0d": "\r",
+ "%0D": "\r",
+ "%0e": "",
+ "%0E": "",
+ "%0f": "",
+ "%0F": "",
+ "%10": "",
+ "%11": "",
+ "%12": "",
+ "%13": "",
+ "%14": "",
+ "%15": "",
+ "%16": "",
+ "%17": "",
+ "%18": "",
+ "%19": "",
+ "%1a": "",
+ "%1A": "",
+ "%1b": "\x1B",
+ "%1B": "\x1B",
+ "%1c": "",
+ "%1C": "",
+ "%1d": "",
+ "%1D": "",
+ "%1e": "",
+ "%1E": "",
+ "%1f": "",
+ "%1F": "",
+ "%20": " ",
+ "%21": "!",
+ "%22": '"',
+ "%23": "#",
+ "%24": "$",
+ "%25": "%",
+ "%26": "&",
+ "%27": "'",
+ "%28": "(",
+ "%29": ")",
+ "%2a": "*",
+ "%2A": "*",
+ "%2b": "+",
+ "%2B": "+",
+ "%2c": ",",
+ "%2C": ",",
+ "%2d": "-",
+ "%2D": "-",
+ "%2e": ".",
+ "%2E": ".",
+ "%2f": "/",
+ "%2F": "/",
+ "%30": "0",
+ "%31": "1",
+ "%32": "2",
+ "%33": "3",
+ "%34": "4",
+ "%35": "5",
+ "%36": "6",
+ "%37": "7",
+ "%38": "8",
+ "%39": "9",
+ "%3a": ":",
+ "%3A": ":",
+ "%3b": ";",
+ "%3B": ";",
+ "%3c": "<",
+ "%3C": "<",
+ "%3d": "=",
+ "%3D": "=",
+ "%3e": ">",
+ "%3E": ">",
+ "%3f": "?",
+ "%3F": "?",
+ "%40": "@",
+ "%41": "A",
+ "%42": "B",
+ "%43": "C",
+ "%44": "D",
+ "%45": "E",
+ "%46": "F",
+ "%47": "G",
+ "%48": "H",
+ "%49": "I",
+ "%4a": "J",
+ "%4A": "J",
+ "%4b": "K",
+ "%4B": "K",
+ "%4c": "L",
+ "%4C": "L",
+ "%4d": "M",
+ "%4D": "M",
+ "%4e": "N",
+ "%4E": "N",
+ "%4f": "O",
+ "%4F": "O",
+ "%50": "P",
+ "%51": "Q",
+ "%52": "R",
+ "%53": "S",
+ "%54": "T",
+ "%55": "U",
+ "%56": "V",
+ "%57": "W",
+ "%58": "X",
+ "%59": "Y",
+ "%5a": "Z",
+ "%5A": "Z",
+ "%5b": "[",
+ "%5B": "[",
+ "%5c": "\\",
+ "%5C": "\\",
+ "%5d": "]",
+ "%5D": "]",
+ "%5e": "^",
+ "%5E": "^",
+ "%5f": "_",
+ "%5F": "_",
+ "%60": "`",
+ "%61": "a",
+ "%62": "b",
+ "%63": "c",
+ "%64": "d",
+ "%65": "e",
+ "%66": "f",
+ "%67": "g",
+ "%68": "h",
+ "%69": "i",
+ "%6a": "j",
+ "%6A": "j",
+ "%6b": "k",
+ "%6B": "k",
+ "%6c": "l",
+ "%6C": "l",
+ "%6d": "m",
+ "%6D": "m",
+ "%6e": "n",
+ "%6E": "n",
+ "%6f": "o",
+ "%6F": "o",
+ "%70": "p",
+ "%71": "q",
+ "%72": "r",
+ "%73": "s",
+ "%74": "t",
+ "%75": "u",
+ "%76": "v",
+ "%77": "w",
+ "%78": "x",
+ "%79": "y",
+ "%7a": "z",
+ "%7A": "z",
+ "%7b": "{",
+ "%7B": "{",
+ "%7c": "|",
+ "%7C": "|",
+ "%7d": "}",
+ "%7D": "}",
+ "%7e": "~",
+ "%7E": "~",
+ "%7f": "\x7F",
+ "%7F": "\x7F",
+ "%80": "\x80",
+ "%81": "\x81",
+ "%82": "\x82",
+ "%83": "\x83",
+ "%84": "\x84",
+ "%85": "\x85",
+ "%86": "\x86",
+ "%87": "\x87",
+ "%88": "\x88",
+ "%89": "\x89",
+ "%8a": "\x8A",
+ "%8A": "\x8A",
+ "%8b": "\x8B",
+ "%8B": "\x8B",
+ "%8c": "\x8C",
+ "%8C": "\x8C",
+ "%8d": "\x8D",
+ "%8D": "\x8D",
+ "%8e": "\x8E",
+ "%8E": "\x8E",
+ "%8f": "\x8F",
+ "%8F": "\x8F",
+ "%90": "\x90",
+ "%91": "\x91",
+ "%92": "\x92",
+ "%93": "\x93",
+ "%94": "\x94",
+ "%95": "\x95",
+ "%96": "\x96",
+ "%97": "\x97",
+ "%98": "\x98",
+ "%99": "\x99",
+ "%9a": "\x9A",
+ "%9A": "\x9A",
+ "%9b": "\x9B",
+ "%9B": "\x9B",
+ "%9c": "\x9C",
+ "%9C": "\x9C",
+ "%9d": "\x9D",
+ "%9D": "\x9D",
+ "%9e": "\x9E",
+ "%9E": "\x9E",
+ "%9f": "\x9F",
+ "%9F": "\x9F",
+ "%a0": "\xA0",
+ "%A0": "\xA0",
+ "%a1": "\xA1",
+ "%A1": "\xA1",
+ "%a2": "\xA2",
+ "%A2": "\xA2",
+ "%a3": "\xA3",
+ "%A3": "\xA3",
+ "%a4": "\xA4",
+ "%A4": "\xA4",
+ "%a5": "\xA5",
+ "%A5": "\xA5",
+ "%a6": "\xA6",
+ "%A6": "\xA6",
+ "%a7": "\xA7",
+ "%A7": "\xA7",
+ "%a8": "\xA8",
+ "%A8": "\xA8",
+ "%a9": "\xA9",
+ "%A9": "\xA9",
+ "%aa": "\xAA",
+ "%Aa": "\xAA",
+ "%aA": "\xAA",
+ "%AA": "\xAA",
+ "%ab": "\xAB",
+ "%Ab": "\xAB",
+ "%aB": "\xAB",
+ "%AB": "\xAB",
+ "%ac": "\xAC",
+ "%Ac": "\xAC",
+ "%aC": "\xAC",
+ "%AC": "\xAC",
+ "%ad": "\xAD",
+ "%Ad": "\xAD",
+ "%aD": "\xAD",
+ "%AD": "\xAD",
+ "%ae": "\xAE",
+ "%Ae": "\xAE",
+ "%aE": "\xAE",
+ "%AE": "\xAE",
+ "%af": "\xAF",
+ "%Af": "\xAF",
+ "%aF": "\xAF",
+ "%AF": "\xAF",
+ "%b0": "\xB0",
+ "%B0": "\xB0",
+ "%b1": "\xB1",
+ "%B1": "\xB1",
+ "%b2": "\xB2",
+ "%B2": "\xB2",
+ "%b3": "\xB3",
+ "%B3": "\xB3",
+ "%b4": "\xB4",
+ "%B4": "\xB4",
+ "%b5": "\xB5",
+ "%B5": "\xB5",
+ "%b6": "\xB6",
+ "%B6": "\xB6",
+ "%b7": "\xB7",
+ "%B7": "\xB7",
+ "%b8": "\xB8",
+ "%B8": "\xB8",
+ "%b9": "\xB9",
+ "%B9": "\xB9",
+ "%ba": "\xBA",
+ "%Ba": "\xBA",
+ "%bA": "\xBA",
+ "%BA": "\xBA",
+ "%bb": "\xBB",
+ "%Bb": "\xBB",
+ "%bB": "\xBB",
+ "%BB": "\xBB",
+ "%bc": "\xBC",
+ "%Bc": "\xBC",
+ "%bC": "\xBC",
+ "%BC": "\xBC",
+ "%bd": "\xBD",
+ "%Bd": "\xBD",
+ "%bD": "\xBD",
+ "%BD": "\xBD",
+ "%be": "\xBE",
+ "%Be": "\xBE",
+ "%bE": "\xBE",
+ "%BE": "\xBE",
+ "%bf": "\xBF",
+ "%Bf": "\xBF",
+ "%bF": "\xBF",
+ "%BF": "\xBF",
+ "%c0": "\xC0",
+ "%C0": "\xC0",
+ "%c1": "\xC1",
+ "%C1": "\xC1",
+ "%c2": "\xC2",
+ "%C2": "\xC2",
+ "%c3": "\xC3",
+ "%C3": "\xC3",
+ "%c4": "\xC4",
+ "%C4": "\xC4",
+ "%c5": "\xC5",
+ "%C5": "\xC5",
+ "%c6": "\xC6",
+ "%C6": "\xC6",
+ "%c7": "\xC7",
+ "%C7": "\xC7",
+ "%c8": "\xC8",
+ "%C8": "\xC8",
+ "%c9": "\xC9",
+ "%C9": "\xC9",
+ "%ca": "\xCA",
+ "%Ca": "\xCA",
+ "%cA": "\xCA",
+ "%CA": "\xCA",
+ "%cb": "\xCB",
+ "%Cb": "\xCB",
+ "%cB": "\xCB",
+ "%CB": "\xCB",
+ "%cc": "\xCC",
+ "%Cc": "\xCC",
+ "%cC": "\xCC",
+ "%CC": "\xCC",
+ "%cd": "\xCD",
+ "%Cd": "\xCD",
+ "%cD": "\xCD",
+ "%CD": "\xCD",
+ "%ce": "\xCE",
+ "%Ce": "\xCE",
+ "%cE": "\xCE",
+ "%CE": "\xCE",
+ "%cf": "\xCF",
+ "%Cf": "\xCF",
+ "%cF": "\xCF",
+ "%CF": "\xCF",
+ "%d0": "\xD0",
+ "%D0": "\xD0",
+ "%d1": "\xD1",
+ "%D1": "\xD1",
+ "%d2": "\xD2",
+ "%D2": "\xD2",
+ "%d3": "\xD3",
+ "%D3": "\xD3",
+ "%d4": "\xD4",
+ "%D4": "\xD4",
+ "%d5": "\xD5",
+ "%D5": "\xD5",
+ "%d6": "\xD6",
+ "%D6": "\xD6",
+ "%d7": "\xD7",
+ "%D7": "\xD7",
+ "%d8": "\xD8",
+ "%D8": "\xD8",
+ "%d9": "\xD9",
+ "%D9": "\xD9",
+ "%da": "\xDA",
+ "%Da": "\xDA",
+ "%dA": "\xDA",
+ "%DA": "\xDA",
+ "%db": "\xDB",
+ "%Db": "\xDB",
+ "%dB": "\xDB",
+ "%DB": "\xDB",
+ "%dc": "\xDC",
+ "%Dc": "\xDC",
+ "%dC": "\xDC",
+ "%DC": "\xDC",
+ "%dd": "\xDD",
+ "%Dd": "\xDD",
+ "%dD": "\xDD",
+ "%DD": "\xDD",
+ "%de": "\xDE",
+ "%De": "\xDE",
+ "%dE": "\xDE",
+ "%DE": "\xDE",
+ "%df": "\xDF",
+ "%Df": "\xDF",
+ "%dF": "\xDF",
+ "%DF": "\xDF",
+ "%e0": "\xE0",
+ "%E0": "\xE0",
+ "%e1": "\xE1",
+ "%E1": "\xE1",
+ "%e2": "\xE2",
+ "%E2": "\xE2",
+ "%e3": "\xE3",
+ "%E3": "\xE3",
+ "%e4": "\xE4",
+ "%E4": "\xE4",
+ "%e5": "\xE5",
+ "%E5": "\xE5",
+ "%e6": "\xE6",
+ "%E6": "\xE6",
+ "%e7": "\xE7",
+ "%E7": "\xE7",
+ "%e8": "\xE8",
+ "%E8": "\xE8",
+ "%e9": "\xE9",
+ "%E9": "\xE9",
+ "%ea": "\xEA",
+ "%Ea": "\xEA",
+ "%eA": "\xEA",
+ "%EA": "\xEA",
+ "%eb": "\xEB",
+ "%Eb": "\xEB",
+ "%eB": "\xEB",
+ "%EB": "\xEB",
+ "%ec": "\xEC",
+ "%Ec": "\xEC",
+ "%eC": "\xEC",
+ "%EC": "\xEC",
+ "%ed": "\xED",
+ "%Ed": "\xED",
+ "%eD": "\xED",
+ "%ED": "\xED",
+ "%ee": "\xEE",
+ "%Ee": "\xEE",
+ "%eE": "\xEE",
+ "%EE": "\xEE",
+ "%ef": "\xEF",
+ "%Ef": "\xEF",
+ "%eF": "\xEF",
+ "%EF": "\xEF",
+ "%f0": "\xF0",
+ "%F0": "\xF0",
+ "%f1": "\xF1",
+ "%F1": "\xF1",
+ "%f2": "\xF2",
+ "%F2": "\xF2",
+ "%f3": "\xF3",
+ "%F3": "\xF3",
+ "%f4": "\xF4",
+ "%F4": "\xF4",
+ "%f5": "\xF5",
+ "%F5": "\xF5",
+ "%f6": "\xF6",
+ "%F6": "\xF6",
+ "%f7": "\xF7",
+ "%F7": "\xF7",
+ "%f8": "\xF8",
+ "%F8": "\xF8",
+ "%f9": "\xF9",
+ "%F9": "\xF9",
+ "%fa": "\xFA",
+ "%Fa": "\xFA",
+ "%fA": "\xFA",
+ "%FA": "\xFA",
+ "%fb": "\xFB",
+ "%Fb": "\xFB",
+ "%fB": "\xFB",
+ "%FB": "\xFB",
+ "%fc": "\xFC",
+ "%Fc": "\xFC",
+ "%fC": "\xFC",
+ "%FC": "\xFC",
+ "%fd": "\xFD",
+ "%Fd": "\xFD",
+ "%fD": "\xFD",
+ "%FD": "\xFD",
+ "%fe": "\xFE",
+ "%Fe": "\xFE",
+ "%fE": "\xFE",
+ "%FE": "\xFE",
+ "%ff": "\xFF",
+ "%Ff": "\xFF",
+ "%fF": "\xFF",
+ "%FF": "\xFF"
+ };
+ function encodedReplacer(match) {
+ return EncodedLookup[match];
+ }
+ var STATE_KEY = 0;
+ var STATE_VALUE = 1;
+ var STATE_CHARSET = 2;
+ var STATE_LANG = 3;
+ function parseParams(str) {
+ const res = [];
+ let state = STATE_KEY;
+ let charset = "";
+ let inquote = false;
+ let escaping = false;
+ let p = 0;
+ let tmp = "";
+ const len = str.length;
+ for (var i = 0; i < len; ++i) {
+ const char = str[i];
+ if (char === "\\" && inquote) {
+ if (escaping) {
+ escaping = false;
+ } else {
+ escaping = true;
+ continue;
+ }
+ } else if (char === '"') {
+ if (!escaping) {
+ if (inquote) {
+ inquote = false;
+ state = STATE_KEY;
+ } else {
+ inquote = true;
+ }
+ continue;
+ } else {
+ escaping = false;
+ }
+ } else {
+ if (escaping && inquote) {
+ tmp += "\\";
+ }
+ escaping = false;
+ if ((state === STATE_CHARSET || state === STATE_LANG) && char === "'") {
+ if (state === STATE_CHARSET) {
+ state = STATE_LANG;
+ charset = tmp.substring(1);
+ } else {
+ state = STATE_VALUE;
+ }
+ tmp = "";
+ continue;
+ } else if (state === STATE_KEY && (char === "*" || char === "=") && res.length) {
+ state = char === "*" ? STATE_CHARSET : STATE_VALUE;
+ res[p] = [tmp, void 0];
+ tmp = "";
+ continue;
+ } else if (!inquote && char === ";") {
+ state = STATE_KEY;
+ if (charset) {
+ if (tmp.length) {
+ tmp = decodeText(
+ tmp.replace(RE_ENCODED, encodedReplacer),
+ "binary",
+ charset
+ );
+ }
+ charset = "";
+ } else if (tmp.length) {
+ tmp = decodeText(tmp, "binary", "utf8");
+ }
+ if (res[p] === void 0) {
+ res[p] = tmp;
+ } else {
+ res[p][1] = tmp;
+ }
+ tmp = "";
+ ++p;
+ continue;
+ } else if (!inquote && (char === " " || char === " ")) {
+ continue;
+ }
+ }
+ tmp += char;
}
- } catch (error) {
- }
- exports.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);
+ if (charset && tmp.length) {
+ tmp = decodeText(
+ tmp.replace(RE_ENCODED, encodedReplacer),
+ "binary",
+ charset
+ );
+ } else if (tmp) {
+ tmp = decodeText(tmp, "binary", "utf8");
}
- obj[prop] = val;
- return obj;
- }, {});
- function useColors() {
- return "colors" in exports.inspectOpts ? Boolean(exports.inspectOpts.colors) : tty3.isatty(process.stderr.fd);
- }
- function formatArgs(args) {
- const { namespace: name, useColors: useColors2 } = this;
- if (useColors2) {
- const c = this.color;
- const colorCode = "\x1B[3" + (c < 8 ? c : "8;5;" + c);
- const prefix = ` ${colorCode};1m${name} \x1B[0m`;
- args[0] = prefix + args[0].split("\n").join("\n" + prefix);
- args.push(colorCode + "m+" + module2.exports.humanize(this.diff) + "\x1B[0m");
+ if (res[p] === void 0) {
+ if (tmp) {
+ res[p] = tmp;
+ }
} else {
- args[0] = getDate() + name + " " + args[0];
+ res[p][1] = tmp;
}
+ return res;
}
- function getDate() {
- if (exports.inspectOpts.hideDate) {
+ module2.exports = parseParams;
+ }
+});
+
+// .yarn/cache/@fastify-busboy-npm-2.1.0-960844a007-7bb641080a.zip/node_modules/@fastify/busboy/lib/utils/basename.js
+var require_basename = __commonJS({
+ ".yarn/cache/@fastify-busboy-npm-2.1.0-960844a007-7bb641080a.zip/node_modules/@fastify/busboy/lib/utils/basename.js"(exports, module2) {
+ "use strict";
+ module2.exports = function basename(path10) {
+ if (typeof path10 !== "string") {
return "";
}
- return (/* @__PURE__ */ new Date()).toISOString() + " ";
- }
- function log2(...args) {
- return process.stderr.write(util.format(...args) + "\n");
- }
- function save(namespaces) {
- if (namespaces) {
- process.env.DEBUG = namespaces;
- } else {
- delete process.env.DEBUG;
- }
- }
- function load() {
- return process.env.DEBUG;
- }
- function init(debug2) {
- debug2.inspectOpts = {};
- const keys = Object.keys(exports.inspectOpts);
- for (let i = 0; i < keys.length; i++) {
- debug2.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];
+ for (var i = path10.length - 1; i >= 0; --i) {
+ switch (path10.charCodeAt(i)) {
+ case 47:
+ case 92:
+ path10 = path10.slice(i + 1);
+ return path10 === ".." || path10 === "." ? "" : path10;
+ }
}
- }
- module2.exports = require_common2()(exports);
- 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);
+ return path10 === ".." || path10 === "." ? "" : path10;
};
}
});
-// .yarn/__virtual__/debug-virtual-eaebcdc48e/0/cache/debug-npm-4.3.4-4513954577-cedbec4529.zip/node_modules/debug/src/index.js
-var require_src2 = __commonJS({
- ".yarn/__virtual__/debug-virtual-eaebcdc48e/0/cache/debug-npm-4.3.4-4513954577-cedbec4529.zip/node_modules/debug/src/index.js"(exports, module2) {
- if (typeof process === "undefined" || process.type === "renderer" || process.browser === true || process.__nwjs) {
- module2.exports = require_browser2();
- } else {
- module2.exports = require_node2();
- }
- }
-});
-
-// .yarn/cache/proxy-from-env-npm-1.1.0-c13d07f26b-fe7dd8b1bd.zip/node_modules/proxy-from-env/index.js
-var require_proxy_from_env = __commonJS({
- ".yarn/cache/proxy-from-env-npm-1.1.0-c13d07f26b-fe7dd8b1bd.zip/node_modules/proxy-from-env/index.js"(exports) {
+// .yarn/cache/@fastify-busboy-npm-2.1.0-960844a007-7bb641080a.zip/node_modules/@fastify/busboy/lib/types/multipart.js
+var require_multipart = __commonJS({
+ ".yarn/cache/@fastify-busboy-npm-2.1.0-960844a007-7bb641080a.zip/node_modules/@fastify/busboy/lib/types/multipart.js"(exports, module2) {
"use strict";
- var parseUrl = require("url").parse;
- var DEFAULT_PORTS = {
- ftp: 21,
- gopher: 70,
- http: 80,
- https: 443,
- ws: 80,
- wss: 443
- };
- var stringEndsWith = String.prototype.endsWith || function(s) {
- return s.length <= this.length && this.indexOf(s, this.length - s.length) !== -1;
- };
- function getProxyForUrl(url) {
- var parsedUrl = typeof url === "string" ? parseUrl(url) : url || {};
- var proto = parsedUrl.protocol;
- var hostname = parsedUrl.host;
- var port = parsedUrl.port;
- if (typeof hostname !== "string" || !hostname || typeof proto !== "string") {
- return "";
+ var { Readable: Readable2 } = require("node:stream");
+ var { inherits } = require("node:util");
+ var Dicer = require_Dicer();
+ var parseParams = require_parseParams();
+ var decodeText = require_decodeText();
+ var basename = require_basename();
+ var getLimit = require_getLimit();
+ var RE_BOUNDARY = /^boundary$/i;
+ var RE_FIELD = /^form-data$/i;
+ var RE_CHARSET = /^charset$/i;
+ var RE_FILENAME = /^filename$/i;
+ var RE_NAME = /^name$/i;
+ Multipart.detect = /^multipart\/form-data/i;
+ function Multipart(boy, cfg) {
+ let i;
+ let len;
+ const self2 = this;
+ let boundary;
+ const limits = cfg.limits;
+ const isPartAFile = cfg.isPartAFile || ((fieldName, contentType, fileName) => contentType === "application/octet-stream" || fileName !== void 0);
+ const parsedConType = cfg.parsedConType || [];
+ const defCharset = cfg.defCharset || "utf8";
+ const preservePath = cfg.preservePath;
+ const fileOpts = { highWaterMark: cfg.fileHwm };
+ for (i = 0, len = parsedConType.length; i < len; ++i) {
+ if (Array.isArray(parsedConType[i]) && RE_BOUNDARY.test(parsedConType[i][0])) {
+ boundary = parsedConType[i][1];
+ break;
+ }
}
- proto = proto.split(":", 1)[0];
- hostname = hostname.replace(/:\d*$/, "");
- port = parseInt(port) || DEFAULT_PORTS[proto] || 0;
- if (!shouldProxy(hostname, port)) {
- return "";
- }
- var proxy = getEnv("npm_config_" + proto + "_proxy") || getEnv(proto + "_proxy") || getEnv("npm_config_proxy") || getEnv("all_proxy");
- if (proxy && proxy.indexOf("://") === -1) {
- proxy = proto + "://" + proxy;
- }
- return proxy;
- }
- function shouldProxy(hostname, port) {
- var NO_PROXY = (getEnv("npm_config_no_proxy") || getEnv("no_proxy")).toLowerCase();
- if (!NO_PROXY) {
- return true;
- }
- if (NO_PROXY === "*") {
- return false;
- }
- return NO_PROXY.split(/[,\s]/).every(function(proxy) {
- if (!proxy) {
- return true;
- }
- var parsedProxy = proxy.match(/^(.+):(\d+)$/);
- var parsedProxyHostname = parsedProxy ? parsedProxy[1] : proxy;
- var parsedProxyPort = parsedProxy ? parseInt(parsedProxy[2]) : 0;
- if (parsedProxyPort && parsedProxyPort !== port) {
- return true;
- }
- if (!/^[.*]/.test(parsedProxyHostname)) {
- return hostname !== parsedProxyHostname;
- }
- if (parsedProxyHostname.charAt(0) === "*") {
- parsedProxyHostname = parsedProxyHostname.slice(1);
+ function checkFinished() {
+ if (nends === 0 && finished && !boy._done) {
+ finished = false;
+ self2.end();
+ }
+ }
+ if (typeof boundary !== "string") {
+ throw new Error("Multipart: Boundary not found");
+ }
+ const fieldSizeLimit = getLimit(limits, "fieldSize", 1 * 1024 * 1024);
+ const fileSizeLimit = getLimit(limits, "fileSize", Infinity);
+ const filesLimit = getLimit(limits, "files", Infinity);
+ const fieldsLimit = getLimit(limits, "fields", Infinity);
+ const partsLimit = getLimit(limits, "parts", Infinity);
+ const headerPairsLimit = getLimit(limits, "headerPairs", 2e3);
+ const headerSizeLimit = getLimit(limits, "headerSize", 80 * 1024);
+ let nfiles = 0;
+ let nfields = 0;
+ let nends = 0;
+ let curFile;
+ let curField;
+ let finished = false;
+ this._needDrain = false;
+ this._pause = false;
+ this._cb = void 0;
+ this._nparts = 0;
+ this._boy = boy;
+ const parserCfg = {
+ boundary,
+ maxHeaderPairs: headerPairsLimit,
+ maxHeaderSize: headerSizeLimit,
+ partHwm: fileOpts.highWaterMark,
+ highWaterMark: cfg.highWaterMark
+ };
+ this.parser = new Dicer(parserCfg);
+ this.parser.on("drain", function() {
+ self2._needDrain = false;
+ if (self2._cb && !self2._pause) {
+ const cb = self2._cb;
+ self2._cb = void 0;
+ cb();
}
- return !stringEndsWith.call(hostname, parsedProxyHostname);
+ }).on("part", function onPart(part) {
+ if (++self2._nparts > partsLimit) {
+ self2.parser.removeListener("part", onPart);
+ self2.parser.on("part", skipPart);
+ boy.hitPartsLimit = true;
+ boy.emit("partsLimit");
+ return skipPart(part);
+ }
+ if (curField) {
+ const field = curField;
+ field.emit("end");
+ field.removeAllListeners("end");
+ }
+ part.on("header", function(header) {
+ let contype;
+ let fieldname;
+ let parsed;
+ let charset;
+ let encoding;
+ let filename;
+ let nsize = 0;
+ if (header["content-type"]) {
+ parsed = parseParams(header["content-type"][0]);
+ if (parsed[0]) {
+ contype = parsed[0].toLowerCase();
+ for (i = 0, len = parsed.length; i < len; ++i) {
+ if (RE_CHARSET.test(parsed[i][0])) {
+ charset = parsed[i][1].toLowerCase();
+ break;
+ }
+ }
+ }
+ }
+ if (contype === void 0) {
+ contype = "text/plain";
+ }
+ if (charset === void 0) {
+ charset = defCharset;
+ }
+ if (header["content-disposition"]) {
+ parsed = parseParams(header["content-disposition"][0]);
+ if (!RE_FIELD.test(parsed[0])) {
+ return skipPart(part);
+ }
+ for (i = 0, len = parsed.length; i < len; ++i) {
+ if (RE_NAME.test(parsed[i][0])) {
+ fieldname = parsed[i][1];
+ } else if (RE_FILENAME.test(parsed[i][0])) {
+ filename = parsed[i][1];
+ if (!preservePath) {
+ filename = basename(filename);
+ }
+ }
+ }
+ } else {
+ return skipPart(part);
+ }
+ if (header["content-transfer-encoding"]) {
+ encoding = header["content-transfer-encoding"][0].toLowerCase();
+ } else {
+ encoding = "7bit";
+ }
+ let onData, onEnd;
+ if (isPartAFile(fieldname, contype, filename)) {
+ if (nfiles === filesLimit) {
+ if (!boy.hitFilesLimit) {
+ boy.hitFilesLimit = true;
+ boy.emit("filesLimit");
+ }
+ return skipPart(part);
+ }
+ ++nfiles;
+ if (!boy._events.file) {
+ self2.parser._ignore();
+ return;
+ }
+ ++nends;
+ const file = new FileStream(fileOpts);
+ curFile = file;
+ file.on("end", function() {
+ --nends;
+ self2._pause = false;
+ checkFinished();
+ if (self2._cb && !self2._needDrain) {
+ const cb = self2._cb;
+ self2._cb = void 0;
+ cb();
+ }
+ });
+ file._read = function(n) {
+ if (!self2._pause) {
+ return;
+ }
+ self2._pause = false;
+ if (self2._cb && !self2._needDrain) {
+ const cb = self2._cb;
+ self2._cb = void 0;
+ cb();
+ }
+ };
+ boy.emit("file", fieldname, file, filename, encoding, contype);
+ onData = function(data) {
+ if ((nsize += data.length) > fileSizeLimit) {
+ const extralen = fileSizeLimit - nsize + data.length;
+ if (extralen > 0) {
+ file.push(data.slice(0, extralen));
+ }
+ file.truncated = true;
+ file.bytesRead = fileSizeLimit;
+ part.removeAllListeners("data");
+ file.emit("limit");
+ return;
+ } else if (!file.push(data)) {
+ self2._pause = true;
+ }
+ file.bytesRead = nsize;
+ };
+ onEnd = function() {
+ curFile = void 0;
+ file.push(null);
+ };
+ } else {
+ if (nfields === fieldsLimit) {
+ if (!boy.hitFieldsLimit) {
+ boy.hitFieldsLimit = true;
+ boy.emit("fieldsLimit");
+ }
+ return skipPart(part);
+ }
+ ++nfields;
+ ++nends;
+ let buffer = "";
+ let truncated = false;
+ curField = part;
+ onData = function(data) {
+ if ((nsize += data.length) > fieldSizeLimit) {
+ const extralen = fieldSizeLimit - (nsize - data.length);
+ buffer += data.toString("binary", 0, extralen);
+ truncated = true;
+ part.removeAllListeners("data");
+ } else {
+ buffer += data.toString("binary");
+ }
+ };
+ onEnd = function() {
+ curField = void 0;
+ if (buffer.length) {
+ buffer = decodeText(buffer, "binary", charset);
+ }
+ boy.emit("field", fieldname, buffer, false, truncated, encoding, contype);
+ --nends;
+ checkFinished();
+ };
+ }
+ part._readableState.sync = false;
+ part.on("data", onData);
+ part.on("end", onEnd);
+ }).on("error", function(err) {
+ if (curFile) {
+ curFile.emit("error", err);
+ }
+ });
+ }).on("error", function(err) {
+ boy.emit("error", err);
+ }).on("finish", function() {
+ finished = true;
+ checkFinished();
});
}
- function getEnv(key) {
- return process.env[key.toLowerCase()] || process.env[key.toUpperCase()] || "";
+ Multipart.prototype.write = function(chunk, cb) {
+ const r = this.parser.write(chunk);
+ if (r && !this._pause) {
+ cb();
+ } else {
+ this._needDrain = !r;
+ this._cb = cb;
+ }
+ };
+ Multipart.prototype.end = function() {
+ const self2 = this;
+ if (self2.parser.writable) {
+ self2.parser.end();
+ } else if (!self2._boy._done) {
+ process.nextTick(function() {
+ self2._boy._done = true;
+ self2._boy.emit("finish");
+ });
+ }
+ };
+ function skipPart(part) {
+ part.resume();
}
- exports.getProxyForUrl = getProxyForUrl;
+ function FileStream(opts) {
+ Readable2.call(this, opts);
+ this.bytesRead = 0;
+ this.truncated = false;
+ }
+ inherits(FileStream, Readable2);
+ FileStream.prototype._read = function(n) {
+ };
+ module2.exports = Multipart;
}
});
-// .yarn/cache/http-proxy-agent-npm-7.0.0-106a57cc8c-a11574ff39.zip/node_modules/http-proxy-agent/dist/index.js
-var require_dist2 = __commonJS({
- ".yarn/cache/http-proxy-agent-npm-7.0.0-106a57cc8c-a11574ff39.zip/node_modules/http-proxy-agent/dist/index.js"(exports) {
+// .yarn/cache/@fastify-busboy-npm-2.1.0-960844a007-7bb641080a.zip/node_modules/@fastify/busboy/lib/utils/Decoder.js
+var require_Decoder = __commonJS({
+ ".yarn/cache/@fastify-busboy-npm-2.1.0-960844a007-7bb641080a.zip/node_modules/@fastify/busboy/lib/utils/Decoder.js"(exports, module2) {
"use strict";
- var __createBinding2 = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) {
- if (k2 === void 0)
- k2 = k;
- var desc = Object.getOwnPropertyDescriptor(m, k);
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
- desc = { enumerable: true, get: function() {
- return m[k];
- } };
- }
- Object.defineProperty(o, k2, desc);
- } : function(o, m, k, k2) {
- if (k2 === void 0)
- k2 = k;
- o[k2] = m[k];
- });
- var __setModuleDefault2 = exports && exports.__setModuleDefault || (Object.create ? function(o, v) {
- Object.defineProperty(o, "default", { enumerable: true, value: v });
- } : function(o, v) {
- o["default"] = v;
- });
- var __importStar2 = exports && exports.__importStar || function(mod) {
- if (mod && mod.__esModule)
- return mod;
- var result = {};
- if (mod != null) {
- for (var k in mod)
- if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k))
- __createBinding2(result, mod, k);
- }
- __setModuleDefault2(result, mod);
- return result;
- };
- var __importDefault2 = exports && exports.__importDefault || function(mod) {
- return mod && mod.__esModule ? mod : { "default": mod };
- };
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.HttpProxyAgent = void 0;
- var net = __importStar2(require("net"));
- var tls = __importStar2(require("tls"));
- var debug_1 = __importDefault2(require_src2());
- var events_1 = require("events");
- var agent_base_1 = require_dist();
- var debug2 = (0, debug_1.default)("http-proxy-agent");
- var HttpProxyAgent = class extends agent_base_1.Agent {
- constructor(proxy, opts) {
- super(opts);
- this.proxy = typeof proxy === "string" ? new URL(proxy) : proxy;
- this.proxyHeaders = opts?.headers ?? {};
- debug2("Creating new HttpProxyAgent instance: %o", this.proxy.href);
- const host = (this.proxy.hostname || this.proxy.host).replace(/^\[|\]$/g, "");
- const port = this.proxy.port ? parseInt(this.proxy.port, 10) : this.proxy.protocol === "https:" ? 443 : 80;
- this.connectOpts = {
- ...opts ? omit(opts, "headers") : null,
- host,
- port
- };
- }
- addRequest(req, opts) {
- req._header = null;
- this.setRequestProps(req, opts);
- super.addRequest(req, opts);
- }
- setRequestProps(req, opts) {
- const { proxy } = this;
- const protocol = opts.secureEndpoint ? "https:" : "http:";
- const hostname = req.getHeader("host") || "localhost";
- const base = `${protocol}//${hostname}`;
- const url = new URL(req.path, base);
- if (opts.port !== 80) {
- url.port = String(opts.port);
- }
- req.path = String(url);
- const headers = typeof this.proxyHeaders === "function" ? this.proxyHeaders() : { ...this.proxyHeaders };
- if (proxy.username || proxy.password) {
- const auth = `${decodeURIComponent(proxy.username)}:${decodeURIComponent(proxy.password)}`;
- headers["Proxy-Authorization"] = `Basic ${Buffer.from(auth).toString("base64")}`;
- }
- if (!headers["Proxy-Connection"]) {
- headers["Proxy-Connection"] = this.keepAlive ? "Keep-Alive" : "close";
- }
- for (const name of Object.keys(headers)) {
- const value = headers[name];
- if (value) {
- req.setHeader(name, value);
+ var RE_PLUS = /\+/g;
+ var HEX = [
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0
+ ];
+ function Decoder() {
+ this.buffer = void 0;
+ }
+ Decoder.prototype.write = function(str) {
+ str = str.replace(RE_PLUS, " ");
+ let res = "";
+ let i = 0;
+ let p = 0;
+ const len = str.length;
+ for (; i < len; ++i) {
+ if (this.buffer !== void 0) {
+ if (!HEX[str.charCodeAt(i)]) {
+ res += "%" + this.buffer;
+ this.buffer = void 0;
+ --i;
+ } else {
+ this.buffer += str[i];
+ ++p;
+ if (this.buffer.length === 2) {
+ res += String.fromCharCode(parseInt(this.buffer, 16));
+ this.buffer = void 0;
+ }
}
+ } else if (str[i] === "%") {
+ if (i > p) {
+ res += str.substring(p, i);
+ p = i;
+ }
+ this.buffer = "";
+ ++p;
}
}
- async connect(req, opts) {
- req._header = null;
- if (!req.path.includes("://")) {
- this.setRequestProps(req, opts);
- }
- let first;
- let endOfHeaders;
- debug2("Regenerating stored HTTP header string for request");
- req._implicitHeader();
- if (req.outputData && req.outputData.length > 0) {
- debug2("Patching connection write() output buffer with updated header");
- first = req.outputData[0].data;
- endOfHeaders = first.indexOf("\r\n\r\n") + 4;
- req.outputData[0].data = req._header + first.substring(endOfHeaders);
- debug2("Output buffer: %o", req.outputData[0].data);
- }
- let socket;
- if (this.proxy.protocol === "https:") {
- debug2("Creating `tls.Socket`: %o", this.connectOpts);
- socket = tls.connect(this.connectOpts);
- } else {
- debug2("Creating `net.Socket`: %o", this.connectOpts);
- socket = net.connect(this.connectOpts);
- }
- await (0, events_1.once)(socket, "connect");
- return socket;
+ if (p < len && this.buffer === void 0) {
+ res += str.substring(p);
}
+ return res;
};
- HttpProxyAgent.protocols = ["http", "https"];
- exports.HttpProxyAgent = HttpProxyAgent;
- function omit(obj, ...keys) {
- const ret = {};
- let key;
- for (key in obj) {
- if (!keys.includes(key)) {
- ret[key] = obj[key];
- }
- }
- return ret;
- }
+ Decoder.prototype.reset = function() {
+ this.buffer = void 0;
+ };
+ module2.exports = Decoder;
}
});
-// .yarn/cache/https-proxy-agent-npm-7.0.2-83ea6a5d42-7735eb9007.zip/node_modules/https-proxy-agent/dist/parse-proxy-response.js
-var require_parse_proxy_response = __commonJS({
- ".yarn/cache/https-proxy-agent-npm-7.0.2-83ea6a5d42-7735eb9007.zip/node_modules/https-proxy-agent/dist/parse-proxy-response.js"(exports) {
+// .yarn/cache/@fastify-busboy-npm-2.1.0-960844a007-7bb641080a.zip/node_modules/@fastify/busboy/lib/types/urlencoded.js
+var require_urlencoded = __commonJS({
+ ".yarn/cache/@fastify-busboy-npm-2.1.0-960844a007-7bb641080a.zip/node_modules/@fastify/busboy/lib/types/urlencoded.js"(exports, module2) {
"use strict";
- var __importDefault2 = exports && exports.__importDefault || function(mod) {
- return mod && mod.__esModule ? mod : { "default": mod };
- };
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.parseProxyResponse = void 0;
- var debug_1 = __importDefault2(require_src2());
- var debug2 = (0, debug_1.default)("https-proxy-agent:parse-proxy-response");
- function parseProxyResponse(socket) {
- return new Promise((resolve, reject) => {
- let buffersLength = 0;
- const buffers = [];
- function read() {
- const b = socket.read();
- if (b)
- ondata(b);
- else
- socket.once("readable", read);
- }
- function cleanup() {
- socket.removeListener("end", onend);
- socket.removeListener("error", onerror);
- socket.removeListener("readable", read);
- }
- function onend() {
- cleanup();
- debug2("onend");
- reject(new Error("Proxy connection ended before receiving CONNECT response"));
- }
- function onerror(err) {
- cleanup();
- debug2("onerror %o", err);
- reject(err);
- }
- function ondata(b) {
- buffers.push(b);
- buffersLength += b.length;
- const buffered = Buffer.concat(buffers, buffersLength);
- const endOfHeaders = buffered.indexOf("\r\n\r\n");
- if (endOfHeaders === -1) {
- debug2("have not received end of HTTP headers yet...");
- read();
- return;
- }
- const headerParts = buffered.slice(0, endOfHeaders).toString("ascii").split("\r\n");
- const firstLine = headerParts.shift();
- if (!firstLine) {
- socket.destroy();
- return reject(new Error("No header received from proxy CONNECT response"));
- }
- const firstLineParts = firstLine.split(" ");
- const statusCode = +firstLineParts[1];
- const statusText = firstLineParts.slice(2).join(" ");
- const headers = {};
- for (const header of headerParts) {
- if (!header)
- continue;
- const firstColon = header.indexOf(":");
- if (firstColon === -1) {
- socket.destroy();
- return reject(new Error(`Invalid header from proxy CONNECT response: "${header}"`));
+ var Decoder = require_Decoder();
+ var decodeText = require_decodeText();
+ var getLimit = require_getLimit();
+ var RE_CHARSET = /^charset$/i;
+ UrlEncoded.detect = /^application\/x-www-form-urlencoded/i;
+ function UrlEncoded(boy, cfg) {
+ const limits = cfg.limits;
+ const parsedConType = cfg.parsedConType;
+ this.boy = boy;
+ this.fieldSizeLimit = getLimit(limits, "fieldSize", 1 * 1024 * 1024);
+ this.fieldNameSizeLimit = getLimit(limits, "fieldNameSize", 100);
+ this.fieldsLimit = getLimit(limits, "fields", Infinity);
+ let charset;
+ for (var i = 0, len = parsedConType.length; i < len; ++i) {
+ if (Array.isArray(parsedConType[i]) && RE_CHARSET.test(parsedConType[i][0])) {
+ charset = parsedConType[i][1].toLowerCase();
+ break;
+ }
+ }
+ if (charset === void 0) {
+ charset = cfg.defCharset || "utf8";
+ }
+ this.decoder = new Decoder();
+ this.charset = charset;
+ this._fields = 0;
+ this._state = "key";
+ this._checkingBytes = true;
+ this._bytesKey = 0;
+ this._bytesVal = 0;
+ this._key = "";
+ this._val = "";
+ this._keyTrunc = false;
+ this._valTrunc = false;
+ this._hitLimit = false;
+ }
+ UrlEncoded.prototype.write = function(data, cb) {
+ if (this._fields === this.fieldsLimit) {
+ if (!this.boy.hitFieldsLimit) {
+ this.boy.hitFieldsLimit = true;
+ this.boy.emit("fieldsLimit");
+ }
+ return cb();
+ }
+ let idxeq;
+ let idxamp;
+ let i;
+ let p = 0;
+ const len = data.length;
+ while (p < len) {
+ if (this._state === "key") {
+ idxeq = idxamp = void 0;
+ for (i = p; i < len; ++i) {
+ if (!this._checkingBytes) {
+ ++p;
+ }
+ if (data[i] === 61) {
+ idxeq = i;
+ break;
+ } else if (data[i] === 38) {
+ idxamp = i;
+ break;
}
- const key = header.slice(0, firstColon).toLowerCase();
- const value = header.slice(firstColon + 1).trimStart();
- const current = headers[key];
- if (typeof current === "string") {
- headers[key] = [current, value];
- } else if (Array.isArray(current)) {
- current.push(value);
+ if (this._checkingBytes && this._bytesKey === this.fieldNameSizeLimit) {
+ this._hitLimit = true;
+ break;
+ } else if (this._checkingBytes) {
+ ++this._bytesKey;
+ }
+ }
+ if (idxeq !== void 0) {
+ if (idxeq > p) {
+ this._key += this.decoder.write(data.toString("binary", p, idxeq));
+ }
+ this._state = "val";
+ this._hitLimit = false;
+ this._checkingBytes = true;
+ this._val = "";
+ this._bytesVal = 0;
+ this._valTrunc = false;
+ this.decoder.reset();
+ p = idxeq + 1;
+ } else if (idxamp !== void 0) {
+ ++this._fields;
+ let key;
+ const keyTrunc = this._keyTrunc;
+ if (idxamp > p) {
+ key = this._key += this.decoder.write(data.toString("binary", p, idxamp));
} else {
- headers[key] = value;
+ key = this._key;
+ }
+ this._hitLimit = false;
+ this._checkingBytes = true;
+ this._key = "";
+ this._bytesKey = 0;
+ this._keyTrunc = false;
+ this.decoder.reset();
+ if (key.length) {
+ this.boy.emit(
+ "field",
+ decodeText(key, "binary", this.charset),
+ "",
+ keyTrunc,
+ false
+ );
}
+ p = idxamp + 1;
+ if (this._fields === this.fieldsLimit) {
+ return cb();
+ }
+ } else if (this._hitLimit) {
+ if (i > p) {
+ this._key += this.decoder.write(data.toString("binary", p, i));
+ }
+ p = i;
+ if ((this._bytesKey = this._key.length) === this.fieldNameSizeLimit) {
+ this._checkingBytes = false;
+ this._keyTrunc = true;
+ }
+ } else {
+ if (p < len) {
+ this._key += this.decoder.write(data.toString("binary", p));
+ }
+ p = len;
}
- debug2("got proxy server response: %o %o", firstLine, headers);
- cleanup();
- resolve({
- connect: {
- statusCode,
- statusText,
- headers
- },
- buffered
- });
- }
- socket.on("error", onerror);
- socket.on("end", onend);
- read();
- });
- }
- exports.parseProxyResponse = parseProxyResponse;
- }
-});
-
-// .yarn/cache/https-proxy-agent-npm-7.0.2-83ea6a5d42-7735eb9007.zip/node_modules/https-proxy-agent/dist/index.js
-var require_dist3 = __commonJS({
- ".yarn/cache/https-proxy-agent-npm-7.0.2-83ea6a5d42-7735eb9007.zip/node_modules/https-proxy-agent/dist/index.js"(exports) {
- "use strict";
- var __createBinding2 = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) {
- if (k2 === void 0)
- k2 = k;
- var desc = Object.getOwnPropertyDescriptor(m, k);
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
- desc = { enumerable: true, get: function() {
- return m[k];
- } };
- }
- Object.defineProperty(o, k2, desc);
- } : function(o, m, k, k2) {
- if (k2 === void 0)
- k2 = k;
- o[k2] = m[k];
- });
- var __setModuleDefault2 = exports && exports.__setModuleDefault || (Object.create ? function(o, v) {
- Object.defineProperty(o, "default", { enumerable: true, value: v });
- } : function(o, v) {
- o["default"] = v;
- });
- var __importStar2 = exports && exports.__importStar || function(mod) {
- if (mod && mod.__esModule)
- return mod;
- var result = {};
- if (mod != null) {
- for (var k in mod)
- if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k))
- __createBinding2(result, mod, k);
- }
- __setModuleDefault2(result, mod);
- return result;
- };
- var __importDefault2 = exports && exports.__importDefault || function(mod) {
- return mod && mod.__esModule ? mod : { "default": mod };
- };
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.HttpsProxyAgent = void 0;
- var net = __importStar2(require("net"));
- var tls = __importStar2(require("tls"));
- var assert_1 = __importDefault2(require("assert"));
- var debug_1 = __importDefault2(require_src2());
- var agent_base_1 = require_dist();
- var parse_proxy_response_1 = require_parse_proxy_response();
- var debug2 = (0, debug_1.default)("https-proxy-agent");
- var HttpsProxyAgent = class extends agent_base_1.Agent {
- constructor(proxy, opts) {
- super(opts);
- this.options = { path: void 0 };
- this.proxy = typeof proxy === "string" ? new URL(proxy) : proxy;
- this.proxyHeaders = opts?.headers ?? {};
- debug2("Creating new HttpsProxyAgent instance: %o", this.proxy.href);
- const host = (this.proxy.hostname || this.proxy.host).replace(/^\[|\]$/g, "");
- const port = this.proxy.port ? parseInt(this.proxy.port, 10) : this.proxy.protocol === "https:" ? 443 : 80;
- this.connectOpts = {
- // Attempt to negotiate http/1.1 for proxy servers that support http/2
- ALPNProtocols: ["http/1.1"],
- ...opts ? omit(opts, "headers") : null,
- host,
- port
- };
- }
- /**
- * Called when the node-core HTTP client library is creating a
- * new HTTP request.
- */
- async connect(req, opts) {
- const { proxy } = this;
- if (!opts.host) {
- throw new TypeError('No "host" provided');
- }
- let socket;
- if (proxy.protocol === "https:") {
- debug2("Creating `tls.Socket`: %o", this.connectOpts);
- const servername = this.connectOpts.servername || this.connectOpts.host;
- socket = tls.connect({
- ...this.connectOpts,
- servername: servername && net.isIP(servername) ? void 0 : servername
- });
} else {
- debug2("Creating `net.Socket`: %o", this.connectOpts);
- socket = net.connect(this.connectOpts);
- }
- const headers = typeof this.proxyHeaders === "function" ? this.proxyHeaders() : { ...this.proxyHeaders };
- const host = net.isIPv6(opts.host) ? `[${opts.host}]` : opts.host;
- let payload = `CONNECT ${host}:${opts.port} HTTP/1.1\r
-`;
- if (proxy.username || proxy.password) {
- const auth = `${decodeURIComponent(proxy.username)}:${decodeURIComponent(proxy.password)}`;
- headers["Proxy-Authorization"] = `Basic ${Buffer.from(auth).toString("base64")}`;
- }
- headers.Host = `${host}:${opts.port}`;
- if (!headers["Proxy-Connection"]) {
- headers["Proxy-Connection"] = this.keepAlive ? "Keep-Alive" : "close";
- }
- for (const name of Object.keys(headers)) {
- payload += `${name}: ${headers[name]}\r
-`;
- }
- const proxyResponsePromise = (0, parse_proxy_response_1.parseProxyResponse)(socket);
- socket.write(`${payload}\r
-`);
- const { connect, buffered } = await proxyResponsePromise;
- req.emit("proxyConnect", connect);
- this.emit("proxyConnect", connect, req);
- if (connect.statusCode === 200) {
- req.once("socket", resume);
- if (opts.secureEndpoint) {
- debug2("Upgrading socket connection to TLS");
- const servername = opts.servername || opts.host;
- return tls.connect({
- ...omit(opts, "host", "path", "port"),
- socket,
- servername: net.isIP(servername) ? void 0 : servername
- });
+ idxamp = void 0;
+ for (i = p; i < len; ++i) {
+ if (!this._checkingBytes) {
+ ++p;
+ }
+ if (data[i] === 38) {
+ idxamp = i;
+ break;
+ }
+ if (this._checkingBytes && this._bytesVal === this.fieldSizeLimit) {
+ this._hitLimit = true;
+ break;
+ } else if (this._checkingBytes) {
+ ++this._bytesVal;
+ }
+ }
+ if (idxamp !== void 0) {
+ ++this._fields;
+ if (idxamp > p) {
+ this._val += this.decoder.write(data.toString("binary", p, idxamp));
+ }
+ this.boy.emit(
+ "field",
+ decodeText(this._key, "binary", this.charset),
+ decodeText(this._val, "binary", this.charset),
+ this._keyTrunc,
+ this._valTrunc
+ );
+ this._state = "key";
+ this._hitLimit = false;
+ this._checkingBytes = true;
+ this._key = "";
+ this._bytesKey = 0;
+ this._keyTrunc = false;
+ this.decoder.reset();
+ p = idxamp + 1;
+ if (this._fields === this.fieldsLimit) {
+ return cb();
+ }
+ } else if (this._hitLimit) {
+ if (i > p) {
+ this._val += this.decoder.write(data.toString("binary", p, i));
+ }
+ p = i;
+ if (this._val === "" && this.fieldSizeLimit === 0 || (this._bytesVal = this._val.length) === this.fieldSizeLimit) {
+ this._checkingBytes = false;
+ this._valTrunc = true;
+ }
+ } else {
+ if (p < len) {
+ this._val += this.decoder.write(data.toString("binary", p));
+ }
+ p = len;
}
- return socket;
}
- socket.destroy();
- const fakeSocket = new net.Socket({ writable: false });
- fakeSocket.readable = true;
- req.once("socket", (s) => {
- debug2("Replaying proxy buffer for failed request");
- (0, assert_1.default)(s.listenerCount("data") > 0);
- s.push(buffered);
- s.push(null);
- });
- return fakeSocket;
}
+ cb();
};
- HttpsProxyAgent.protocols = ["http", "https"];
- exports.HttpsProxyAgent = HttpsProxyAgent;
- function resume(socket) {
- socket.resume();
- }
- function omit(obj, ...keys) {
- const ret = {};
- let key;
- for (key in obj) {
- if (!keys.includes(key)) {
- ret[key] = obj[key];
- }
+ UrlEncoded.prototype.end = function() {
+ if (this.boy._done) {
+ return;
}
- return ret;
- }
+ if (this._state === "key" && this._key.length > 0) {
+ this.boy.emit(
+ "field",
+ decodeText(this._key, "binary", this.charset),
+ "",
+ this._keyTrunc,
+ false
+ );
+ } else if (this._state === "val") {
+ this.boy.emit(
+ "field",
+ decodeText(this._key, "binary", this.charset),
+ decodeText(this._val, "binary", this.charset),
+ this._keyTrunc,
+ this._valTrunc
+ );
+ }
+ this.boy._done = true;
+ this.boy.emit("finish");
+ };
+ module2.exports = UrlEncoded;
}
});
-// .yarn/cache/ip-npm-2.0.0-204facb3cc-8d186cc558.zip/node_modules/ip/lib/ip.js
-var require_ip = __commonJS({
- ".yarn/cache/ip-npm-2.0.0-204facb3cc-8d186cc558.zip/node_modules/ip/lib/ip.js"(exports) {
- var ip = exports;
- var { Buffer: Buffer2 } = require("buffer");
- var os3 = require("os");
- ip.toBuffer = function(ip2, buff, offset) {
- offset = ~~offset;
- let result;
- if (this.isV4Format(ip2)) {
- result = buff || Buffer2.alloc(offset + 4);
- ip2.split(/\./g).map((byte) => {
- result[offset++] = parseInt(byte, 10) & 255;
- });
- } else if (this.isV6Format(ip2)) {
- const sections = ip2.split(":", 8);
- let i;
- for (i = 0; i < sections.length; i++) {
- const isv4 = this.isV4Format(sections[i]);
- let v4Buffer;
- if (isv4) {
- v4Buffer = this.toBuffer(sections[i]);
- sections[i] = v4Buffer.slice(0, 2).toString("hex");
- }
- if (v4Buffer && ++i < 8) {
- sections.splice(i, 0, v4Buffer.slice(2, 4).toString("hex"));
- }
- }
- if (sections[0] === "") {
- while (sections.length < 8)
- sections.unshift("0");
- } else if (sections[sections.length - 1] === "") {
- while (sections.length < 8)
- sections.push("0");
- } else if (sections.length < 8) {
- for (i = 0; i < sections.length && sections[i] !== ""; i++)
- ;
- const argv = [i, 1];
- for (i = 9 - sections.length; i > 0; i--) {
- argv.push("0");
- }
- sections.splice(...argv);
- }
- result = buff || Buffer2.alloc(offset + 16);
- for (i = 0; i < sections.length; i++) {
- const word = parseInt(sections[i], 16);
- result[offset++] = word >> 8 & 255;
- result[offset++] = word & 255;
- }
- }
- if (!result) {
- throw Error(`Invalid ip address: ${ip2}`);
+// .yarn/cache/@fastify-busboy-npm-2.1.0-960844a007-7bb641080a.zip/node_modules/@fastify/busboy/lib/main.js
+var require_main = __commonJS({
+ ".yarn/cache/@fastify-busboy-npm-2.1.0-960844a007-7bb641080a.zip/node_modules/@fastify/busboy/lib/main.js"(exports, module2) {
+ "use strict";
+ var WritableStream = require("node:stream").Writable;
+ var { inherits } = require("node:util");
+ var Dicer = require_Dicer();
+ var MultipartParser = require_multipart();
+ var UrlencodedParser = require_urlencoded();
+ var parseParams = require_parseParams();
+ function Busboy(opts) {
+ if (!(this instanceof Busboy)) {
+ return new Busboy(opts);
}
- return result;
- };
- ip.toString = function(buff, offset, length) {
- offset = ~~offset;
- length = length || buff.length - offset;
- let result = [];
- if (length === 4) {
- for (let i = 0; i < length; i++) {
- result.push(buff[offset + i]);
- }
- result = result.join(".");
- } else if (length === 16) {
- for (let i = 0; i < length; i += 2) {
- result.push(buff.readUInt16BE(offset + i).toString(16));
+ if (typeof opts !== "object") {
+ throw new TypeError("Busboy expected an options-Object.");
+ }
+ if (typeof opts.headers !== "object") {
+ throw new TypeError("Busboy expected an options-Object with headers-attribute.");
+ }
+ if (typeof opts.headers["content-type"] !== "string") {
+ throw new TypeError("Missing Content-Type-header.");
+ }
+ const {
+ headers,
+ ...streamOptions
+ } = opts;
+ this.opts = {
+ autoDestroy: false,
+ ...streamOptions
+ };
+ WritableStream.call(this, this.opts);
+ this._done = false;
+ this._parser = this.getParserByHeaders(headers);
+ this._finished = false;
+ }
+ inherits(Busboy, WritableStream);
+ Busboy.prototype.emit = function(ev) {
+ if (ev === "finish") {
+ if (!this._done) {
+ this._parser?.end();
+ return;
+ } else if (this._finished) {
+ return;
}
- result = result.join(":");
- result = result.replace(/(^|:)0(:0)*:0(:|$)/, "$1::$3");
- result = result.replace(/:{3,4}/, "::");
+ this._finished = true;
+ }
+ WritableStream.prototype.emit.apply(this, arguments);
+ };
+ Busboy.prototype.getParserByHeaders = function(headers) {
+ const parsed = parseParams(headers["content-type"]);
+ const cfg = {
+ defCharset: this.opts.defCharset,
+ fileHwm: this.opts.fileHwm,
+ headers,
+ highWaterMark: this.opts.highWaterMark,
+ isPartAFile: this.opts.isPartAFile,
+ limits: this.opts.limits,
+ parsedConType: parsed,
+ preservePath: this.opts.preservePath
+ };
+ if (MultipartParser.detect.test(parsed[0])) {
+ return new MultipartParser(this, cfg);
}
- return result;
+ if (UrlencodedParser.detect.test(parsed[0])) {
+ return new UrlencodedParser(this, cfg);
+ }
+ throw new Error("Unsupported Content-Type.");
};
- var ipv4Regex = /^(\d{1,3}\.){3,3}\d{1,3}$/;
- var ipv6Regex = /^(::)?(((\d{1,3}\.){3}(\d{1,3}){1})?([0-9a-f]){0,4}:{0,2}){1,8}(::)?$/i;
- ip.isV4Format = function(ip2) {
- return ipv4Regex.test(ip2);
+ Busboy.prototype._write = function(chunk, encoding, cb) {
+ this._parser.write(chunk, cb);
};
- ip.isV6Format = function(ip2) {
- return ipv6Regex.test(ip2);
- };
- function _normalizeFamily(family) {
- if (family === 4) {
- return "ipv4";
+ module2.exports = Busboy;
+ module2.exports.default = Busboy;
+ module2.exports.Busboy = Busboy;
+ module2.exports.Dicer = Dicer;
+ }
+});
+
+// .yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/fetch/constants.js
+var require_constants3 = __commonJS({
+ ".yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/fetch/constants.js"(exports, module2) {
+ "use strict";
+ var corsSafeListedMethods = ["GET", "HEAD", "POST"];
+ var corsSafeListedMethodsSet = new Set(corsSafeListedMethods);
+ var nullBodyStatus = [101, 204, 205, 304];
+ var redirectStatus = [301, 302, 303, 307, 308];
+ var redirectStatusSet = new Set(redirectStatus);
+ var badPorts = [
+ "1",
+ "7",
+ "9",
+ "11",
+ "13",
+ "15",
+ "17",
+ "19",
+ "20",
+ "21",
+ "22",
+ "23",
+ "25",
+ "37",
+ "42",
+ "43",
+ "53",
+ "69",
+ "77",
+ "79",
+ "87",
+ "95",
+ "101",
+ "102",
+ "103",
+ "104",
+ "109",
+ "110",
+ "111",
+ "113",
+ "115",
+ "117",
+ "119",
+ "123",
+ "135",
+ "137",
+ "139",
+ "143",
+ "161",
+ "179",
+ "389",
+ "427",
+ "465",
+ "512",
+ "513",
+ "514",
+ "515",
+ "526",
+ "530",
+ "531",
+ "532",
+ "540",
+ "548",
+ "554",
+ "556",
+ "563",
+ "587",
+ "601",
+ "636",
+ "989",
+ "990",
+ "993",
+ "995",
+ "1719",
+ "1720",
+ "1723",
+ "2049",
+ "3659",
+ "4045",
+ "5060",
+ "5061",
+ "6000",
+ "6566",
+ "6665",
+ "6666",
+ "6667",
+ "6668",
+ "6669",
+ "6697",
+ "10080"
+ ];
+ var badPortsSet = new Set(badPorts);
+ var referrerPolicy = [
+ "",
+ "no-referrer",
+ "no-referrer-when-downgrade",
+ "same-origin",
+ "origin",
+ "strict-origin",
+ "origin-when-cross-origin",
+ "strict-origin-when-cross-origin",
+ "unsafe-url"
+ ];
+ var referrerPolicySet = new Set(referrerPolicy);
+ var requestRedirect = ["follow", "manual", "error"];
+ var safeMethods = ["GET", "HEAD", "OPTIONS", "TRACE"];
+ var safeMethodsSet = new Set(safeMethods);
+ var requestMode = ["navigate", "same-origin", "no-cors", "cors"];
+ var requestCredentials = ["omit", "same-origin", "include"];
+ var requestCache = [
+ "default",
+ "no-store",
+ "reload",
+ "no-cache",
+ "force-cache",
+ "only-if-cached"
+ ];
+ var requestBodyHeader = [
+ "content-encoding",
+ "content-language",
+ "content-location",
+ "content-type",
+ // See https://github.com/nodejs/undici/issues/2021
+ // 'Content-Length' is a forbidden header name, which is typically
+ // removed in the Headers implementation. However, undici doesn't
+ // filter out headers, so we add it here.
+ "content-length"
+ ];
+ var requestDuplex = [
+ "half"
+ ];
+ var forbiddenMethods = ["CONNECT", "TRACE", "TRACK"];
+ var forbiddenMethodsSet = new Set(forbiddenMethods);
+ var subresource = [
+ "audio",
+ "audioworklet",
+ "font",
+ "image",
+ "manifest",
+ "paintworklet",
+ "script",
+ "style",
+ "track",
+ "video",
+ "xslt",
+ ""
+ ];
+ var subresourceSet = new Set(subresource);
+ module2.exports = {
+ subresource,
+ forbiddenMethods,
+ requestBodyHeader,
+ referrerPolicy,
+ requestRedirect,
+ requestMode,
+ requestCredentials,
+ requestCache,
+ redirectStatus,
+ corsSafeListedMethods,
+ nullBodyStatus,
+ safeMethods,
+ badPorts,
+ requestDuplex,
+ subresourceSet,
+ badPortsSet,
+ redirectStatusSet,
+ corsSafeListedMethodsSet,
+ safeMethodsSet,
+ forbiddenMethodsSet,
+ referrerPolicySet
+ };
+ }
+});
+
+// .yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/fetch/global.js
+var require_global = __commonJS({
+ ".yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/fetch/global.js"(exports, module2) {
+ "use strict";
+ var globalOrigin = Symbol.for("undici.globalOrigin.1");
+ function getGlobalOrigin() {
+ return globalThis[globalOrigin];
+ }
+ function setGlobalOrigin(newOrigin) {
+ if (newOrigin === void 0) {
+ Object.defineProperty(globalThis, globalOrigin, {
+ value: void 0,
+ writable: true,
+ enumerable: false,
+ configurable: false
+ });
+ return;
}
- if (family === 6) {
- return "ipv6";
+ const parsedURL = new URL(newOrigin);
+ if (parsedURL.protocol !== "http:" && parsedURL.protocol !== "https:") {
+ throw new TypeError(`Only http & https urls are allowed, received ${parsedURL.protocol}`);
}
- return family ? family.toLowerCase() : "ipv4";
+ Object.defineProperty(globalThis, globalOrigin, {
+ value: parsedURL,
+ writable: true,
+ enumerable: false,
+ configurable: false
+ });
}
- ip.fromPrefixLen = function(prefixlen, family) {
- if (prefixlen > 32) {
- family = "ipv6";
- } else {
- family = _normalizeFamily(family);
+ module2.exports = {
+ getGlobalOrigin,
+ setGlobalOrigin
+ };
+ }
+});
+
+// .yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/fetch/dataURL.js
+var require_dataURL = __commonJS({
+ ".yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/fetch/dataURL.js"(exports, module2) {
+ var assert3 = require("node:assert");
+ var encoder = new TextEncoder();
+ var HTTP_TOKEN_CODEPOINTS = /^[!#$%&'*+-.^_|~A-Za-z0-9]+$/;
+ var HTTP_WHITESPACE_REGEX = /[\u000A|\u000D|\u0009|\u0020]/;
+ var ASCII_WHITESPACE_REPLACE_REGEX = /[\u0009\u000A\u000C\u000D\u0020]/g;
+ var HTTP_QUOTED_STRING_TOKENS = /[\u0009|\u0020-\u007E|\u0080-\u00FF]/;
+ function dataURLProcessor(dataURL) {
+ assert3(dataURL.protocol === "data:");
+ let input = URLSerializer(dataURL, true);
+ input = input.slice(5);
+ const position = { position: 0 };
+ let mimeType = collectASequenceOfCodePointsFast(
+ ",",
+ input,
+ position
+ );
+ const mimeTypeLength = mimeType.length;
+ mimeType = removeASCIIWhitespace(mimeType, true, true);
+ if (position.position >= input.length) {
+ return "failure";
+ }
+ position.position++;
+ const encodedBody = input.slice(mimeTypeLength + 1);
+ let body = stringPercentDecode(encodedBody);
+ if (/;(\u0020){0,}base64$/i.test(mimeType)) {
+ const stringBody = isomorphicDecode(body);
+ body = forgivingBase64(stringBody);
+ if (body === "failure") {
+ return "failure";
+ }
+ mimeType = mimeType.slice(0, -6);
+ mimeType = mimeType.replace(/(\u0020)+$/, "");
+ mimeType = mimeType.slice(0, -1);
+ }
+ if (mimeType.startsWith(";")) {
+ mimeType = "text/plain" + mimeType;
+ }
+ let mimeTypeRecord = parseMIMEType(mimeType);
+ if (mimeTypeRecord === "failure") {
+ mimeTypeRecord = parseMIMEType("text/plain;charset=US-ASCII");
+ }
+ return { mimeType: mimeTypeRecord, body };
+ }
+ function URLSerializer(url, excludeFragment = false) {
+ if (!excludeFragment) {
+ return url.href;
+ }
+ const href = url.href;
+ const hashLength = url.hash.length;
+ const serialized = hashLength === 0 ? href : href.substring(0, href.length - hashLength);
+ if (!hashLength && href.endsWith("#")) {
+ return serialized.slice(0, -1);
+ }
+ return serialized;
+ }
+ function collectASequenceOfCodePoints(condition, input, position) {
+ let result = "";
+ while (position.position < input.length && condition(input[position.position])) {
+ result += input[position.position];
+ position.position++;
}
- let len = 4;
- if (family === "ipv6") {
- len = 16;
+ return result;
+ }
+ function collectASequenceOfCodePointsFast(char, input, position) {
+ const idx = input.indexOf(char, position.position);
+ const start = position.position;
+ if (idx === -1) {
+ position.position = input.length;
+ return input.slice(start);
}
- const buff = Buffer2.alloc(len);
- for (let i = 0, n = buff.length; i < n; ++i) {
- let bits = 8;
- if (prefixlen < 8) {
- bits = prefixlen;
+ position.position = idx;
+ return input.slice(start, position.position);
+ }
+ function stringPercentDecode(input) {
+ const bytes = encoder.encode(input);
+ return percentDecode(bytes);
+ }
+ function isHexCharByte(byte) {
+ return byte >= 48 && byte <= 57 || byte >= 65 && byte <= 70 || byte >= 97 && byte <= 102;
+ }
+ function hexByteToNumber(byte) {
+ return (
+ // 0-9
+ byte >= 48 && byte <= 57 ? byte - 48 : (byte & 223) - 55
+ );
+ }
+ function percentDecode(input) {
+ const length = input.length;
+ const output = new Uint8Array(length);
+ let j = 0;
+ for (let i = 0; i < length; ++i) {
+ const byte = input[i];
+ if (byte !== 37) {
+ output[j++] = byte;
+ } else if (byte === 37 && !(isHexCharByte(input[i + 1]) && isHexCharByte(input[i + 2]))) {
+ output[j++] = 37;
+ } else {
+ output[j++] = hexByteToNumber(input[i + 1]) << 4 | hexByteToNumber(input[i + 2]);
+ i += 2;
}
- prefixlen -= bits;
- buff[i] = ~(255 >> bits) & 255;
}
- return ip.toString(buff);
- };
- ip.mask = function(addr, mask) {
- addr = ip.toBuffer(addr);
- mask = ip.toBuffer(mask);
- const result = Buffer2.alloc(Math.max(addr.length, mask.length));
- let i;
- if (addr.length === mask.length) {
- for (i = 0; i < addr.length; i++) {
- result[i] = addr[i] & mask[i];
+ return length === j ? output : output.subarray(0, j);
+ }
+ function parseMIMEType(input) {
+ input = removeHTTPWhitespace(input, true, true);
+ const position = { position: 0 };
+ const type = collectASequenceOfCodePointsFast(
+ "/",
+ input,
+ position
+ );
+ if (type.length === 0 || !HTTP_TOKEN_CODEPOINTS.test(type)) {
+ return "failure";
+ }
+ if (position.position > input.length) {
+ return "failure";
+ }
+ position.position++;
+ let subtype = collectASequenceOfCodePointsFast(
+ ";",
+ input,
+ position
+ );
+ subtype = removeHTTPWhitespace(subtype, false, true);
+ if (subtype.length === 0 || !HTTP_TOKEN_CODEPOINTS.test(subtype)) {
+ return "failure";
+ }
+ const typeLowercase = type.toLowerCase();
+ const subtypeLowercase = subtype.toLowerCase();
+ const mimeType = {
+ type: typeLowercase,
+ subtype: subtypeLowercase,
+ /** @type {Map} */
+ parameters: /* @__PURE__ */ new Map(),
+ // https://mimesniff.spec.whatwg.org/#mime-type-essence
+ essence: `${typeLowercase}/${subtypeLowercase}`
+ };
+ while (position.position < input.length) {
+ position.position++;
+ collectASequenceOfCodePoints(
+ // https://fetch.spec.whatwg.org/#http-whitespace
+ (char) => HTTP_WHITESPACE_REGEX.test(char),
+ input,
+ position
+ );
+ let parameterName = collectASequenceOfCodePoints(
+ (char) => char !== ";" && char !== "=",
+ input,
+ position
+ );
+ parameterName = parameterName.toLowerCase();
+ if (position.position < input.length) {
+ if (input[position.position] === ";") {
+ continue;
+ }
+ position.position++;
}
- } else if (mask.length === 4) {
- for (i = 0; i < mask.length; i++) {
- result[i] = addr[addr.length - 4 + i] & mask[i];
+ if (position.position > input.length) {
+ break;
}
- } else {
- for (i = 0; i < result.length - 6; i++) {
- result[i] = 0;
+ let parameterValue = null;
+ if (input[position.position] === '"') {
+ parameterValue = collectAnHTTPQuotedString(input, position, true);
+ collectASequenceOfCodePointsFast(
+ ";",
+ input,
+ position
+ );
+ } else {
+ parameterValue = collectASequenceOfCodePointsFast(
+ ";",
+ input,
+ position
+ );
+ parameterValue = removeHTTPWhitespace(parameterValue, false, true);
+ if (parameterValue.length === 0) {
+ continue;
+ }
}
- result[10] = 255;
- result[11] = 255;
- for (i = 0; i < addr.length; i++) {
- result[i + 12] = addr[i] & mask[i + 12];
+ if (parameterName.length !== 0 && HTTP_TOKEN_CODEPOINTS.test(parameterName) && (parameterValue.length === 0 || HTTP_QUOTED_STRING_TOKENS.test(parameterValue)) && !mimeType.parameters.has(parameterName)) {
+ mimeType.parameters.set(parameterName, parameterValue);
}
- i += 12;
- }
- for (; i < result.length; i++) {
- result[i] = 0;
}
- return ip.toString(result);
- };
- ip.cidr = function(cidrString) {
- const cidrParts = cidrString.split("/");
- const addr = cidrParts[0];
- if (cidrParts.length !== 2) {
- throw new Error(`invalid CIDR subnet: ${addr}`);
- }
- const mask = ip.fromPrefixLen(parseInt(cidrParts[1], 10));
- return ip.mask(addr, mask);
- };
- ip.subnet = function(addr, mask) {
- const networkAddress = ip.toLong(ip.mask(addr, mask));
- const maskBuffer = ip.toBuffer(mask);
- let maskLength = 0;
- for (let i = 0; i < maskBuffer.length; i++) {
- if (maskBuffer[i] === 255) {
- maskLength += 8;
- } else {
- let octet = maskBuffer[i] & 255;
- while (octet) {
- octet = octet << 1 & 255;
- maskLength++;
+ return mimeType;
+ }
+ function forgivingBase64(data) {
+ data = data.replace(ASCII_WHITESPACE_REPLACE_REGEX, "");
+ let dataLength = data.length;
+ if (dataLength % 4 === 0) {
+ if (data.charCodeAt(dataLength - 1) === 61) {
+ --dataLength;
+ if (data.charCodeAt(dataLength - 1) === 61) {
+ --dataLength;
}
}
}
- const numberOfAddresses = 2 ** (32 - maskLength);
- return {
- networkAddress: ip.fromLong(networkAddress),
- firstAddress: numberOfAddresses <= 2 ? ip.fromLong(networkAddress) : ip.fromLong(networkAddress + 1),
- lastAddress: numberOfAddresses <= 2 ? ip.fromLong(networkAddress + numberOfAddresses - 1) : ip.fromLong(networkAddress + numberOfAddresses - 2),
- broadcastAddress: ip.fromLong(networkAddress + numberOfAddresses - 1),
- subnetMask: mask,
- subnetMaskLength: maskLength,
- numHosts: numberOfAddresses <= 2 ? numberOfAddresses : numberOfAddresses - 2,
- length: numberOfAddresses,
- contains(other) {
- return networkAddress === ip.toLong(ip.mask(other, mask));
+ if (dataLength % 4 === 1) {
+ return "failure";
+ }
+ if (/[^+/0-9A-Za-z]/.test(data.length === dataLength ? data : data.substring(0, dataLength))) {
+ return "failure";
+ }
+ const buffer = Buffer.from(data, "base64");
+ return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);
+ }
+ function collectAnHTTPQuotedString(input, position, extractValue) {
+ const positionStart = position.position;
+ let value = "";
+ assert3(input[position.position] === '"');
+ position.position++;
+ while (true) {
+ value += collectASequenceOfCodePoints(
+ (char) => char !== '"' && char !== "\\",
+ input,
+ position
+ );
+ if (position.position >= input.length) {
+ break;
}
- };
- };
- ip.cidrSubnet = function(cidrString) {
- const cidrParts = cidrString.split("/");
- const addr = cidrParts[0];
- if (cidrParts.length !== 2) {
- throw new Error(`invalid CIDR subnet: ${addr}`);
- }
- const mask = ip.fromPrefixLen(parseInt(cidrParts[1], 10));
- return ip.subnet(addr, mask);
- };
- ip.not = function(addr) {
- const buff = ip.toBuffer(addr);
- for (let i = 0; i < buff.length; i++) {
- buff[i] = 255 ^ buff[i];
- }
- return ip.toString(buff);
- };
- ip.or = function(a, b) {
- a = ip.toBuffer(a);
- b = ip.toBuffer(b);
- if (a.length === b.length) {
- for (let i = 0; i < a.length; ++i) {
- a[i] |= b[i];
- }
- return ip.toString(a);
- }
- let buff = a;
- let other = b;
- if (b.length > a.length) {
- buff = b;
- other = a;
- }
- const offset = buff.length - other.length;
- for (let i = offset; i < buff.length; ++i) {
- buff[i] |= other[i - offset];
- }
- return ip.toString(buff);
- };
- ip.isEqual = function(a, b) {
- a = ip.toBuffer(a);
- b = ip.toBuffer(b);
- if (a.length === b.length) {
- for (let i = 0; i < a.length; i++) {
- if (a[i] !== b[i])
- return false;
+ const quoteOrBackslash = input[position.position];
+ position.position++;
+ if (quoteOrBackslash === "\\") {
+ if (position.position >= input.length) {
+ value += "\\";
+ break;
+ }
+ value += input[position.position];
+ position.position++;
+ } else {
+ assert3(quoteOrBackslash === '"');
+ break;
}
- return true;
}
- if (b.length === 4) {
- const t = b;
- b = a;
- a = t;
+ if (extractValue) {
+ return value;
}
- for (let i = 0; i < 10; i++) {
- if (b[i] !== 0)
- return false;
+ return input.slice(positionStart, position.position);
+ }
+ function serializeAMimeType(mimeType) {
+ assert3(mimeType !== "failure");
+ const { parameters, essence } = mimeType;
+ let serialization = essence;
+ for (let [name, value] of parameters.entries()) {
+ serialization += ";";
+ serialization += name;
+ serialization += "=";
+ if (!HTTP_TOKEN_CODEPOINTS.test(value)) {
+ value = value.replace(/(\\|")/g, "\\$1");
+ value = '"' + value;
+ value += '"';
+ }
+ serialization += value;
}
- const word = b.readUInt16BE(10);
- if (word !== 0 && word !== 65535)
- return false;
- for (let i = 0; i < 4; i++) {
- if (a[i] !== b[i + 12])
- return false;
+ return serialization;
+ }
+ function isHTTPWhiteSpace(char) {
+ return char === 13 || char === 10 || char === 9 || char === 32;
+ }
+ function removeHTTPWhitespace(str, leading = true, trailing = true) {
+ return removeChars(str, leading, trailing, isHTTPWhiteSpace);
+ }
+ function isASCIIWhitespace(char) {
+ return char === 13 || char === 10 || char === 9 || char === 12 || char === 32;
+ }
+ function removeASCIIWhitespace(str, leading = true, trailing = true) {
+ return removeChars(str, leading, trailing, isASCIIWhitespace);
+ }
+ function removeChars(str, leading, trailing, predicate) {
+ let lead = 0;
+ let trail = str.length - 1;
+ if (leading) {
+ while (lead < str.length && predicate(str.charCodeAt(lead)))
+ lead++;
}
- return true;
- };
- ip.isPrivate = function(addr) {
- return /^(::f{4}:)?10\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/i.test(addr) || /^(::f{4}:)?192\.168\.([0-9]{1,3})\.([0-9]{1,3})$/i.test(addr) || /^(::f{4}:)?172\.(1[6-9]|2\d|30|31)\.([0-9]{1,3})\.([0-9]{1,3})$/i.test(addr) || /^(::f{4}:)?127\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/i.test(addr) || /^(::f{4}:)?169\.254\.([0-9]{1,3})\.([0-9]{1,3})$/i.test(addr) || /^f[cd][0-9a-f]{2}:/i.test(addr) || /^fe80:/i.test(addr) || /^::1$/.test(addr) || /^::$/.test(addr);
- };
- ip.isPublic = function(addr) {
- return !ip.isPrivate(addr);
- };
- ip.isLoopback = function(addr) {
- return /^(::f{4}:)?127\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})/.test(addr) || /^fe80::1$/.test(addr) || /^::1$/.test(addr) || /^::$/.test(addr);
- };
- ip.loopback = function(family) {
- family = _normalizeFamily(family);
- if (family !== "ipv4" && family !== "ipv6") {
- throw new Error("family must be ipv4 or ipv6");
+ if (trailing) {
+ while (trail > 0 && predicate(str.charCodeAt(trail)))
+ trail--;
}
- return family === "ipv4" ? "127.0.0.1" : "fe80::1";
- };
- ip.address = function(name, family) {
- const interfaces = os3.networkInterfaces();
- family = _normalizeFamily(family);
- if (name && name !== "private" && name !== "public") {
- const res = interfaces[name].filter((details) => {
- const itemFamily = _normalizeFamily(details.family);
- return itemFamily === family;
- });
- if (res.length === 0) {
- return void 0;
+ return lead === 0 && trail === str.length - 1 ? str : str.slice(lead, trail + 1);
+ }
+ function isomorphicDecode(input) {
+ const length = input.length;
+ if ((2 << 15) - 1 > length) {
+ return String.fromCharCode.apply(null, input);
+ }
+ let result = "";
+ let i = 0;
+ let addition = (2 << 15) - 1;
+ while (i < length) {
+ if (i + addition > length) {
+ addition = length - i;
}
- return res[0].address;
+ result += String.fromCharCode.apply(null, input.subarray(i, i += addition));
}
- const all = Object.keys(interfaces).map((nic) => {
- const addresses = interfaces[nic].filter((details) => {
- details.family = _normalizeFamily(details.family);
- if (details.family !== family || ip.isLoopback(details.address)) {
- return false;
- }
- if (!name) {
- return true;
- }
- return name === "public" ? ip.isPrivate(details.address) : ip.isPublic(details.address);
- });
- return addresses.length ? addresses[0].address : void 0;
- }).filter(Boolean);
- return !all.length ? ip.loopback(family) : all[0];
- };
- ip.toLong = function(ip2) {
- let ipl = 0;
- ip2.split(".").forEach((octet) => {
- ipl <<= 8;
- ipl += parseInt(octet);
- });
- return ipl >>> 0;
- };
- ip.fromLong = function(ipl) {
- return `${ipl >>> 24}.${ipl >> 16 & 255}.${ipl >> 8 & 255}.${ipl & 255}`;
+ return result;
+ }
+ function minimizeSupportedMimeType(mimeType) {
+ switch (mimeType.essence) {
+ case "application/ecmascript":
+ case "application/javascript":
+ case "application/x-ecmascript":
+ case "application/x-javascript":
+ case "text/ecmascript":
+ case "text/javascript":
+ case "text/javascript1.0":
+ case "text/javascript1.1":
+ case "text/javascript1.2":
+ case "text/javascript1.3":
+ case "text/javascript1.4":
+ case "text/javascript1.5":
+ case "text/jscript":
+ case "text/livescript":
+ case "text/x-ecmascript":
+ case "text/x-javascript":
+ return "text/javascript";
+ case "application/json":
+ case "text/json":
+ return "application/json";
+ case "image/svg+xml":
+ return "image/svg+xml";
+ case "text/xml":
+ case "application/xml":
+ return "application/xml";
+ }
+ if (mimeType.subtype.endsWith("+json")) {
+ return "application/json";
+ }
+ if (mimeType.subtype.endsWith("+xml")) {
+ return "application/xml";
+ }
+ return "";
+ }
+ module2.exports = {
+ dataURLProcessor,
+ URLSerializer,
+ collectASequenceOfCodePoints,
+ collectASequenceOfCodePointsFast,
+ stringPercentDecode,
+ parseMIMEType,
+ collectAnHTTPQuotedString,
+ serializeAMimeType,
+ removeChars,
+ minimizeSupportedMimeType
};
}
});
-// .yarn/cache/smart-buffer-npm-4.2.0-5ac3f668bb-a16775323e.zip/node_modules/smart-buffer/build/utils.js
-var require_utils = __commonJS({
- ".yarn/cache/smart-buffer-npm-4.2.0-5ac3f668bb-a16775323e.zip/node_modules/smart-buffer/build/utils.js"(exports) {
+// .yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/fetch/util.js
+var require_util2 = __commonJS({
+ ".yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/fetch/util.js"(exports, module2) {
"use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var buffer_1 = require("buffer");
- var ERRORS = {
- INVALID_ENCODING: "Invalid encoding provided. Please specify a valid encoding the internal Node.js Buffer supports.",
- INVALID_SMARTBUFFER_SIZE: "Invalid size provided. Size must be a valid integer greater than zero.",
- INVALID_SMARTBUFFER_BUFFER: "Invalid Buffer provided in SmartBufferOptions.",
- INVALID_SMARTBUFFER_OBJECT: "Invalid SmartBufferOptions object supplied to SmartBuffer constructor or factory methods.",
- INVALID_OFFSET: "An invalid offset value was provided.",
- INVALID_OFFSET_NON_NUMBER: "An invalid offset value was provided. A numeric value is required.",
- INVALID_LENGTH: "An invalid length value was provided.",
- INVALID_LENGTH_NON_NUMBER: "An invalid length value was provived. A numeric value is required.",
- INVALID_TARGET_OFFSET: "Target offset is beyond the bounds of the internal SmartBuffer data.",
- INVALID_TARGET_LENGTH: "Specified length value moves cursor beyong the bounds of the internal SmartBuffer data.",
- INVALID_READ_BEYOND_BOUNDS: "Attempted to read beyond the bounds of the managed data.",
- INVALID_WRITE_BEYOND_BOUNDS: "Attempted to write beyond the bounds of the managed data."
- };
- exports.ERRORS = ERRORS;
- function checkEncoding(encoding) {
- if (!buffer_1.Buffer.isEncoding(encoding)) {
- throw new Error(ERRORS.INVALID_ENCODING);
- }
- }
- exports.checkEncoding = checkEncoding;
- function isFiniteInteger(value) {
- return typeof value === "number" && isFinite(value) && isInteger2(value);
- }
- exports.isFiniteInteger = isFiniteInteger;
- function checkOffsetOrLengthValue(value, offset) {
- if (typeof value === "number") {
- if (!isFiniteInteger(value) || value < 0) {
- throw new Error(offset ? ERRORS.INVALID_OFFSET : ERRORS.INVALID_LENGTH);
- }
- } else {
- throw new Error(offset ? ERRORS.INVALID_OFFSET_NON_NUMBER : ERRORS.INVALID_LENGTH_NON_NUMBER);
+ var { Transform } = require("node:stream");
+ var zlib = require("node:zlib");
+ var { redirectStatusSet, referrerPolicySet: referrerPolicyTokens, badPortsSet } = require_constants3();
+ var { getGlobalOrigin } = require_global();
+ var { collectASequenceOfCodePoints, collectAnHTTPQuotedString, removeChars, parseMIMEType } = require_dataURL();
+ var { performance } = require("node:perf_hooks");
+ var { isBlobLike, toUSVString, ReadableStreamFrom, isValidHTTPToken } = require_util();
+ var assert3 = require("node:assert");
+ var { isUint8Array } = require("util/types");
+ var crypto;
+ try {
+ crypto = require("node:crypto");
+ } catch {
+ }
+ function responseURL(response) {
+ const urlList = response.urlList;
+ const length = urlList.length;
+ return length === 0 ? null : urlList[length - 1].toString();
+ }
+ function responseLocationURL(response, requestFragment) {
+ if (!redirectStatusSet.has(response.status)) {
+ return null;
+ }
+ let location = response.headersList.get("location", true);
+ if (location !== null && isValidHeaderValue(location)) {
+ location = new URL(location, responseURL(response));
}
+ if (location && !location.hash) {
+ location.hash = requestFragment;
+ }
+ return location;
+ }
+ function requestCurrentURL(request) {
+ return request.urlList[request.urlList.length - 1];
}
- function checkLengthValue(length) {
- checkOffsetOrLengthValue(length, false);
+ function requestBadPort(request) {
+ const url = requestCurrentURL(request);
+ if (urlIsHttpHttpsScheme(url) && badPortsSet.has(url.port)) {
+ return "blocked";
+ }
+ return "allowed";
}
- exports.checkLengthValue = checkLengthValue;
- function checkOffsetValue(offset) {
- checkOffsetOrLengthValue(offset, true);
+ function isErrorLike(object) {
+ return object instanceof Error || (object?.constructor?.name === "Error" || object?.constructor?.name === "DOMException");
}
- exports.checkOffsetValue = checkOffsetValue;
- function checkTargetOffset(offset, buff) {
- if (offset < 0 || offset > buff.length) {
- throw new Error(ERRORS.INVALID_TARGET_OFFSET);
+ function isValidReasonPhrase(statusText) {
+ for (let i = 0; i < statusText.length; ++i) {
+ const c = statusText.charCodeAt(i);
+ if (!(c === 9 || // HTAB
+ c >= 32 && c <= 126 || // SP / VCHAR
+ c >= 128 && c <= 255)) {
+ return false;
+ }
}
+ return true;
}
- exports.checkTargetOffset = checkTargetOffset;
- function isInteger2(value) {
- return typeof value === "number" && isFinite(value) && Math.floor(value) === value;
+ function isValidHeaderName(potentialValue) {
+ return isValidHTTPToken(potentialValue);
}
- function bigIntAndBufferInt64Check(bufferMethod) {
- if (typeof BigInt === "undefined") {
- throw new Error("Platform does not support JS BigInt type.");
+ function isValidHeaderValue(potentialValue) {
+ if (potentialValue.startsWith(" ") || potentialValue.startsWith(" ") || potentialValue.endsWith(" ") || potentialValue.endsWith(" ")) {
+ return false;
}
- if (typeof buffer_1.Buffer.prototype[bufferMethod] === "undefined") {
- throw new Error(`Platform does not support Buffer.prototype.${bufferMethod}.`);
+ if (potentialValue.includes("\0") || potentialValue.includes("\r") || potentialValue.includes("\n")) {
+ return false;
}
+ return true;
}
- exports.bigIntAndBufferInt64Check = bigIntAndBufferInt64Check;
- }
-});
-
-// .yarn/cache/smart-buffer-npm-4.2.0-5ac3f668bb-a16775323e.zip/node_modules/smart-buffer/build/smartbuffer.js
-var require_smartbuffer = __commonJS({
- ".yarn/cache/smart-buffer-npm-4.2.0-5ac3f668bb-a16775323e.zip/node_modules/smart-buffer/build/smartbuffer.js"(exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var utils_1 = require_utils();
- var DEFAULT_SMARTBUFFER_SIZE = 4096;
- var DEFAULT_SMARTBUFFER_ENCODING = "utf8";
- var SmartBuffer = class _SmartBuffer {
- /**
- * Creates a new SmartBuffer instance.
- *
- * @param options { SmartBufferOptions } The SmartBufferOptions to apply to this instance.
- */
- constructor(options) {
- this.length = 0;
- this._encoding = DEFAULT_SMARTBUFFER_ENCODING;
- this._writeOffset = 0;
- this._readOffset = 0;
- if (_SmartBuffer.isSmartBufferOptions(options)) {
- if (options.encoding) {
- utils_1.checkEncoding(options.encoding);
- this._encoding = options.encoding;
- }
- if (options.size) {
- if (utils_1.isFiniteInteger(options.size) && options.size > 0) {
- this._buff = Buffer.allocUnsafe(options.size);
- } else {
- throw new Error(utils_1.ERRORS.INVALID_SMARTBUFFER_SIZE);
- }
- } else if (options.buff) {
- if (Buffer.isBuffer(options.buff)) {
- this._buff = options.buff;
- this.length = options.buff.length;
- } else {
- throw new Error(utils_1.ERRORS.INVALID_SMARTBUFFER_BUFFER);
- }
- } else {
- this._buff = Buffer.allocUnsafe(DEFAULT_SMARTBUFFER_SIZE);
- }
- } else {
- if (typeof options !== "undefined") {
- throw new Error(utils_1.ERRORS.INVALID_SMARTBUFFER_OBJECT);
+ function setRequestReferrerPolicyOnRedirect(request, actualResponse) {
+ const { headersList } = actualResponse;
+ const policyHeader = (headersList.get("referrer-policy", true) ?? "").split(",");
+ let policy = "";
+ if (policyHeader.length > 0) {
+ for (let i = policyHeader.length; i !== 0; i--) {
+ const token = policyHeader[i - 1].trim();
+ if (referrerPolicyTokens.has(token)) {
+ policy = token;
+ break;
}
- this._buff = Buffer.allocUnsafe(DEFAULT_SMARTBUFFER_SIZE);
}
}
- /**
- * Creates a new SmartBuffer instance with the provided internal Buffer size and optional encoding.
- *
- * @param size { Number } The size of the internal Buffer.
- * @param encoding { String } The BufferEncoding to use for strings.
- *
- * @return { SmartBuffer }
- */
- static fromSize(size, encoding) {
- return new this({
- size,
- encoding
- });
+ if (policy !== "") {
+ request.referrerPolicy = policy;
}
- /**
- * Creates a new SmartBuffer instance with the provided Buffer and optional encoding.
- *
- * @param buffer { Buffer } The Buffer to use as the internal Buffer value.
- * @param encoding { String } The BufferEncoding to use for strings.
- *
- * @return { SmartBuffer }
- */
- static fromBuffer(buff, encoding) {
- return new this({
- buff,
- encoding
- });
+ }
+ function crossOriginResourcePolicyCheck() {
+ return "allowed";
+ }
+ function corsCheck() {
+ return "success";
+ }
+ function TAOCheck() {
+ return "success";
+ }
+ function appendFetchMetadata(httpRequest) {
+ let header = null;
+ header = httpRequest.mode;
+ httpRequest.headersList.set("sec-fetch-mode", header, true);
+ }
+ function appendRequestOriginHeader(request) {
+ let serializedOrigin = request.origin;
+ if (request.responseTainting === "cors" || request.mode === "websocket") {
+ if (serializedOrigin) {
+ request.headersList.append("origin", serializedOrigin, true);
+ }
+ } else if (request.method !== "GET" && request.method !== "HEAD") {
+ switch (request.referrerPolicy) {
+ case "no-referrer":
+ serializedOrigin = null;
+ break;
+ case "no-referrer-when-downgrade":
+ case "strict-origin":
+ case "strict-origin-when-cross-origin":
+ if (request.origin && urlHasHttpsScheme(request.origin) && !urlHasHttpsScheme(requestCurrentURL(request))) {
+ serializedOrigin = null;
+ }
+ break;
+ case "same-origin":
+ if (!sameOrigin(request, requestCurrentURL(request))) {
+ serializedOrigin = null;
+ }
+ break;
+ default:
+ }
+ if (serializedOrigin) {
+ request.headersList.append("origin", serializedOrigin, true);
+ }
}
- /**
- * Creates a new SmartBuffer instance with the provided SmartBufferOptions options.
- *
- * @param options { SmartBufferOptions } The options to use when creating the SmartBuffer instance.
- */
- static fromOptions(options) {
- return new this(options);
+ }
+ function coarsenTime(timestamp, crossOriginIsolatedCapability) {
+ return timestamp;
+ }
+ function clampAndCoarsenConnectionTimingInfo(connectionTimingInfo, defaultStartTime, crossOriginIsolatedCapability) {
+ if (!connectionTimingInfo?.startTime || connectionTimingInfo.startTime < defaultStartTime) {
+ return {
+ domainLookupStartTime: defaultStartTime,
+ domainLookupEndTime: defaultStartTime,
+ connectionStartTime: defaultStartTime,
+ connectionEndTime: defaultStartTime,
+ secureConnectionStartTime: defaultStartTime,
+ ALPNNegotiatedProtocol: connectionTimingInfo?.ALPNNegotiatedProtocol
+ };
}
- /**
- * Type checking function that determines if an object is a SmartBufferOptions object.
- */
- static isSmartBufferOptions(options) {
- const castOptions = options;
- return castOptions && (castOptions.encoding !== void 0 || castOptions.size !== void 0 || castOptions.buff !== void 0);
+ return {
+ domainLookupStartTime: coarsenTime(connectionTimingInfo.domainLookupStartTime, crossOriginIsolatedCapability),
+ domainLookupEndTime: coarsenTime(connectionTimingInfo.domainLookupEndTime, crossOriginIsolatedCapability),
+ connectionStartTime: coarsenTime(connectionTimingInfo.connectionStartTime, crossOriginIsolatedCapability),
+ connectionEndTime: coarsenTime(connectionTimingInfo.connectionEndTime, crossOriginIsolatedCapability),
+ secureConnectionStartTime: coarsenTime(connectionTimingInfo.secureConnectionStartTime, crossOriginIsolatedCapability),
+ ALPNNegotiatedProtocol: connectionTimingInfo.ALPNNegotiatedProtocol
+ };
+ }
+ function coarsenedSharedCurrentTime(crossOriginIsolatedCapability) {
+ return coarsenTime(performance.now(), crossOriginIsolatedCapability);
+ }
+ function createOpaqueTimingInfo(timingInfo) {
+ return {
+ startTime: timingInfo.startTime ?? 0,
+ redirectStartTime: 0,
+ redirectEndTime: 0,
+ postRedirectStartTime: timingInfo.startTime ?? 0,
+ finalServiceWorkerStartTime: 0,
+ finalNetworkResponseStartTime: 0,
+ finalNetworkRequestStartTime: 0,
+ endTime: 0,
+ encodedBodySize: 0,
+ decodedBodySize: 0,
+ finalConnectionTimingInfo: null
+ };
+ }
+ function makePolicyContainer() {
+ return {
+ referrerPolicy: "strict-origin-when-cross-origin"
+ };
+ }
+ function clonePolicyContainer(policyContainer) {
+ return {
+ referrerPolicy: policyContainer.referrerPolicy
+ };
+ }
+ function determineRequestsReferrer(request) {
+ const policy = request.referrerPolicy;
+ assert3(policy);
+ let referrerSource = null;
+ if (request.referrer === "client") {
+ const globalOrigin = getGlobalOrigin();
+ if (!globalOrigin || globalOrigin.origin === "null") {
+ return "no-referrer";
+ }
+ referrerSource = new URL(globalOrigin);
+ } else if (request.referrer instanceof URL) {
+ referrerSource = request.referrer;
+ }
+ let referrerURL = stripURLForReferrer(referrerSource);
+ const referrerOrigin = stripURLForReferrer(referrerSource, true);
+ if (referrerURL.toString().length > 4096) {
+ referrerURL = referrerOrigin;
+ }
+ const areSameOrigin = sameOrigin(request, referrerURL);
+ const isNonPotentiallyTrustWorthy = isURLPotentiallyTrustworthy(referrerURL) && !isURLPotentiallyTrustworthy(request.url);
+ switch (policy) {
+ case "origin":
+ return referrerOrigin != null ? referrerOrigin : stripURLForReferrer(referrerSource, true);
+ case "unsafe-url":
+ return referrerURL;
+ case "same-origin":
+ return areSameOrigin ? referrerOrigin : "no-referrer";
+ case "origin-when-cross-origin":
+ return areSameOrigin ? referrerURL : referrerOrigin;
+ case "strict-origin-when-cross-origin": {
+ const currentURL = requestCurrentURL(request);
+ if (sameOrigin(referrerURL, currentURL)) {
+ return referrerURL;
+ }
+ if (isURLPotentiallyTrustworthy(referrerURL) && !isURLPotentiallyTrustworthy(currentURL)) {
+ return "no-referrer";
+ }
+ return referrerOrigin;
+ }
+ case "strict-origin":
+ case "no-referrer-when-downgrade":
+ default:
+ return isNonPotentiallyTrustWorthy ? "no-referrer" : referrerOrigin;
}
- // Signed integers
- /**
- * Reads an Int8 value from the current read position or an optionally provided offset.
- *
- * @param offset { Number } The offset to read data from (optional)
- * @return { Number }
- */
- readInt8(offset) {
- return this._readNumberValue(Buffer.prototype.readInt8, 1, offset);
+ }
+ function stripURLForReferrer(url, originOnly) {
+ assert3(url instanceof URL);
+ if (url.protocol === "file:" || url.protocol === "about:" || url.protocol === "blank:") {
+ return "no-referrer";
}
- /**
- * Reads an Int16BE value from the current read position or an optionally provided offset.
- *
- * @param offset { Number } The offset to read data from (optional)
- * @return { Number }
- */
- readInt16BE(offset) {
- return this._readNumberValue(Buffer.prototype.readInt16BE, 2, offset);
+ url.username = "";
+ url.password = "";
+ url.hash = "";
+ if (originOnly) {
+ url.pathname = "";
+ url.search = "";
}
- /**
- * Reads an Int16LE value from the current read position or an optionally provided offset.
- *
- * @param offset { Number } The offset to read data from (optional)
- * @return { Number }
- */
- readInt16LE(offset) {
- return this._readNumberValue(Buffer.prototype.readInt16LE, 2, offset);
+ return url;
+ }
+ function isURLPotentiallyTrustworthy(url) {
+ if (!(url instanceof URL)) {
+ return false;
}
- /**
- * Reads an Int32BE value from the current read position or an optionally provided offset.
- *
- * @param offset { Number } The offset to read data from (optional)
- * @return { Number }
- */
- readInt32BE(offset) {
- return this._readNumberValue(Buffer.prototype.readInt32BE, 4, offset);
+ if (url.href === "about:blank" || url.href === "about:srcdoc") {
+ return true;
}
- /**
- * Reads an Int32LE value from the current read position or an optionally provided offset.
- *
- * @param offset { Number } The offset to read data from (optional)
- * @return { Number }
- */
- readInt32LE(offset) {
- return this._readNumberValue(Buffer.prototype.readInt32LE, 4, offset);
+ if (url.protocol === "data:")
+ return true;
+ if (url.protocol === "file:")
+ return true;
+ return isOriginPotentiallyTrustworthy(url.origin);
+ function isOriginPotentiallyTrustworthy(origin) {
+ if (origin == null || origin === "null")
+ return false;
+ const originAsURL = new URL(origin);
+ if (originAsURL.protocol === "https:" || originAsURL.protocol === "wss:") {
+ return true;
+ }
+ if (/^127(?:\.[0-9]+){0,2}\.[0-9]+$|^\[(?:0*:)*?:?0*1\]$/.test(originAsURL.hostname) || (originAsURL.hostname === "localhost" || originAsURL.hostname.includes("localhost.")) || originAsURL.hostname.endsWith(".localhost")) {
+ return true;
+ }
+ return false;
}
- /**
- * Reads a BigInt64BE value from the current read position or an optionally provided offset.
- *
- * @param offset { Number } The offset to read data from (optional)
- * @return { BigInt }
- */
- readBigInt64BE(offset) {
- utils_1.bigIntAndBufferInt64Check("readBigInt64BE");
- return this._readNumberValue(Buffer.prototype.readBigInt64BE, 8, offset);
+ }
+ function bytesMatch(bytes, metadataList) {
+ if (crypto === void 0) {
+ return true;
}
- /**
- * Reads a BigInt64LE value from the current read position or an optionally provided offset.
- *
- * @param offset { Number } The offset to read data from (optional)
- * @return { BigInt }
- */
- readBigInt64LE(offset) {
- utils_1.bigIntAndBufferInt64Check("readBigInt64LE");
- return this._readNumberValue(Buffer.prototype.readBigInt64LE, 8, offset);
+ const parsedMetadata = parseMetadata(metadataList);
+ if (parsedMetadata === "no metadata") {
+ return true;
}
- /**
- * Writes an Int8 value to the current write position (or at optional offset).
- *
- * @param value { Number } The value to write.
- * @param offset { Number } The offset to write the value at.
- *
- * @return this
- */
- writeInt8(value, offset) {
- this._writeNumberValue(Buffer.prototype.writeInt8, 1, value, offset);
- return this;
+ if (parsedMetadata.length === 0) {
+ return true;
}
- /**
- * Inserts an Int8 value at the given offset value.
- *
- * @param value { Number } The value to insert.
- * @param offset { Number } The offset to insert the value at.
- *
- * @return this
- */
- insertInt8(value, offset) {
- return this._insertNumberValue(Buffer.prototype.writeInt8, 1, value, offset);
+ const list = parsedMetadata.sort((c, d) => d.algo.localeCompare(c.algo));
+ const strongest = list[0].algo;
+ const metadata = list.filter((item) => item.algo === strongest);
+ for (const item of metadata) {
+ const algorithm = item.algo;
+ let expectedValue = item.hash;
+ if (expectedValue.endsWith("==")) {
+ expectedValue = expectedValue.slice(0, -2);
+ }
+ let actualValue = crypto.createHash(algorithm).update(bytes).digest("base64");
+ if (actualValue.endsWith("==")) {
+ actualValue = actualValue.slice(0, -2);
+ }
+ if (actualValue === expectedValue) {
+ return true;
+ }
+ let actualBase64URL = crypto.createHash(algorithm).update(bytes).digest("base64url");
+ if (actualBase64URL.endsWith("==")) {
+ actualBase64URL = actualBase64URL.slice(0, -2);
+ }
+ if (actualBase64URL === expectedValue) {
+ return true;
+ }
}
- /**
- * Writes an Int16BE value to the current write position (or at optional offset).
- *
- * @param value { Number } The value to write.
- * @param offset { Number } The offset to write the value at.
- *
- * @return this
- */
- writeInt16BE(value, offset) {
- return this._writeNumberValue(Buffer.prototype.writeInt16BE, 2, value, offset);
+ return false;
+ }
+ var parseHashWithOptions = /(?sha256|sha384|sha512)-(?[A-Za-z0-9+/]+={0,2}(?=\s|$))( +[!-~]*)?/i;
+ function parseMetadata(metadata) {
+ const result = [];
+ let empty = true;
+ const supportedHashes = crypto.getHashes();
+ for (const token of metadata.split(" ")) {
+ empty = false;
+ const parsedToken = parseHashWithOptions.exec(token);
+ if (parsedToken === null || parsedToken.groups === void 0) {
+ continue;
+ }
+ const algorithm = parsedToken.groups.algo;
+ if (supportedHashes.includes(algorithm.toLowerCase())) {
+ result.push(parsedToken.groups);
+ }
}
- /**
- * Inserts an Int16BE value at the given offset value.
- *
- * @param value { Number } The value to insert.
- * @param offset { Number } The offset to insert the value at.
- *
- * @return this
- */
- insertInt16BE(value, offset) {
- return this._insertNumberValue(Buffer.prototype.writeInt16BE, 2, value, offset);
+ if (empty === true) {
+ return "no metadata";
}
- /**
- * Writes an Int16LE value to the current write position (or at optional offset).
- *
- * @param value { Number } The value to write.
- * @param offset { Number } The offset to write the value at.
- *
- * @return this
- */
- writeInt16LE(value, offset) {
- return this._writeNumberValue(Buffer.prototype.writeInt16LE, 2, value, offset);
- }
- /**
- * Inserts an Int16LE value at the given offset value.
- *
- * @param value { Number } The value to insert.
- * @param offset { Number } The offset to insert the value at.
- *
- * @return this
- */
- insertInt16LE(value, offset) {
- return this._insertNumberValue(Buffer.prototype.writeInt16LE, 2, value, offset);
+ return result;
+ }
+ function tryUpgradeRequestToAPotentiallyTrustworthyURL(request) {
+ }
+ function sameOrigin(A, B) {
+ if (A.origin === B.origin && A.origin === "null") {
+ return true;
}
- /**
- * Writes an Int32BE value to the current write position (or at optional offset).
- *
- * @param value { Number } The value to write.
- * @param offset { Number } The offset to write the value at.
- *
- * @return this
- */
- writeInt32BE(value, offset) {
- return this._writeNumberValue(Buffer.prototype.writeInt32BE, 4, value, offset);
+ if (A.protocol === B.protocol && A.hostname === B.hostname && A.port === B.port) {
+ return true;
}
- /**
- * Inserts an Int32BE value at the given offset value.
- *
- * @param value { Number } The value to insert.
- * @param offset { Number } The offset to insert the value at.
- *
- * @return this
- */
- insertInt32BE(value, offset) {
- return this._insertNumberValue(Buffer.prototype.writeInt32BE, 4, value, offset);
+ return false;
+ }
+ function createDeferredPromise() {
+ let res;
+ let rej;
+ const promise = new Promise((resolve, reject) => {
+ res = resolve;
+ rej = reject;
+ });
+ return { promise, resolve: res, reject: rej };
+ }
+ function isAborted(fetchParams) {
+ return fetchParams.controller.state === "aborted";
+ }
+ function isCancelled(fetchParams) {
+ return fetchParams.controller.state === "aborted" || fetchParams.controller.state === "terminated";
+ }
+ var normalizeMethodRecordBase = {
+ delete: "DELETE",
+ DELETE: "DELETE",
+ get: "GET",
+ GET: "GET",
+ head: "HEAD",
+ HEAD: "HEAD",
+ options: "OPTIONS",
+ OPTIONS: "OPTIONS",
+ post: "POST",
+ POST: "POST",
+ put: "PUT",
+ PUT: "PUT"
+ };
+ var normalizeMethodRecord = {
+ ...normalizeMethodRecordBase,
+ patch: "patch",
+ PATCH: "PATCH"
+ };
+ Object.setPrototypeOf(normalizeMethodRecordBase, null);
+ Object.setPrototypeOf(normalizeMethodRecord, null);
+ function normalizeMethod(method) {
+ return normalizeMethodRecordBase[method.toLowerCase()] ?? method;
+ }
+ function serializeJavascriptValueToJSONString(value) {
+ const result = JSON.stringify(value);
+ if (result === void 0) {
+ throw new TypeError("Value is not JSON serializable");
+ }
+ assert3(typeof result === "string");
+ return result;
+ }
+ var esIteratorPrototype = Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()));
+ function makeIterator(iterator, name, kind, keyIndex = 0, valueIndex = 1) {
+ const object = {
+ index: 0,
+ kind,
+ target: iterator
+ };
+ const iteratorObject = Object.create(esIteratorPrototype);
+ Object.defineProperty(iteratorObject, "next", {
+ value: function next() {
+ if (Object.getPrototypeOf(this) !== iteratorObject) {
+ throw new TypeError(
+ `'next' called on an object that does not implement interface ${name} Iterator.`
+ );
+ }
+ const { index, kind: kind2, target } = object;
+ const values = target();
+ const len = values.length;
+ if (index >= len) {
+ return { value: void 0, done: true };
+ }
+ const { [keyIndex]: key, [valueIndex]: value } = values[index];
+ object.index = index + 1;
+ let result;
+ switch (kind2) {
+ case "key":
+ result = key;
+ break;
+ case "value":
+ result = value;
+ break;
+ case "key+value":
+ result = [key, value];
+ break;
+ }
+ return {
+ value: result,
+ done: false
+ };
+ },
+ writable: true,
+ enumerable: true,
+ configurable: true
+ });
+ Object.defineProperty(iteratorObject, Symbol.toStringTag, {
+ value: `${name} Iterator`,
+ writable: false,
+ enumerable: false,
+ configurable: true
+ });
+ return Object.create(iteratorObject);
+ }
+ async function fullyReadBody(body, processBody, processBodyError) {
+ const successSteps = processBody;
+ const errorSteps = processBodyError;
+ let reader;
+ try {
+ reader = body.stream.getReader();
+ } catch (e) {
+ errorSteps(e);
+ return;
}
- /**
- * Writes an Int32LE value to the current write position (or at optional offset).
- *
- * @param value { Number } The value to write.
- * @param offset { Number } The offset to write the value at.
- *
- * @return this
- */
- writeInt32LE(value, offset) {
- return this._writeNumberValue(Buffer.prototype.writeInt32LE, 4, value, offset);
+ try {
+ const result = await readAllBytes(reader);
+ successSteps(result);
+ } catch (e) {
+ errorSteps(e);
}
- /**
- * Inserts an Int32LE value at the given offset value.
- *
- * @param value { Number } The value to insert.
- * @param offset { Number } The offset to insert the value at.
- *
- * @return this
- */
- insertInt32LE(value, offset) {
- return this._insertNumberValue(Buffer.prototype.writeInt32LE, 4, value, offset);
+ }
+ function isReadableStreamLike(stream) {
+ return stream instanceof ReadableStream || stream[Symbol.toStringTag] === "ReadableStream" && typeof stream.tee === "function";
+ }
+ function readableStreamClose(controller) {
+ try {
+ controller.close();
+ controller.byobRequest?.respond(0);
+ } catch (err) {
+ if (!err.message.includes("Controller is already closed") && !err.message.includes("ReadableStream is already closed")) {
+ throw err;
+ }
}
- /**
- * Writes a BigInt64BE value to the current write position (or at optional offset).
- *
- * @param value { BigInt } The value to write.
- * @param offset { Number } The offset to write the value at.
- *
- * @return this
- */
- writeBigInt64BE(value, offset) {
- utils_1.bigIntAndBufferInt64Check("writeBigInt64BE");
- return this._writeNumberValue(Buffer.prototype.writeBigInt64BE, 8, value, offset);
+ }
+ function isomorphicEncode(input) {
+ for (let i = 0; i < input.length; i++) {
+ assert3(input.charCodeAt(i) <= 255);
}
- /**
- * Inserts a BigInt64BE value at the given offset value.
- *
- * @param value { BigInt } The value to insert.
- * @param offset { Number } The offset to insert the value at.
- *
- * @return this
- */
- insertBigInt64BE(value, offset) {
- utils_1.bigIntAndBufferInt64Check("writeBigInt64BE");
- return this._insertNumberValue(Buffer.prototype.writeBigInt64BE, 8, value, offset);
+ return input;
+ }
+ async function readAllBytes(reader) {
+ const bytes = [];
+ let byteLength = 0;
+ while (true) {
+ const { done, value: chunk } = await reader.read();
+ if (done) {
+ return Buffer.concat(bytes, byteLength);
+ }
+ if (!isUint8Array(chunk)) {
+ throw new TypeError("Received non-Uint8Array chunk");
+ }
+ bytes.push(chunk);
+ byteLength += chunk.length;
+ }
+ }
+ function urlIsLocal(url) {
+ assert3("protocol" in url);
+ const protocol = url.protocol;
+ return protocol === "about:" || protocol === "blob:" || protocol === "data:";
+ }
+ function urlHasHttpsScheme(url) {
+ if (typeof url === "string") {
+ return url.startsWith("https:");
+ }
+ return url.protocol === "https:";
+ }
+ function urlIsHttpHttpsScheme(url) {
+ assert3("protocol" in url);
+ const protocol = url.protocol;
+ return protocol === "http:" || protocol === "https:";
+ }
+ function simpleRangeHeaderValue(value, allowWhitespace) {
+ const data = value;
+ if (!data.startsWith("bytes")) {
+ return "failure";
+ }
+ const position = { position: 5 };
+ if (allowWhitespace) {
+ collectASequenceOfCodePoints(
+ (char) => char === " " || char === " ",
+ data,
+ position
+ );
}
- /**
- * Writes a BigInt64LE value to the current write position (or at optional offset).
- *
- * @param value { BigInt } The value to write.
- * @param offset { Number } The offset to write the value at.
- *
- * @return this
- */
- writeBigInt64LE(value, offset) {
- utils_1.bigIntAndBufferInt64Check("writeBigInt64LE");
- return this._writeNumberValue(Buffer.prototype.writeBigInt64LE, 8, value, offset);
+ if (data.charCodeAt(position.position) !== 61) {
+ return "failure";
}
- /**
- * Inserts a Int64LE value at the given offset value.
- *
- * @param value { BigInt } The value to insert.
- * @param offset { Number } The offset to insert the value at.
- *
- * @return this
- */
- insertBigInt64LE(value, offset) {
- utils_1.bigIntAndBufferInt64Check("writeBigInt64LE");
- return this._insertNumberValue(Buffer.prototype.writeBigInt64LE, 8, value, offset);
+ position.position++;
+ if (allowWhitespace) {
+ collectASequenceOfCodePoints(
+ (char) => char === " " || char === " ",
+ data,
+ position
+ );
}
- // Unsigned Integers
- /**
- * Reads an UInt8 value from the current read position or an optionally provided offset.
- *
- * @param offset { Number } The offset to read data from (optional)
- * @return { Number }
- */
- readUInt8(offset) {
- return this._readNumberValue(Buffer.prototype.readUInt8, 1, offset);
+ const rangeStart = collectASequenceOfCodePoints(
+ (char) => {
+ const code = char.charCodeAt(0);
+ return code >= 48 && code <= 57;
+ },
+ data,
+ position
+ );
+ const rangeStartValue = rangeStart.length ? Number(rangeStart) : null;
+ if (allowWhitespace) {
+ collectASequenceOfCodePoints(
+ (char) => char === " " || char === " ",
+ data,
+ position
+ );
}
- /**
- * Reads an UInt16BE value from the current read position or an optionally provided offset.
- *
- * @param offset { Number } The offset to read data from (optional)
- * @return { Number }
- */
- readUInt16BE(offset) {
- return this._readNumberValue(Buffer.prototype.readUInt16BE, 2, offset);
+ if (data.charCodeAt(position.position) !== 45) {
+ return "failure";
}
- /**
- * Reads an UInt16LE value from the current read position or an optionally provided offset.
- *
- * @param offset { Number } The offset to read data from (optional)
- * @return { Number }
- */
- readUInt16LE(offset) {
- return this._readNumberValue(Buffer.prototype.readUInt16LE, 2, offset);
+ position.position++;
+ if (allowWhitespace) {
+ collectASequenceOfCodePoints(
+ (char) => char === " " || char === " ",
+ data,
+ position
+ );
}
- /**
- * Reads an UInt32BE value from the current read position or an optionally provided offset.
- *
- * @param offset { Number } The offset to read data from (optional)
- * @return { Number }
- */
- readUInt32BE(offset) {
- return this._readNumberValue(Buffer.prototype.readUInt32BE, 4, offset);
+ const rangeEnd = collectASequenceOfCodePoints(
+ (char) => {
+ const code = char.charCodeAt(0);
+ return code >= 48 && code <= 57;
+ },
+ data,
+ position
+ );
+ const rangeEndValue = rangeEnd.length ? Number(rangeEnd) : null;
+ if (position.position < data.length) {
+ return "failure";
+ }
+ if (rangeEndValue === null && rangeStartValue === null) {
+ return "failure";
+ }
+ if (rangeStartValue > rangeEndValue) {
+ return "failure";
+ }
+ return { rangeStartValue, rangeEndValue };
+ }
+ function buildContentRange(rangeStart, rangeEnd, fullLength) {
+ let contentRange = "bytes ";
+ contentRange += isomorphicEncode(`${rangeStart}`);
+ contentRange += "-";
+ contentRange += isomorphicEncode(`${rangeEnd}`);
+ contentRange += "/";
+ contentRange += isomorphicEncode(`${fullLength}`);
+ return contentRange;
+ }
+ var InflateStream = class extends Transform {
+ _transform(chunk, encoding, callback) {
+ if (!this._inflateStream) {
+ if (chunk.length === 0) {
+ callback();
+ return;
+ }
+ this._inflateStream = (chunk[0] & 15) === 8 ? zlib.createInflate() : zlib.createInflateRaw();
+ this._inflateStream.on("data", this.push.bind(this));
+ this._inflateStream.on("end", () => this.push(null));
+ this._inflateStream.on("error", (err) => this.destroy(err));
+ }
+ this._inflateStream.write(chunk, encoding, callback);
}
- /**
- * Reads an UInt32LE value from the current read position or an optionally provided offset.
- *
- * @param offset { Number } The offset to read data from (optional)
- * @return { Number }
- */
- readUInt32LE(offset) {
- return this._readNumberValue(Buffer.prototype.readUInt32LE, 4, offset);
+ _final(callback) {
+ if (this._inflateStream) {
+ this._inflateStream.end();
+ this._inflateStream = null;
+ }
+ callback();
}
- /**
- * Reads a BigUInt64BE value from the current read position or an optionally provided offset.
- *
- * @param offset { Number } The offset to read data from (optional)
- * @return { BigInt }
- */
- readBigUInt64BE(offset) {
- utils_1.bigIntAndBufferInt64Check("readBigUInt64BE");
- return this._readNumberValue(Buffer.prototype.readBigUInt64BE, 8, offset);
+ };
+ function createInflate() {
+ return new InflateStream();
+ }
+ function extractMimeType(headers) {
+ let charset = null;
+ let essence = null;
+ let mimeType = null;
+ const values = getDecodeSplit("content-type", headers);
+ if (values === null) {
+ return "failure";
}
- /**
- * Reads a BigUInt64LE value from the current read position or an optionally provided offset.
- *
- * @param offset { Number } The offset to read data from (optional)
- * @return { BigInt }
- */
- readBigUInt64LE(offset) {
- utils_1.bigIntAndBufferInt64Check("readBigUInt64LE");
- return this._readNumberValue(Buffer.prototype.readBigUInt64LE, 8, offset);
+ for (const value of values) {
+ const temporaryMimeType = parseMIMEType(value);
+ if (temporaryMimeType === "failure" || temporaryMimeType.essence === "*/*") {
+ continue;
+ }
+ mimeType = temporaryMimeType;
+ if (mimeType.essence !== essence) {
+ charset = null;
+ if (mimeType.parameters.has("charset")) {
+ charset = mimeType.parameters.get("charset");
+ }
+ essence = mimeType.essence;
+ } else if (!mimeType.parameters.has("charset") && charset !== null) {
+ mimeType.parameters.set("charset", charset);
+ }
}
- /**
- * Writes an UInt8 value to the current write position (or at optional offset).
- *
- * @param value { Number } The value to write.
- * @param offset { Number } The offset to write the value at.
- *
- * @return this
- */
- writeUInt8(value, offset) {
- return this._writeNumberValue(Buffer.prototype.writeUInt8, 1, value, offset);
+ if (mimeType == null) {
+ return "failure";
}
- /**
- * Inserts an UInt8 value at the given offset value.
- *
- * @param value { Number } The value to insert.
- * @param offset { Number } The offset to insert the value at.
- *
- * @return this
- */
- insertUInt8(value, offset) {
- return this._insertNumberValue(Buffer.prototype.writeUInt8, 1, value, offset);
+ return mimeType;
+ }
+ function gettingDecodingSplitting(value) {
+ const input = value;
+ const position = { position: 0 };
+ const values = [];
+ let temporaryValue = "";
+ while (position.position < input.length) {
+ temporaryValue += collectASequenceOfCodePoints(
+ (char) => char !== '"' && char !== ",",
+ input,
+ position
+ );
+ if (position.position < input.length) {
+ if (input.charCodeAt(position.position) === 34) {
+ temporaryValue += collectAnHTTPQuotedString(
+ input,
+ position
+ );
+ if (position.position < input.length) {
+ continue;
+ }
+ } else {
+ assert3(input.charCodeAt(position.position) === 44);
+ position.position++;
+ }
+ }
+ temporaryValue = removeChars(temporaryValue, true, true, (char) => char === 9 || char === 32);
+ values.push(temporaryValue);
+ temporaryValue = "";
}
- /**
- * Writes an UInt16BE value to the current write position (or at optional offset).
- *
- * @param value { Number } The value to write.
- * @param offset { Number } The offset to write the value at.
- *
- * @return this
- */
- writeUInt16BE(value, offset) {
- return this._writeNumberValue(Buffer.prototype.writeUInt16BE, 2, value, offset);
+ return values;
+ }
+ function getDecodeSplit(name, list) {
+ const value = list.get(name, true);
+ if (value === null) {
+ return null;
}
- /**
- * Inserts an UInt16BE value at the given offset value.
- *
- * @param value { Number } The value to insert.
- * @param offset { Number } The offset to insert the value at.
- *
- * @return this
- */
- insertUInt16BE(value, offset) {
- return this._insertNumberValue(Buffer.prototype.writeUInt16BE, 2, value, offset);
+ return gettingDecodingSplitting(value);
+ }
+ module2.exports = {
+ isAborted,
+ isCancelled,
+ createDeferredPromise,
+ ReadableStreamFrom,
+ toUSVString,
+ tryUpgradeRequestToAPotentiallyTrustworthyURL,
+ clampAndCoarsenConnectionTimingInfo,
+ coarsenedSharedCurrentTime,
+ determineRequestsReferrer,
+ makePolicyContainer,
+ clonePolicyContainer,
+ appendFetchMetadata,
+ appendRequestOriginHeader,
+ TAOCheck,
+ corsCheck,
+ crossOriginResourcePolicyCheck,
+ createOpaqueTimingInfo,
+ setRequestReferrerPolicyOnRedirect,
+ isValidHTTPToken,
+ requestBadPort,
+ requestCurrentURL,
+ responseURL,
+ responseLocationURL,
+ isBlobLike,
+ isURLPotentiallyTrustworthy,
+ isValidReasonPhrase,
+ sameOrigin,
+ normalizeMethod,
+ serializeJavascriptValueToJSONString,
+ makeIterator,
+ isValidHeaderName,
+ isValidHeaderValue,
+ isErrorLike,
+ fullyReadBody,
+ bytesMatch,
+ isReadableStreamLike,
+ readableStreamClose,
+ isomorphicEncode,
+ urlIsLocal,
+ urlHasHttpsScheme,
+ urlIsHttpHttpsScheme,
+ readAllBytes,
+ normalizeMethodRecord,
+ simpleRangeHeaderValue,
+ buildContentRange,
+ parseMetadata,
+ createInflate,
+ extractMimeType
+ };
+ }
+});
+
+// .yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/fetch/symbols.js
+var require_symbols2 = __commonJS({
+ ".yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/fetch/symbols.js"(exports, module2) {
+ "use strict";
+ module2.exports = {
+ kUrl: Symbol("url"),
+ kHeaders: Symbol("headers"),
+ kSignal: Symbol("signal"),
+ kState: Symbol("state"),
+ kGuard: Symbol("guard"),
+ kRealm: Symbol("realm")
+ };
+ }
+});
+
+// .yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/fetch/webidl.js
+var require_webidl = __commonJS({
+ ".yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/fetch/webidl.js"(exports, module2) {
+ "use strict";
+ var { types } = require("node:util");
+ var { toUSVString } = require_util2();
+ var webidl = {};
+ webidl.converters = {};
+ webidl.util = {};
+ webidl.errors = {};
+ webidl.errors.exception = function(message) {
+ return new TypeError(`${message.header}: ${message.message}`);
+ };
+ webidl.errors.conversionFailed = function(context) {
+ const plural2 = context.types.length === 1 ? "" : " one of";
+ const message = `${context.argument} could not be converted to${plural2}: ${context.types.join(", ")}.`;
+ return webidl.errors.exception({
+ header: context.prefix,
+ message
+ });
+ };
+ webidl.errors.invalidArgument = function(context) {
+ return webidl.errors.exception({
+ header: context.prefix,
+ message: `"${context.value}" is an invalid ${context.type}.`
+ });
+ };
+ webidl.brandCheck = function(V, I, opts = void 0) {
+ if (opts?.strict !== false) {
+ if (!(V instanceof I)) {
+ throw new TypeError("Illegal invocation");
+ }
+ } else {
+ if (V?.[Symbol.toStringTag] !== I.prototype[Symbol.toStringTag]) {
+ throw new TypeError("Illegal invocation");
+ }
}
- /**
- * Writes an UInt16LE value to the current write position (or at optional offset).
- *
- * @param value { Number } The value to write.
- * @param offset { Number } The offset to write the value at.
- *
- * @return this
- */
- writeUInt16LE(value, offset) {
- return this._writeNumberValue(Buffer.prototype.writeUInt16LE, 2, value, offset);
+ };
+ webidl.argumentLengthCheck = function({ length }, min, ctx) {
+ if (length < min) {
+ throw webidl.errors.exception({
+ message: `${min} argument${min !== 1 ? "s" : ""} required, but${length ? " only" : ""} ${length} found.`,
+ ...ctx
+ });
}
- /**
- * Inserts an UInt16LE value at the given offset value.
- *
- * @param value { Number } The value to insert.
- * @param offset { Number } The offset to insert the value at.
- *
- * @return this
- */
- insertUInt16LE(value, offset) {
- return this._insertNumberValue(Buffer.prototype.writeUInt16LE, 2, value, offset);
+ };
+ webidl.illegalConstructor = function() {
+ throw webidl.errors.exception({
+ header: "TypeError",
+ message: "Illegal constructor"
+ });
+ };
+ webidl.util.Type = function(V) {
+ switch (typeof V) {
+ case "undefined":
+ return "Undefined";
+ case "boolean":
+ return "Boolean";
+ case "string":
+ return "String";
+ case "symbol":
+ return "Symbol";
+ case "number":
+ return "Number";
+ case "bigint":
+ return "BigInt";
+ case "function":
+ case "object": {
+ if (V === null) {
+ return "Null";
+ }
+ return "Object";
+ }
+ }
+ };
+ webidl.util.ConvertToInt = function(V, bitLength, signedness, opts = {}) {
+ let upperBound;
+ let lowerBound;
+ if (bitLength === 64) {
+ upperBound = Math.pow(2, 53) - 1;
+ if (signedness === "unsigned") {
+ lowerBound = 0;
+ } else {
+ lowerBound = Math.pow(-2, 53) + 1;
+ }
+ } else if (signedness === "unsigned") {
+ lowerBound = 0;
+ upperBound = Math.pow(2, bitLength) - 1;
+ } else {
+ lowerBound = Math.pow(-2, bitLength) - 1;
+ upperBound = Math.pow(2, bitLength - 1) - 1;
+ }
+ let x = Number(V);
+ if (x === 0) {
+ x = 0;
+ }
+ if (opts.enforceRange === true) {
+ if (Number.isNaN(x) || x === Number.POSITIVE_INFINITY || x === Number.NEGATIVE_INFINITY) {
+ throw webidl.errors.exception({
+ header: "Integer conversion",
+ message: `Could not convert ${V} to an integer.`
+ });
+ }
+ x = webidl.util.IntegerPart(x);
+ if (x < lowerBound || x > upperBound) {
+ throw webidl.errors.exception({
+ header: "Integer conversion",
+ message: `Value must be between ${lowerBound}-${upperBound}, got ${x}.`
+ });
+ }
+ return x;
}
- /**
- * Writes an UInt32BE value to the current write position (or at optional offset).
- *
- * @param value { Number } The value to write.
- * @param offset { Number } The offset to write the value at.
- *
- * @return this
- */
- writeUInt32BE(value, offset) {
- return this._writeNumberValue(Buffer.prototype.writeUInt32BE, 4, value, offset);
+ if (!Number.isNaN(x) && opts.clamp === true) {
+ x = Math.min(Math.max(x, lowerBound), upperBound);
+ if (Math.floor(x) % 2 === 0) {
+ x = Math.floor(x);
+ } else {
+ x = Math.ceil(x);
+ }
+ return x;
}
- /**
- * Inserts an UInt32BE value at the given offset value.
- *
- * @param value { Number } The value to insert.
- * @param offset { Number } The offset to insert the value at.
- *
- * @return this
- */
- insertUInt32BE(value, offset) {
- return this._insertNumberValue(Buffer.prototype.writeUInt32BE, 4, value, offset);
+ if (Number.isNaN(x) || x === 0 && Object.is(0, x) || x === Number.POSITIVE_INFINITY || x === Number.NEGATIVE_INFINITY) {
+ return 0;
}
- /**
- * Writes an UInt32LE value to the current write position (or at optional offset).
- *
- * @param value { Number } The value to write.
- * @param offset { Number } The offset to write the value at.
- *
- * @return this
- */
- writeUInt32LE(value, offset) {
- return this._writeNumberValue(Buffer.prototype.writeUInt32LE, 4, value, offset);
+ x = webidl.util.IntegerPart(x);
+ x = x % Math.pow(2, bitLength);
+ if (signedness === "signed" && x >= Math.pow(2, bitLength) - 1) {
+ return x - Math.pow(2, bitLength);
}
- /**
- * Inserts an UInt32LE value at the given offset value.
- *
- * @param value { Number } The value to insert.
- * @param offset { Number } The offset to insert the value at.
- *
- * @return this
- */
- insertUInt32LE(value, offset) {
- return this._insertNumberValue(Buffer.prototype.writeUInt32LE, 4, value, offset);
+ return x;
+ };
+ webidl.util.IntegerPart = function(n) {
+ const r = Math.floor(Math.abs(n));
+ if (n < 0) {
+ return -1 * r;
}
- /**
- * Writes a BigUInt64BE value to the current write position (or at optional offset).
- *
- * @param value { Number } The value to write.
- * @param offset { Number } The offset to write the value at.
- *
- * @return this
- */
- writeBigUInt64BE(value, offset) {
- utils_1.bigIntAndBufferInt64Check("writeBigUInt64BE");
- return this._writeNumberValue(Buffer.prototype.writeBigUInt64BE, 8, value, offset);
+ return r;
+ };
+ webidl.sequenceConverter = function(converter) {
+ return (V) => {
+ if (webidl.util.Type(V) !== "Object") {
+ throw webidl.errors.exception({
+ header: "Sequence",
+ message: `Value of type ${webidl.util.Type(V)} is not an Object.`
+ });
+ }
+ const method = V?.[Symbol.iterator]?.();
+ const seq = [];
+ if (method === void 0 || typeof method.next !== "function") {
+ throw webidl.errors.exception({
+ header: "Sequence",
+ message: "Object is not an iterator."
+ });
+ }
+ while (true) {
+ const { done, value } = method.next();
+ if (done) {
+ break;
+ }
+ seq.push(converter(value));
+ }
+ return seq;
+ };
+ };
+ webidl.recordConverter = function(keyConverter, valueConverter) {
+ return (O) => {
+ if (webidl.util.Type(O) !== "Object") {
+ throw webidl.errors.exception({
+ header: "Record",
+ message: `Value of type ${webidl.util.Type(O)} is not an Object.`
+ });
+ }
+ const result = {};
+ if (!types.isProxy(O)) {
+ const keys2 = Object.keys(O);
+ for (const key of keys2) {
+ const typedKey = keyConverter(key);
+ const typedValue = valueConverter(O[key]);
+ result[typedKey] = typedValue;
+ }
+ return result;
+ }
+ const keys = Reflect.ownKeys(O);
+ for (const key of keys) {
+ const desc = Reflect.getOwnPropertyDescriptor(O, key);
+ if (desc?.enumerable) {
+ const typedKey = keyConverter(key);
+ const typedValue = valueConverter(O[key]);
+ result[typedKey] = typedValue;
+ }
+ }
+ return result;
+ };
+ };
+ webidl.interfaceConverter = function(i) {
+ return (V, opts = {}) => {
+ if (opts.strict !== false && !(V instanceof i)) {
+ throw webidl.errors.exception({
+ header: i.name,
+ message: `Expected ${V} to be an instance of ${i.name}.`
+ });
+ }
+ return V;
+ };
+ };
+ webidl.dictionaryConverter = function(converters) {
+ return (dictionary) => {
+ const type = webidl.util.Type(dictionary);
+ const dict = {};
+ if (type === "Null" || type === "Undefined") {
+ return dict;
+ } else if (type !== "Object") {
+ throw webidl.errors.exception({
+ header: "Dictionary",
+ message: `Expected ${dictionary} to be one of: Null, Undefined, Object.`
+ });
+ }
+ for (const options of converters) {
+ const { key, defaultValue, required, converter } = options;
+ if (required === true) {
+ if (!Object.hasOwn(dictionary, key)) {
+ throw webidl.errors.exception({
+ header: "Dictionary",
+ message: `Missing required key "${key}".`
+ });
+ }
+ }
+ let value = dictionary[key];
+ const hasDefault = Object.hasOwn(options, "defaultValue");
+ if (hasDefault && value !== null) {
+ value = value ?? defaultValue;
+ }
+ if (required || hasDefault || value !== void 0) {
+ value = converter(value);
+ if (options.allowedValues && !options.allowedValues.includes(value)) {
+ throw webidl.errors.exception({
+ header: "Dictionary",
+ message: `${value} is not an accepted type. Expected one of ${options.allowedValues.join(", ")}.`
+ });
+ }
+ dict[key] = value;
+ }
+ }
+ return dict;
+ };
+ };
+ webidl.nullableConverter = function(converter) {
+ return (V) => {
+ if (V === null) {
+ return V;
+ }
+ return converter(V);
+ };
+ };
+ webidl.converters.DOMString = function(V, opts = {}) {
+ if (V === null && opts.legacyNullToEmptyString) {
+ return "";
}
- /**
- * Inserts a BigUInt64BE value at the given offset value.
- *
- * @param value { Number } The value to insert.
- * @param offset { Number } The offset to insert the value at.
- *
- * @return this
- */
- insertBigUInt64BE(value, offset) {
- utils_1.bigIntAndBufferInt64Check("writeBigUInt64BE");
- return this._insertNumberValue(Buffer.prototype.writeBigUInt64BE, 8, value, offset);
+ if (typeof V === "symbol") {
+ throw new TypeError("Could not convert argument of type symbol to string.");
}
- /**
- * Writes a BigUInt64LE value to the current write position (or at optional offset).
- *
- * @param value { Number } The value to write.
- * @param offset { Number } The offset to write the value at.
- *
- * @return this
- */
- writeBigUInt64LE(value, offset) {
- utils_1.bigIntAndBufferInt64Check("writeBigUInt64LE");
- return this._writeNumberValue(Buffer.prototype.writeBigUInt64LE, 8, value, offset);
+ return String(V);
+ };
+ webidl.converters.ByteString = function(V) {
+ const x = webidl.converters.DOMString(V);
+ for (let index = 0; index < x.length; index++) {
+ if (x.charCodeAt(index) > 255) {
+ throw new TypeError(
+ `Cannot convert argument to a ByteString because the character at index ${index} has a value of ${x.charCodeAt(index)} which is greater than 255.`
+ );
+ }
}
- /**
- * Inserts a BigUInt64LE value at the given offset value.
- *
- * @param value { Number } The value to insert.
- * @param offset { Number } The offset to insert the value at.
- *
- * @return this
- */
- insertBigUInt64LE(value, offset) {
- utils_1.bigIntAndBufferInt64Check("writeBigUInt64LE");
- return this._insertNumberValue(Buffer.prototype.writeBigUInt64LE, 8, value, offset);
+ return x;
+ };
+ webidl.converters.USVString = toUSVString;
+ webidl.converters.boolean = function(V) {
+ const x = Boolean(V);
+ return x;
+ };
+ webidl.converters.any = function(V) {
+ return V;
+ };
+ webidl.converters["long long"] = function(V) {
+ const x = webidl.util.ConvertToInt(V, 64, "signed");
+ return x;
+ };
+ webidl.converters["unsigned long long"] = function(V) {
+ const x = webidl.util.ConvertToInt(V, 64, "unsigned");
+ return x;
+ };
+ webidl.converters["unsigned long"] = function(V) {
+ const x = webidl.util.ConvertToInt(V, 32, "unsigned");
+ return x;
+ };
+ webidl.converters["unsigned short"] = function(V, opts) {
+ const x = webidl.util.ConvertToInt(V, 16, "unsigned", opts);
+ return x;
+ };
+ webidl.converters.ArrayBuffer = function(V, opts = {}) {
+ if (webidl.util.Type(V) !== "Object" || !types.isAnyArrayBuffer(V)) {
+ throw webidl.errors.conversionFailed({
+ prefix: `${V}`,
+ argument: `${V}`,
+ types: ["ArrayBuffer"]
+ });
}
- // Floating Point
- /**
- * Reads an FloatBE value from the current read position or an optionally provided offset.
- *
- * @param offset { Number } The offset to read data from (optional)
- * @return { Number }
- */
- readFloatBE(offset) {
- return this._readNumberValue(Buffer.prototype.readFloatBE, 4, offset);
+ if (opts.allowShared === false && types.isSharedArrayBuffer(V)) {
+ throw webidl.errors.exception({
+ header: "ArrayBuffer",
+ message: "SharedArrayBuffer is not allowed."
+ });
}
- /**
- * Reads an FloatLE value from the current read position or an optionally provided offset.
- *
- * @param offset { Number } The offset to read data from (optional)
- * @return { Number }
- */
- readFloatLE(offset) {
- return this._readNumberValue(Buffer.prototype.readFloatLE, 4, offset);
+ return V;
+ };
+ webidl.converters.TypedArray = function(V, T, opts = {}) {
+ if (webidl.util.Type(V) !== "Object" || !types.isTypedArray(V) || V.constructor.name !== T.name) {
+ throw webidl.errors.conversionFailed({
+ prefix: `${T.name}`,
+ argument: `${V}`,
+ types: [T.name]
+ });
}
- /**
- * Writes a FloatBE value to the current write position (or at optional offset).
- *
- * @param value { Number } The value to write.
- * @param offset { Number } The offset to write the value at.
- *
- * @return this
- */
- writeFloatBE(value, offset) {
- return this._writeNumberValue(Buffer.prototype.writeFloatBE, 4, value, offset);
+ if (opts.allowShared === false && types.isSharedArrayBuffer(V.buffer)) {
+ throw webidl.errors.exception({
+ header: "ArrayBuffer",
+ message: "SharedArrayBuffer is not allowed."
+ });
}
- /**
- * Inserts a FloatBE value at the given offset value.
- *
- * @param value { Number } The value to insert.
- * @param offset { Number } The offset to insert the value at.
- *
- * @return this
- */
- insertFloatBE(value, offset) {
- return this._insertNumberValue(Buffer.prototype.writeFloatBE, 4, value, offset);
+ return V;
+ };
+ webidl.converters.DataView = function(V, opts = {}) {
+ if (webidl.util.Type(V) !== "Object" || !types.isDataView(V)) {
+ throw webidl.errors.exception({
+ header: "DataView",
+ message: "Object is not a DataView."
+ });
}
- /**
- * Writes a FloatLE value to the current write position (or at optional offset).
- *
- * @param value { Number } The value to write.
- * @param offset { Number } The offset to write the value at.
- *
- * @return this
- */
- writeFloatLE(value, offset) {
- return this._writeNumberValue(Buffer.prototype.writeFloatLE, 4, value, offset);
+ if (opts.allowShared === false && types.isSharedArrayBuffer(V.buffer)) {
+ throw webidl.errors.exception({
+ header: "ArrayBuffer",
+ message: "SharedArrayBuffer is not allowed."
+ });
}
- /**
- * Inserts a FloatLE value at the given offset value.
- *
- * @param value { Number } The value to insert.
- * @param offset { Number } The offset to insert the value at.
- *
- * @return this
- */
- insertFloatLE(value, offset) {
- return this._insertNumberValue(Buffer.prototype.writeFloatLE, 4, value, offset);
+ return V;
+ };
+ webidl.converters.BufferSource = function(V, opts = {}) {
+ if (types.isAnyArrayBuffer(V)) {
+ return webidl.converters.ArrayBuffer(V, { ...opts, allowShared: false });
}
- // Double Floating Point
- /**
- * Reads an DoublEBE value from the current read position or an optionally provided offset.
- *
- * @param offset { Number } The offset to read data from (optional)
- * @return { Number }
- */
- readDoubleBE(offset) {
- return this._readNumberValue(Buffer.prototype.readDoubleBE, 8, offset);
+ if (types.isTypedArray(V)) {
+ return webidl.converters.TypedArray(V, V.constructor, { ...opts, allowShared: false });
}
- /**
- * Reads an DoubleLE value from the current read position or an optionally provided offset.
- *
- * @param offset { Number } The offset to read data from (optional)
- * @return { Number }
- */
- readDoubleLE(offset) {
- return this._readNumberValue(Buffer.prototype.readDoubleLE, 8, offset);
+ if (types.isDataView(V)) {
+ return webidl.converters.DataView(V, opts, { ...opts, allowShared: false });
}
- /**
- * Writes a DoubleBE value to the current write position (or at optional offset).
- *
- * @param value { Number } The value to write.
- * @param offset { Number } The offset to write the value at.
- *
- * @return this
- */
- writeDoubleBE(value, offset) {
- return this._writeNumberValue(Buffer.prototype.writeDoubleBE, 8, value, offset);
+ throw new TypeError(`Could not convert ${V} to a BufferSource.`);
+ };
+ webidl.converters["sequence"] = webidl.sequenceConverter(
+ webidl.converters.ByteString
+ );
+ webidl.converters["sequence>"] = webidl.sequenceConverter(
+ webidl.converters["sequence"]
+ );
+ webidl.converters["record"] = webidl.recordConverter(
+ webidl.converters.ByteString,
+ webidl.converters.ByteString
+ );
+ module2.exports = {
+ webidl
+ };
+ }
+});
+
+// .yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/fetch/file.js
+var require_file = __commonJS({
+ ".yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/fetch/file.js"(exports, module2) {
+ "use strict";
+ var { Blob: Blob2, File: NativeFile } = require("node:buffer");
+ var { types } = require("node:util");
+ var { kState } = require_symbols2();
+ var { isBlobLike } = require_util2();
+ var { webidl } = require_webidl();
+ var { parseMIMEType, serializeAMimeType } = require_dataURL();
+ var { kEnumerableProperty } = require_util();
+ var encoder = new TextEncoder();
+ var File = class _File extends Blob2 {
+ constructor(fileBits, fileName, options = {}) {
+ webidl.argumentLengthCheck(arguments, 2, { header: "File constructor" });
+ fileBits = webidl.converters["sequence"](fileBits);
+ fileName = webidl.converters.USVString(fileName);
+ options = webidl.converters.FilePropertyBag(options);
+ const n = fileName;
+ let t = options.type;
+ let d;
+ substep: {
+ if (t) {
+ t = parseMIMEType(t);
+ if (t === "failure") {
+ t = "";
+ break substep;
+ }
+ t = serializeAMimeType(t).toLowerCase();
+ }
+ d = options.lastModified;
+ }
+ super(processBlobParts(fileBits, options), { type: t });
+ this[kState] = {
+ name: n,
+ lastModified: d,
+ type: t
+ };
}
- /**
- * Inserts a DoubleBE value at the given offset value.
- *
- * @param value { Number } The value to insert.
- * @param offset { Number } The offset to insert the value at.
- *
- * @return this
- */
- insertDoubleBE(value, offset) {
- return this._insertNumberValue(Buffer.prototype.writeDoubleBE, 8, value, offset);
+ get name() {
+ webidl.brandCheck(this, _File);
+ return this[kState].name;
}
- /**
- * Writes a DoubleLE value to the current write position (or at optional offset).
- *
- * @param value { Number } The value to write.
- * @param offset { Number } The offset to write the value at.
- *
- * @return this
- */
- writeDoubleLE(value, offset) {
- return this._writeNumberValue(Buffer.prototype.writeDoubleLE, 8, value, offset);
+ get lastModified() {
+ webidl.brandCheck(this, _File);
+ return this[kState].lastModified;
}
- /**
- * Inserts a DoubleLE value at the given offset value.
- *
- * @param value { Number } The value to insert.
- * @param offset { Number } The offset to insert the value at.
- *
- * @return this
- */
- insertDoubleLE(value, offset) {
- return this._insertNumberValue(Buffer.prototype.writeDoubleLE, 8, value, offset);
+ get type() {
+ webidl.brandCheck(this, _File);
+ return this[kState].type;
+ }
+ };
+ var FileLike = class _FileLike {
+ constructor(blobLike, fileName, options = {}) {
+ const n = fileName;
+ const t = options.type;
+ const d = options.lastModified ?? Date.now();
+ this[kState] = {
+ blobLike,
+ name: n,
+ type: t,
+ lastModified: d
+ };
}
- // Strings
- /**
- * Reads a String from the current read position.
- *
- * @param arg1 { Number | String } The number of bytes to read as a String, or the BufferEncoding to use for
- * the string (Defaults to instance level encoding).
- * @param encoding { String } The BufferEncoding to use for the string (Defaults to instance level encoding).
- *
- * @return { String }
- */
- readString(arg1, encoding) {
- let lengthVal;
- if (typeof arg1 === "number") {
- utils_1.checkLengthValue(arg1);
- lengthVal = Math.min(arg1, this.length - this._readOffset);
- } else {
- encoding = arg1;
- lengthVal = this.length - this._readOffset;
- }
- if (typeof encoding !== "undefined") {
- utils_1.checkEncoding(encoding);
- }
- const value = this._buff.slice(this._readOffset, this._readOffset + lengthVal).toString(encoding || this._encoding);
- this._readOffset += lengthVal;
- return value;
+ stream(...args) {
+ webidl.brandCheck(this, _FileLike);
+ return this[kState].blobLike.stream(...args);
}
- /**
- * Inserts a String
- *
- * @param value { String } The String value to insert.
- * @param offset { Number } The offset to insert the string at.
- * @param encoding { String } The BufferEncoding to use for writing strings (defaults to instance encoding).
- *
- * @return this
- */
- insertString(value, offset, encoding) {
- utils_1.checkOffsetValue(offset);
- return this._handleString(value, true, offset, encoding);
+ arrayBuffer(...args) {
+ webidl.brandCheck(this, _FileLike);
+ return this[kState].blobLike.arrayBuffer(...args);
}
- /**
- * Writes a String
- *
- * @param value { String } The String value to write.
- * @param arg2 { Number | String } The offset to write the string at, or the BufferEncoding to use.
- * @param encoding { String } The BufferEncoding to use for writing strings (defaults to instance encoding).
- *
- * @return this
- */
- writeString(value, arg2, encoding) {
- return this._handleString(value, false, arg2, encoding);
+ slice(...args) {
+ webidl.brandCheck(this, _FileLike);
+ return this[kState].blobLike.slice(...args);
}
- /**
- * Reads a null-terminated String from the current read position.
- *
- * @param encoding { String } The BufferEncoding to use for the string (Defaults to instance level encoding).
- *
- * @return { String }
- */
- readStringNT(encoding) {
- if (typeof encoding !== "undefined") {
- utils_1.checkEncoding(encoding);
- }
- let nullPos = this.length;
- for (let i = this._readOffset; i < this.length; i++) {
- if (this._buff[i] === 0) {
- nullPos = i;
- break;
- }
- }
- const value = this._buff.slice(this._readOffset, nullPos);
- this._readOffset = nullPos + 1;
- return value.toString(encoding || this._encoding);
+ text(...args) {
+ webidl.brandCheck(this, _FileLike);
+ return this[kState].blobLike.text(...args);
}
- /**
- * Inserts a null-terminated String.
- *
- * @param value { String } The String value to write.
- * @param arg2 { Number | String } The offset to write the string to, or the BufferEncoding to use.
- * @param encoding { String } The BufferEncoding to use for writing strings (defaults to instance encoding).
- *
- * @return this
- */
- insertStringNT(value, offset, encoding) {
- utils_1.checkOffsetValue(offset);
- this.insertString(value, offset, encoding);
- this.insertUInt8(0, offset + value.length);
- return this;
+ get size() {
+ webidl.brandCheck(this, _FileLike);
+ return this[kState].blobLike.size;
}
- /**
- * Writes a null-terminated String.
- *
- * @param value { String } The String value to write.
- * @param arg2 { Number | String } The offset to write the string to, or the BufferEncoding to use.
- * @param encoding { String } The BufferEncoding to use for writing strings (defaults to instance encoding).
- *
- * @return this
- */
- writeStringNT(value, arg2, encoding) {
- this.writeString(value, arg2, encoding);
- this.writeUInt8(0, typeof arg2 === "number" ? arg2 + value.length : this.writeOffset);
- return this;
+ get type() {
+ webidl.brandCheck(this, _FileLike);
+ return this[kState].blobLike.type;
}
- // Buffers
- /**
- * Reads a Buffer from the internal read position.
- *
- * @param length { Number } The length of data to read as a Buffer.
- *
- * @return { Buffer }
- */
- readBuffer(length) {
- if (typeof length !== "undefined") {
- utils_1.checkLengthValue(length);
- }
- const lengthVal = typeof length === "number" ? length : this.length;
- const endPoint = Math.min(this.length, this._readOffset + lengthVal);
- const value = this._buff.slice(this._readOffset, endPoint);
- this._readOffset = endPoint;
- return value;
+ get name() {
+ webidl.brandCheck(this, _FileLike);
+ return this[kState].name;
}
- /**
- * Writes a Buffer to the current write position.
- *
- * @param value { Buffer } The Buffer to write.
- * @param offset { Number } The offset to write the Buffer to.
- *
- * @return this
- */
- insertBuffer(value, offset) {
- utils_1.checkOffsetValue(offset);
- return this._handleBuffer(value, true, offset);
+ get lastModified() {
+ webidl.brandCheck(this, _FileLike);
+ return this[kState].lastModified;
}
- /**
- * Writes a Buffer to the current write position.
- *
- * @param value { Buffer } The Buffer to write.
- * @param offset { Number } The offset to write the Buffer to.
- *
- * @return this
- */
- writeBuffer(value, offset) {
- return this._handleBuffer(value, false, offset);
+ get [Symbol.toStringTag]() {
+ return "File";
}
- /**
- * Reads a null-terminated Buffer from the current read poisiton.
- *
- * @return { Buffer }
- */
- readBufferNT() {
- let nullPos = this.length;
- for (let i = this._readOffset; i < this.length; i++) {
- if (this._buff[i] === 0) {
- nullPos = i;
- break;
- }
+ };
+ Object.defineProperties(File.prototype, {
+ [Symbol.toStringTag]: {
+ value: "File",
+ configurable: true
+ },
+ name: kEnumerableProperty,
+ lastModified: kEnumerableProperty
+ });
+ webidl.converters.Blob = webidl.interfaceConverter(Blob2);
+ webidl.converters.BlobPart = function(V, opts) {
+ if (webidl.util.Type(V) === "Object") {
+ if (isBlobLike(V)) {
+ return webidl.converters.Blob(V, { strict: false });
}
- const value = this._buff.slice(this._readOffset, nullPos);
- this._readOffset = nullPos + 1;
- return value;
- }
- /**
- * Inserts a null-terminated Buffer.
- *
- * @param value { Buffer } The Buffer to write.
- * @param offset { Number } The offset to write the Buffer to.
- *
- * @return this
- */
- insertBufferNT(value, offset) {
- utils_1.checkOffsetValue(offset);
- this.insertBuffer(value, offset);
- this.insertUInt8(0, offset + value.length);
- return this;
- }
- /**
- * Writes a null-terminated Buffer.
- *
- * @param value { Buffer } The Buffer to write.
- * @param offset { Number } The offset to write the Buffer to.
- *
- * @return this
- */
- writeBufferNT(value, offset) {
- if (typeof offset !== "undefined") {
- utils_1.checkOffsetValue(offset);
+ if (ArrayBuffer.isView(V) || types.isAnyArrayBuffer(V)) {
+ return webidl.converters.BufferSource(V, opts);
}
- this.writeBuffer(value, offset);
- this.writeUInt8(0, typeof offset === "number" ? offset + value.length : this._writeOffset);
- return this;
- }
- /**
- * Clears the SmartBuffer instance to its original empty state.
- */
- clear() {
- this._writeOffset = 0;
- this._readOffset = 0;
- this.length = 0;
- return this;
}
- /**
- * Gets the remaining data left to be read from the SmartBuffer instance.
- *
- * @return { Number }
- */
- remaining() {
- return this.length - this._readOffset;
+ return webidl.converters.USVString(V, opts);
+ };
+ webidl.converters["sequence"] = webidl.sequenceConverter(
+ webidl.converters.BlobPart
+ );
+ webidl.converters.FilePropertyBag = webidl.dictionaryConverter([
+ {
+ key: "lastModified",
+ converter: webidl.converters["long long"],
+ get defaultValue() {
+ return Date.now();
+ }
+ },
+ {
+ key: "type",
+ converter: webidl.converters.DOMString,
+ defaultValue: ""
+ },
+ {
+ key: "endings",
+ converter: (value) => {
+ value = webidl.converters.DOMString(value);
+ value = value.toLowerCase();
+ if (value !== "native") {
+ value = "transparent";
+ }
+ return value;
+ },
+ defaultValue: "transparent"
}
- /**
- * Gets the current read offset value of the SmartBuffer instance.
- *
- * @return { Number }
- */
- get readOffset() {
- return this._readOffset;
+ ]);
+ function processBlobParts(parts, options) {
+ const bytes = [];
+ for (const element of parts) {
+ if (typeof element === "string") {
+ let s = element;
+ if (options.endings === "native") {
+ s = convertLineEndingsNative(s);
+ }
+ bytes.push(encoder.encode(s));
+ } else if (ArrayBuffer.isView(element) || types.isArrayBuffer(element)) {
+ if (element.buffer) {
+ bytes.push(
+ new Uint8Array(element.buffer, element.byteOffset, element.byteLength)
+ );
+ } else {
+ bytes.push(new Uint8Array(element));
+ }
+ } else if (isBlobLike(element)) {
+ bytes.push(element);
+ }
}
- /**
- * Sets the read offset value of the SmartBuffer instance.
- *
- * @param offset { Number } - The offset value to set.
- */
- set readOffset(offset) {
- utils_1.checkOffsetValue(offset);
- utils_1.checkTargetOffset(offset, this);
- this._readOffset = offset;
+ return bytes;
+ }
+ function convertLineEndingsNative(s) {
+ let nativeLineEnding = "\n";
+ if (process.platform === "win32") {
+ nativeLineEnding = "\r\n";
}
- /**
- * Gets the current write offset value of the SmartBuffer instance.
- *
- * @return { Number }
- */
- get writeOffset() {
- return this._writeOffset;
+ return s.replace(/\r?\n/g, nativeLineEnding);
+ }
+ function isFileLike(object) {
+ return NativeFile && object instanceof NativeFile || object instanceof File || object && (typeof object.stream === "function" || typeof object.arrayBuffer === "function") && object[Symbol.toStringTag] === "File";
+ }
+ module2.exports = { File, FileLike, isFileLike };
+ }
+});
+
+// .yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/fetch/formdata.js
+var require_formdata = __commonJS({
+ ".yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/fetch/formdata.js"(exports, module2) {
+ "use strict";
+ var { isBlobLike, toUSVString, makeIterator } = require_util2();
+ var { kState } = require_symbols2();
+ var { kEnumerableProperty } = require_util();
+ var { File: UndiciFile, FileLike, isFileLike } = require_file();
+ var { webidl } = require_webidl();
+ var { File: NativeFile } = require("node:buffer");
+ var File = NativeFile ?? UndiciFile;
+ var FormData = class _FormData {
+ constructor(form) {
+ if (form !== void 0) {
+ throw webidl.errors.conversionFailed({
+ prefix: "FormData constructor",
+ argument: "Argument 1",
+ types: ["undefined"]
+ });
+ }
+ this[kState] = [];
}
- /**
- * Sets the write offset value of the SmartBuffer instance.
- *
- * @param offset { Number } - The offset value to set.
- */
- set writeOffset(offset) {
- utils_1.checkOffsetValue(offset);
- utils_1.checkTargetOffset(offset, this);
- this._writeOffset = offset;
+ append(name, value, filename = void 0) {
+ webidl.brandCheck(this, _FormData);
+ webidl.argumentLengthCheck(arguments, 2, { header: "FormData.append" });
+ if (arguments.length === 3 && !isBlobLike(value)) {
+ throw new TypeError(
+ "Failed to execute 'append' on 'FormData': parameter 2 is not of type 'Blob'"
+ );
+ }
+ name = webidl.converters.USVString(name);
+ value = isBlobLike(value) ? webidl.converters.Blob(value, { strict: false }) : webidl.converters.USVString(value);
+ filename = arguments.length === 3 ? webidl.converters.USVString(filename) : void 0;
+ const entry = makeEntry(name, value, filename);
+ this[kState].push(entry);
+ }
+ delete(name) {
+ webidl.brandCheck(this, _FormData);
+ webidl.argumentLengthCheck(arguments, 1, { header: "FormData.delete" });
+ name = webidl.converters.USVString(name);
+ this[kState] = this[kState].filter((entry) => entry.name !== name);
+ }
+ get(name) {
+ webidl.brandCheck(this, _FormData);
+ webidl.argumentLengthCheck(arguments, 1, { header: "FormData.get" });
+ name = webidl.converters.USVString(name);
+ const idx = this[kState].findIndex((entry) => entry.name === name);
+ if (idx === -1) {
+ return null;
+ }
+ return this[kState][idx].value;
}
- /**
- * Gets the currently set string encoding of the SmartBuffer instance.
- *
- * @return { BufferEncoding } The string Buffer encoding currently set.
- */
- get encoding() {
- return this._encoding;
+ getAll(name) {
+ webidl.brandCheck(this, _FormData);
+ webidl.argumentLengthCheck(arguments, 1, { header: "FormData.getAll" });
+ name = webidl.converters.USVString(name);
+ return this[kState].filter((entry) => entry.name === name).map((entry) => entry.value);
}
- /**
- * Sets the string encoding of the SmartBuffer instance.
- *
- * @param encoding { BufferEncoding } The string Buffer encoding to set.
- */
- set encoding(encoding) {
- utils_1.checkEncoding(encoding);
- this._encoding = encoding;
+ has(name) {
+ webidl.brandCheck(this, _FormData);
+ webidl.argumentLengthCheck(arguments, 1, { header: "FormData.has" });
+ name = webidl.converters.USVString(name);
+ return this[kState].findIndex((entry) => entry.name === name) !== -1;
}
- /**
- * Gets the underlying internal Buffer. (This includes unmanaged data in the Buffer)
- *
- * @return { Buffer } The Buffer value.
- */
- get internalBuffer() {
- return this._buff;
+ set(name, value, filename = void 0) {
+ webidl.brandCheck(this, _FormData);
+ webidl.argumentLengthCheck(arguments, 2, { header: "FormData.set" });
+ if (arguments.length === 3 && !isBlobLike(value)) {
+ throw new TypeError(
+ "Failed to execute 'set' on 'FormData': parameter 2 is not of type 'Blob'"
+ );
+ }
+ name = webidl.converters.USVString(name);
+ value = isBlobLike(value) ? webidl.converters.Blob(value, { strict: false }) : webidl.converters.USVString(value);
+ filename = arguments.length === 3 ? toUSVString(filename) : void 0;
+ const entry = makeEntry(name, value, filename);
+ const idx = this[kState].findIndex((entry2) => entry2.name === name);
+ if (idx !== -1) {
+ this[kState] = [
+ ...this[kState].slice(0, idx),
+ entry,
+ ...this[kState].slice(idx + 1).filter((entry2) => entry2.name !== name)
+ ];
+ } else {
+ this[kState].push(entry);
+ }
}
- /**
- * Gets the value of the internal managed Buffer (Includes managed data only)
- *
- * @param { Buffer }
- */
- toBuffer() {
- return this._buff.slice(0, this.length);
+ entries() {
+ webidl.brandCheck(this, _FormData);
+ return makeIterator(
+ () => this[kState],
+ "FormData",
+ "key+value",
+ "name",
+ "value"
+ );
}
- /**
- * Gets the String value of the internal managed Buffer
- *
- * @param encoding { String } The BufferEncoding to display the Buffer as (defaults to instance level encoding).
- */
- toString(encoding) {
- const encodingVal = typeof encoding === "string" ? encoding : this._encoding;
- utils_1.checkEncoding(encodingVal);
- return this._buff.toString(encodingVal, 0, this.length);
+ keys() {
+ webidl.brandCheck(this, _FormData);
+ return makeIterator(
+ () => this[kState],
+ "FormData",
+ "key",
+ "name",
+ "value"
+ );
}
- /**
- * Destroys the SmartBuffer instance.
- */
- destroy() {
- this.clear();
- return this;
+ values() {
+ webidl.brandCheck(this, _FormData);
+ return makeIterator(
+ () => this[kState],
+ "FormData",
+ "value",
+ "name",
+ "value"
+ );
}
/**
- * Handles inserting and writing strings.
- *
- * @param value { String } The String value to insert.
- * @param isInsert { Boolean } True if inserting a string, false if writing.
- * @param arg2 { Number | String } The offset to insert the string at, or the BufferEncoding to use.
- * @param encoding { String } The BufferEncoding to use for writing strings (defaults to instance encoding).
+ * @param {(value: string, key: string, self: FormData) => void} callbackFn
+ * @param {unknown} thisArg
*/
- _handleString(value, isInsert, arg3, encoding) {
- let offsetVal = this._writeOffset;
- let encodingVal = this._encoding;
- if (typeof arg3 === "number") {
- offsetVal = arg3;
- } else if (typeof arg3 === "string") {
- utils_1.checkEncoding(arg3);
- encodingVal = arg3;
- }
- if (typeof encoding === "string") {
- utils_1.checkEncoding(encoding);
- encodingVal = encoding;
- }
- const byteLength = Buffer.byteLength(value, encodingVal);
- if (isInsert) {
- this.ensureInsertable(byteLength, offsetVal);
- } else {
- this._ensureWriteable(byteLength, offsetVal);
- }
- this._buff.write(value, offsetVal, byteLength, encodingVal);
- if (isInsert) {
- this._writeOffset += byteLength;
- } else {
- if (typeof arg3 === "number") {
- this._writeOffset = Math.max(this._writeOffset, offsetVal + byteLength);
- } else {
- this._writeOffset += byteLength;
- }
+ forEach(callbackFn, thisArg = globalThis) {
+ webidl.brandCheck(this, _FormData);
+ webidl.argumentLengthCheck(arguments, 1, { header: "FormData.forEach" });
+ if (typeof callbackFn !== "function") {
+ throw new TypeError(
+ "Failed to execute 'forEach' on 'FormData': parameter 1 is not of type 'Function'."
+ );
}
- return this;
+ for (const [key, value] of this) {
+ callbackFn.call(thisArg, value, key, this);
+ }
+ }
+ };
+ FormData.prototype[Symbol.iterator] = FormData.prototype.entries;
+ Object.defineProperties(FormData.prototype, {
+ append: kEnumerableProperty,
+ delete: kEnumerableProperty,
+ get: kEnumerableProperty,
+ getAll: kEnumerableProperty,
+ has: kEnumerableProperty,
+ set: kEnumerableProperty,
+ entries: kEnumerableProperty,
+ keys: kEnumerableProperty,
+ values: kEnumerableProperty,
+ forEach: kEnumerableProperty,
+ [Symbol.iterator]: { enumerable: false },
+ [Symbol.toStringTag]: {
+ value: "FormData",
+ configurable: true
}
- /**
- * Handles writing or insert of a Buffer.
- *
- * @param value { Buffer } The Buffer to write.
- * @param offset { Number } The offset to write the Buffer to.
- */
- _handleBuffer(value, isInsert, offset) {
- const offsetVal = typeof offset === "number" ? offset : this._writeOffset;
- if (isInsert) {
- this.ensureInsertable(value.length, offsetVal);
- } else {
- this._ensureWriteable(value.length, offsetVal);
+ });
+ function makeEntry(name, value, filename) {
+ name = Buffer.from(name).toString("utf8");
+ if (typeof value === "string") {
+ value = Buffer.from(value).toString("utf8");
+ } else {
+ if (!isFileLike(value)) {
+ value = value instanceof Blob ? new File([value], "blob", { type: value.type }) : new FileLike(value, "blob", { type: value.type });
}
- value.copy(this._buff, offsetVal);
- if (isInsert) {
- this._writeOffset += value.length;
- } else {
- if (typeof offset === "number") {
- this._writeOffset = Math.max(this._writeOffset, offsetVal + value.length);
- } else {
- this._writeOffset += value.length;
- }
+ if (filename !== void 0) {
+ const options = {
+ type: value.type,
+ lastModified: value.lastModified
+ };
+ value = NativeFile && value instanceof NativeFile || value instanceof UndiciFile ? new File([value], filename, options) : new FileLike(value, filename, options);
}
- return this;
}
- /**
- * Ensures that the internal Buffer is large enough to read data.
- *
- * @param length { Number } The length of the data that needs to be read.
- * @param offset { Number } The offset of the data that needs to be read.
- */
- ensureReadable(length, offset) {
- let offsetVal = this._readOffset;
- if (typeof offset !== "undefined") {
- utils_1.checkOffsetValue(offset);
- offsetVal = offset;
+ return { name, value };
+ }
+ module2.exports = { FormData };
+ }
+});
+
+// .yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/fetch/body.js
+var require_body = __commonJS({
+ ".yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/fetch/body.js"(exports, module2) {
+ "use strict";
+ var Busboy = require_main();
+ var util = require_util();
+ var {
+ ReadableStreamFrom,
+ isBlobLike,
+ isReadableStreamLike,
+ readableStreamClose,
+ createDeferredPromise,
+ fullyReadBody,
+ extractMimeType
+ } = require_util2();
+ var { FormData } = require_formdata();
+ var { kState } = require_symbols2();
+ var { webidl } = require_webidl();
+ var { Blob: Blob2, File: NativeFile } = require("node:buffer");
+ var { kBodyUsed } = require_symbols();
+ var assert3 = require("node:assert");
+ var { isErrored } = require_util();
+ var { isUint8Array, isArrayBuffer } = require("util/types");
+ var { File: UndiciFile } = require_file();
+ var { serializeAMimeType } = require_dataURL();
+ var File = NativeFile ?? UndiciFile;
+ var textEncoder = new TextEncoder();
+ var textDecoder = new TextDecoder();
+ function extractBody(object, keepalive = false) {
+ let stream = null;
+ if (object instanceof ReadableStream) {
+ stream = object;
+ } else if (isBlobLike(object)) {
+ stream = object.stream();
+ } else {
+ stream = new ReadableStream({
+ async pull(controller) {
+ const buffer = typeof source === "string" ? textEncoder.encode(source) : source;
+ if (buffer.byteLength) {
+ controller.enqueue(buffer);
+ }
+ queueMicrotask(() => readableStreamClose(controller));
+ },
+ start() {
+ },
+ type: "bytes"
+ });
+ }
+ assert3(isReadableStreamLike(stream));
+ let action = null;
+ let source = null;
+ let length = null;
+ let type = null;
+ if (typeof object === "string") {
+ source = object;
+ type = "text/plain;charset=UTF-8";
+ } else if (object instanceof URLSearchParams) {
+ source = object.toString();
+ type = "application/x-www-form-urlencoded;charset=UTF-8";
+ } else if (isArrayBuffer(object)) {
+ source = new Uint8Array(object.slice());
+ } else if (ArrayBuffer.isView(object)) {
+ source = new Uint8Array(object.buffer.slice(object.byteOffset, object.byteOffset + object.byteLength));
+ } else if (util.isFormDataLike(object)) {
+ const boundary = `----formdata-undici-0${`${Math.floor(Math.random() * 1e11)}`.padStart(11, "0")}`;
+ const prefix = `--${boundary}\r
+Content-Disposition: form-data`;
+ const escape = (str) => str.replace(/\n/g, "%0A").replace(/\r/g, "%0D").replace(/"/g, "%22");
+ const normalizeLinefeeds = (value) => value.replace(/\r?\n|\r/g, "\r\n");
+ const blobParts = [];
+ const rn = new Uint8Array([13, 10]);
+ length = 0;
+ let hasUnknownSizeValue = false;
+ for (const [name, value] of object) {
+ if (typeof value === "string") {
+ const chunk2 = textEncoder.encode(prefix + `; name="${escape(normalizeLinefeeds(name))}"\r
+\r
+${normalizeLinefeeds(value)}\r
+`);
+ blobParts.push(chunk2);
+ length += chunk2.byteLength;
+ } else {
+ const chunk2 = textEncoder.encode(`${prefix}; name="${escape(normalizeLinefeeds(name))}"` + (value.name ? `; filename="${escape(value.name)}"` : "") + `\r
+Content-Type: ${value.type || "application/octet-stream"}\r
+\r
+`);
+ blobParts.push(chunk2, value, rn);
+ if (typeof value.size === "number") {
+ length += chunk2.byteLength + value.size + rn.byteLength;
+ } else {
+ hasUnknownSizeValue = true;
+ }
+ }
}
- if (offsetVal < 0 || offsetVal + length > this.length) {
- throw new Error(utils_1.ERRORS.INVALID_READ_BEYOND_BOUNDS);
+ const chunk = textEncoder.encode(`--${boundary}--`);
+ blobParts.push(chunk);
+ length += chunk.byteLength;
+ if (hasUnknownSizeValue) {
+ length = null;
+ }
+ source = object;
+ action = async function* () {
+ for (const part of blobParts) {
+ if (part.stream) {
+ yield* part.stream();
+ } else {
+ yield part;
+ }
+ }
+ };
+ type = `multipart/form-data; boundary=${boundary}`;
+ } else if (isBlobLike(object)) {
+ source = object;
+ length = object.size;
+ if (object.type) {
+ type = object.type;
+ }
+ } else if (typeof object[Symbol.asyncIterator] === "function") {
+ if (keepalive) {
+ throw new TypeError("keepalive");
+ }
+ if (util.isDisturbed(object) || object.locked) {
+ throw new TypeError(
+ "Response body object should not be disturbed or locked"
+ );
}
+ stream = object instanceof ReadableStream ? object : ReadableStreamFrom(object);
}
- /**
- * Ensures that the internal Buffer is large enough to insert data.
- *
- * @param dataLength { Number } The length of the data that needs to be written.
- * @param offset { Number } The offset of the data to be written.
- */
- ensureInsertable(dataLength, offset) {
- utils_1.checkOffsetValue(offset);
- this._ensureCapacity(this.length + dataLength);
- if (offset < this.length) {
- this._buff.copy(this._buff, offset + dataLength, offset, this._buff.length);
- }
- if (offset + dataLength > this.length) {
- this.length = offset + dataLength;
+ if (typeof source === "string" || util.isBuffer(source)) {
+ length = Buffer.byteLength(source);
+ }
+ if (action != null) {
+ let iterator;
+ stream = new ReadableStream({
+ async start() {
+ iterator = action(object)[Symbol.asyncIterator]();
+ },
+ async pull(controller) {
+ const { value, done } = await iterator.next();
+ if (done) {
+ queueMicrotask(() => {
+ controller.close();
+ controller.byobRequest?.respond(0);
+ });
+ } else {
+ if (!isErrored(stream)) {
+ const buffer = new Uint8Array(value);
+ if (buffer.byteLength) {
+ controller.enqueue(buffer);
+ }
+ }
+ }
+ return controller.desiredSize > 0;
+ },
+ async cancel(reason) {
+ await iterator.return();
+ },
+ type: "bytes"
+ });
+ }
+ const body = { stream, source, length };
+ return [body, type];
+ }
+ function safelyExtractBody(object, keepalive = false) {
+ if (object instanceof ReadableStream) {
+ assert3(!util.isDisturbed(object), "The body has already been consumed.");
+ assert3(!object.locked, "The stream is locked.");
+ }
+ return extractBody(object, keepalive);
+ }
+ function cloneBody(body) {
+ const [out1, out2] = body.stream.tee();
+ const out2Clone = structuredClone(out2, { transfer: [out2] });
+ const [, finalClone] = out2Clone.tee();
+ body.stream = out1;
+ return {
+ stream: finalClone,
+ length: body.length,
+ source: body.source
+ };
+ }
+ async function* consumeBody(body) {
+ if (body) {
+ if (isUint8Array(body)) {
+ yield body;
} else {
- this.length += dataLength;
+ const stream = body.stream;
+ if (util.isDisturbed(stream)) {
+ throw new TypeError("The body has already been consumed.");
+ }
+ if (stream.locked) {
+ throw new TypeError("The stream is locked.");
+ }
+ stream[kBodyUsed] = true;
+ yield* stream;
}
}
- /**
- * Ensures that the internal Buffer is large enough to write data.
- *
- * @param dataLength { Number } The length of the data that needs to be written.
- * @param offset { Number } The offset of the data to be written (defaults to writeOffset).
- */
- _ensureWriteable(dataLength, offset) {
- const offsetVal = typeof offset === "number" ? offset : this._writeOffset;
- this._ensureCapacity(offsetVal + dataLength);
- if (offsetVal + dataLength > this.length) {
- this.length = offsetVal + dataLength;
- }
+ }
+ function throwIfAborted(state) {
+ if (state.aborted) {
+ throw new DOMException("The operation was aborted.", "AbortError");
}
- /**
- * Ensures that the internal Buffer is large enough to write at least the given amount of data.
- *
- * @param minLength { Number } The minimum length of the data needs to be written.
- */
- _ensureCapacity(minLength) {
- const oldLength = this._buff.length;
- if (minLength > oldLength) {
- let data = this._buff;
- let newLength = oldLength * 3 / 2 + 1;
- if (newLength < minLength) {
- newLength = minLength;
+ }
+ function bodyMixinMethods(instance) {
+ const methods = {
+ blob() {
+ return specConsumeBody(this, (bytes) => {
+ let mimeType = bodyMimeType(this);
+ if (mimeType === null) {
+ mimeType = "";
+ } else if (mimeType) {
+ mimeType = serializeAMimeType(mimeType);
+ }
+ return new Blob2([bytes], { type: mimeType });
+ }, instance);
+ },
+ arrayBuffer() {
+ return specConsumeBody(this, (bytes) => {
+ return new Uint8Array(bytes).buffer;
+ }, instance);
+ },
+ text() {
+ return specConsumeBody(this, utf8DecodeBytes, instance);
+ },
+ json() {
+ return specConsumeBody(this, parseJSONFromBytes, instance);
+ },
+ async formData() {
+ webidl.brandCheck(this, instance);
+ throwIfAborted(this[kState]);
+ const mimeType = bodyMimeType(this);
+ if (mimeType !== null && mimeType.essence === "multipart/form-data") {
+ const headers = {};
+ for (const [key, value] of this.headers)
+ headers[key] = value;
+ const responseFormData = new FormData();
+ let busboy;
+ try {
+ busboy = new Busboy({
+ headers,
+ preservePath: true
+ });
+ } catch (err) {
+ throw new DOMException(`${err}`, "AbortError");
+ }
+ busboy.on("field", (name, value) => {
+ responseFormData.append(name, value);
+ });
+ busboy.on("file", (name, value, filename, encoding, mimeType2) => {
+ const chunks = [];
+ if (encoding === "base64" || encoding.toLowerCase() === "base64") {
+ let base64chunk = "";
+ value.on("data", (chunk) => {
+ base64chunk += chunk.toString().replace(/[\r\n]/gm, "");
+ const end = base64chunk.length - base64chunk.length % 4;
+ chunks.push(Buffer.from(base64chunk.slice(0, end), "base64"));
+ base64chunk = base64chunk.slice(end);
+ });
+ value.on("end", () => {
+ chunks.push(Buffer.from(base64chunk, "base64"));
+ responseFormData.append(name, new File(chunks, filename, { type: mimeType2 }));
+ });
+ } else {
+ value.on("data", (chunk) => {
+ chunks.push(chunk);
+ });
+ value.on("end", () => {
+ responseFormData.append(name, new File(chunks, filename, { type: mimeType2 }));
+ });
+ }
+ });
+ const busboyResolve = new Promise((resolve, reject) => {
+ busboy.on("finish", resolve);
+ busboy.on("error", (err) => reject(new TypeError(err)));
+ });
+ if (this.body !== null)
+ for await (const chunk of consumeBody(this[kState].body))
+ busboy.write(chunk);
+ busboy.end();
+ await busboyResolve;
+ return responseFormData;
+ } else if (mimeType !== null && mimeType.essence === "application/x-www-form-urlencoded") {
+ let entries;
+ try {
+ let text = "";
+ const streamingDecoder = new TextDecoder("utf-8", { ignoreBOM: true });
+ for await (const chunk of consumeBody(this[kState].body)) {
+ if (!isUint8Array(chunk)) {
+ throw new TypeError("Expected Uint8Array chunk");
+ }
+ text += streamingDecoder.decode(chunk, { stream: true });
+ }
+ text += streamingDecoder.decode();
+ entries = new URLSearchParams(text);
+ } catch (err) {
+ throw new TypeError(void 0, { cause: err });
+ }
+ const formData = new FormData();
+ for (const [name, value] of entries) {
+ formData.append(name, value);
+ }
+ return formData;
+ } else {
+ await Promise.resolve();
+ throwIfAborted(this[kState]);
+ throw webidl.errors.exception({
+ header: `${instance.name}.formData`,
+ message: "Could not parse content as FormData."
+ });
}
- this._buff = Buffer.allocUnsafe(newLength);
- data.copy(this._buff, 0, 0, oldLength);
}
+ };
+ return methods;
+ }
+ function mixinBody(prototype) {
+ Object.assign(prototype.prototype, bodyMixinMethods(prototype));
+ }
+ async function specConsumeBody(object, convertBytesToJSValue, instance) {
+ webidl.brandCheck(object, instance);
+ throwIfAborted(object[kState]);
+ if (bodyUnusable(object[kState].body)) {
+ throw new TypeError("Body is unusable");
}
- /**
- * Reads a numeric number value using the provided function.
- *
- * @typeparam T { number | bigint } The type of the value to be read
- *
- * @param func { Function(offset: number) => number } The function to read data on the internal Buffer with.
- * @param byteSize { Number } The number of bytes read.
- * @param offset { Number } The offset to read from (optional). When this is not provided, the managed readOffset is used instead.
- *
- * @returns { T } the number value
- */
- _readNumberValue(func, byteSize, offset) {
- this.ensureReadable(byteSize, offset);
- const value = func.call(this._buff, typeof offset === "number" ? offset : this._readOffset);
- if (typeof offset === "undefined") {
- this._readOffset += byteSize;
+ const promise = createDeferredPromise();
+ const errorSteps = (error) => promise.reject(error);
+ const successSteps = (data) => {
+ try {
+ promise.resolve(convertBytesToJSValue(data));
+ } catch (e) {
+ errorSteps(e);
}
- return value;
+ };
+ if (object[kState].body == null) {
+ successSteps(new Uint8Array());
+ return promise.promise;
}
- /**
- * Inserts a numeric number value based on the given offset and value.
- *
- * @typeparam T { number | bigint } The type of the value to be written
- *
- * @param func { Function(offset: T, offset?) => number} The function to write data on the internal Buffer with.
- * @param byteSize { Number } The number of bytes written.
- * @param value { T } The number value to write.
- * @param offset { Number } the offset to write the number at (REQUIRED).
- *
- * @returns SmartBuffer this buffer
- */
- _insertNumberValue(func, byteSize, value, offset) {
- utils_1.checkOffsetValue(offset);
- this.ensureInsertable(byteSize, offset);
- func.call(this._buff, value, offset);
- this._writeOffset += byteSize;
- return this;
+ await fullyReadBody(object[kState].body, successSteps, errorSteps);
+ return promise.promise;
+ }
+ function bodyUnusable(body) {
+ return body != null && (body.stream.locked || util.isDisturbed(body.stream));
+ }
+ function utf8DecodeBytes(buffer) {
+ if (buffer.length === 0) {
+ return "";
}
- /**
- * Writes a numeric number value based on the given offset and value.
- *
- * @typeparam T { number | bigint } The type of the value to be written
- *
- * @param func { Function(offset: T, offset?) => number} The function to write data on the internal Buffer with.
- * @param byteSize { Number } The number of bytes written.
- * @param value { T } The number value to write.
- * @param offset { Number } the offset to write the number at (REQUIRED).
- *
- * @returns SmartBuffer this buffer
- */
- _writeNumberValue(func, byteSize, value, offset) {
- if (typeof offset === "number") {
- if (offset < 0) {
- throw new Error(utils_1.ERRORS.INVALID_WRITE_BEYOND_BOUNDS);
- }
- utils_1.checkOffsetValue(offset);
- }
- const offsetVal = typeof offset === "number" ? offset : this._writeOffset;
- this._ensureWriteable(byteSize, offsetVal);
- func.call(this._buff, value, offsetVal);
- if (typeof offset === "number") {
- this._writeOffset = Math.max(this._writeOffset, offsetVal + byteSize);
- } else {
- this._writeOffset += byteSize;
- }
- return this;
+ if (buffer[0] === 239 && buffer[1] === 187 && buffer[2] === 191) {
+ buffer = buffer.subarray(3);
+ }
+ const output = textDecoder.decode(buffer);
+ return output;
+ }
+ function parseJSONFromBytes(bytes) {
+ return JSON.parse(utf8DecodeBytes(bytes));
+ }
+ function bodyMimeType(requestOrResponse) {
+ const headers = requestOrResponse[kState].headersList;
+ const mimeType = extractMimeType(headers);
+ if (mimeType === "failure") {
+ return null;
}
+ return mimeType;
+ }
+ module2.exports = {
+ extractBody,
+ safelyExtractBody,
+ cloneBody,
+ mixinBody
};
- exports.SmartBuffer = SmartBuffer;
- }
-});
-
-// .yarn/cache/socks-npm-2.7.1-17f2b53052-43f69dbc9f.zip/node_modules/socks/build/common/constants.js
-var require_constants2 = __commonJS({
- ".yarn/cache/socks-npm-2.7.1-17f2b53052-43f69dbc9f.zip/node_modules/socks/build/common/constants.js"(exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.SOCKS5_NO_ACCEPTABLE_AUTH = exports.SOCKS5_CUSTOM_AUTH_END = exports.SOCKS5_CUSTOM_AUTH_START = exports.SOCKS_INCOMING_PACKET_SIZES = exports.SocksClientState = exports.Socks5Response = exports.Socks5HostType = exports.Socks5Auth = exports.Socks4Response = exports.SocksCommand = exports.ERRORS = exports.DEFAULT_TIMEOUT = void 0;
- var DEFAULT_TIMEOUT = 3e4;
- exports.DEFAULT_TIMEOUT = DEFAULT_TIMEOUT;
- var ERRORS = {
- InvalidSocksCommand: "An invalid SOCKS command was provided. Valid options are connect, bind, and associate.",
- InvalidSocksCommandForOperation: "An invalid SOCKS command was provided. Only a subset of commands are supported for this operation.",
- InvalidSocksCommandChain: "An invalid SOCKS command was provided. Chaining currently only supports the connect command.",
- InvalidSocksClientOptionsDestination: "An invalid destination host was provided.",
- InvalidSocksClientOptionsExistingSocket: "An invalid existing socket was provided. This should be an instance of stream.Duplex.",
- InvalidSocksClientOptionsProxy: "Invalid SOCKS proxy details were provided.",
- InvalidSocksClientOptionsTimeout: "An invalid timeout value was provided. Please enter a value above 0 (in ms).",
- InvalidSocksClientOptionsProxiesLength: "At least two socks proxies must be provided for chaining.",
- InvalidSocksClientOptionsCustomAuthRange: "Custom auth must be a value between 0x80 and 0xFE.",
- InvalidSocksClientOptionsCustomAuthOptions: "When a custom_auth_method is provided, custom_auth_request_handler, custom_auth_response_size, and custom_auth_response_handler must also be provided and valid.",
- NegotiationError: "Negotiation error",
- SocketClosed: "Socket closed",
- ProxyConnectionTimedOut: "Proxy connection timed out",
- InternalError: "SocksClient internal error (this should not happen)",
- InvalidSocks4HandshakeResponse: "Received invalid Socks4 handshake response",
- Socks4ProxyRejectedConnection: "Socks4 Proxy rejected connection",
- InvalidSocks4IncomingConnectionResponse: "Socks4 invalid incoming connection response",
- Socks4ProxyRejectedIncomingBoundConnection: "Socks4 Proxy rejected incoming bound connection",
- InvalidSocks5InitialHandshakeResponse: "Received invalid Socks5 initial handshake response",
- InvalidSocks5IntiailHandshakeSocksVersion: "Received invalid Socks5 initial handshake (invalid socks version)",
- InvalidSocks5InitialHandshakeNoAcceptedAuthType: "Received invalid Socks5 initial handshake (no accepted authentication type)",
- InvalidSocks5InitialHandshakeUnknownAuthType: "Received invalid Socks5 initial handshake (unknown authentication type)",
- Socks5AuthenticationFailed: "Socks5 Authentication failed",
- InvalidSocks5FinalHandshake: "Received invalid Socks5 final handshake response",
- InvalidSocks5FinalHandshakeRejected: "Socks5 proxy rejected connection",
- InvalidSocks5IncomingConnectionResponse: "Received invalid Socks5 incoming connection response",
- Socks5ProxyRejectedIncomingBoundConnection: "Socks5 Proxy rejected incoming bound connection"
- };
- exports.ERRORS = ERRORS;
- var SOCKS_INCOMING_PACKET_SIZES = {
- Socks5InitialHandshakeResponse: 2,
- Socks5UserPassAuthenticationResponse: 2,
- // Command response + incoming connection (bind)
- Socks5ResponseHeader: 5,
- Socks5ResponseIPv4: 10,
- Socks5ResponseIPv6: 22,
- Socks5ResponseHostname: (hostNameLength) => hostNameLength + 7,
- // Command response + incoming connection (bind)
- Socks4Response: 8
- // 2 header + 2 port + 4 ip
- };
- exports.SOCKS_INCOMING_PACKET_SIZES = SOCKS_INCOMING_PACKET_SIZES;
- var SocksCommand;
- (function(SocksCommand2) {
- SocksCommand2[SocksCommand2["connect"] = 1] = "connect";
- SocksCommand2[SocksCommand2["bind"] = 2] = "bind";
- SocksCommand2[SocksCommand2["associate"] = 3] = "associate";
- })(SocksCommand || (SocksCommand = {}));
- exports.SocksCommand = SocksCommand;
- var Socks4Response;
- (function(Socks4Response2) {
- Socks4Response2[Socks4Response2["Granted"] = 90] = "Granted";
- Socks4Response2[Socks4Response2["Failed"] = 91] = "Failed";
- Socks4Response2[Socks4Response2["Rejected"] = 92] = "Rejected";
- Socks4Response2[Socks4Response2["RejectedIdent"] = 93] = "RejectedIdent";
- })(Socks4Response || (Socks4Response = {}));
- exports.Socks4Response = Socks4Response;
- var Socks5Auth;
- (function(Socks5Auth2) {
- Socks5Auth2[Socks5Auth2["NoAuth"] = 0] = "NoAuth";
- Socks5Auth2[Socks5Auth2["GSSApi"] = 1] = "GSSApi";
- Socks5Auth2[Socks5Auth2["UserPass"] = 2] = "UserPass";
- })(Socks5Auth || (Socks5Auth = {}));
- exports.Socks5Auth = Socks5Auth;
- var SOCKS5_CUSTOM_AUTH_START = 128;
- exports.SOCKS5_CUSTOM_AUTH_START = SOCKS5_CUSTOM_AUTH_START;
- var SOCKS5_CUSTOM_AUTH_END = 254;
- exports.SOCKS5_CUSTOM_AUTH_END = SOCKS5_CUSTOM_AUTH_END;
- var SOCKS5_NO_ACCEPTABLE_AUTH = 255;
- exports.SOCKS5_NO_ACCEPTABLE_AUTH = SOCKS5_NO_ACCEPTABLE_AUTH;
- var Socks5Response;
- (function(Socks5Response2) {
- Socks5Response2[Socks5Response2["Granted"] = 0] = "Granted";
- Socks5Response2[Socks5Response2["Failure"] = 1] = "Failure";
- Socks5Response2[Socks5Response2["NotAllowed"] = 2] = "NotAllowed";
- Socks5Response2[Socks5Response2["NetworkUnreachable"] = 3] = "NetworkUnreachable";
- Socks5Response2[Socks5Response2["HostUnreachable"] = 4] = "HostUnreachable";
- Socks5Response2[Socks5Response2["ConnectionRefused"] = 5] = "ConnectionRefused";
- Socks5Response2[Socks5Response2["TTLExpired"] = 6] = "TTLExpired";
- Socks5Response2[Socks5Response2["CommandNotSupported"] = 7] = "CommandNotSupported";
- Socks5Response2[Socks5Response2["AddressNotSupported"] = 8] = "AddressNotSupported";
- })(Socks5Response || (Socks5Response = {}));
- exports.Socks5Response = Socks5Response;
- var Socks5HostType;
- (function(Socks5HostType2) {
- Socks5HostType2[Socks5HostType2["IPv4"] = 1] = "IPv4";
- Socks5HostType2[Socks5HostType2["Hostname"] = 3] = "Hostname";
- Socks5HostType2[Socks5HostType2["IPv6"] = 4] = "IPv6";
- })(Socks5HostType || (Socks5HostType = {}));
- exports.Socks5HostType = Socks5HostType;
- var SocksClientState;
- (function(SocksClientState2) {
- SocksClientState2[SocksClientState2["Created"] = 0] = "Created";
- SocksClientState2[SocksClientState2["Connecting"] = 1] = "Connecting";
- SocksClientState2[SocksClientState2["Connected"] = 2] = "Connected";
- SocksClientState2[SocksClientState2["SentInitialHandshake"] = 3] = "SentInitialHandshake";
- SocksClientState2[SocksClientState2["ReceivedInitialHandshakeResponse"] = 4] = "ReceivedInitialHandshakeResponse";
- SocksClientState2[SocksClientState2["SentAuthentication"] = 5] = "SentAuthentication";
- SocksClientState2[SocksClientState2["ReceivedAuthenticationResponse"] = 6] = "ReceivedAuthenticationResponse";
- SocksClientState2[SocksClientState2["SentFinalHandshake"] = 7] = "SentFinalHandshake";
- SocksClientState2[SocksClientState2["ReceivedFinalResponse"] = 8] = "ReceivedFinalResponse";
- SocksClientState2[SocksClientState2["BoundWaitingForConnection"] = 9] = "BoundWaitingForConnection";
- SocksClientState2[SocksClientState2["Established"] = 10] = "Established";
- SocksClientState2[SocksClientState2["Disconnected"] = 11] = "Disconnected";
- SocksClientState2[SocksClientState2["Error"] = 99] = "Error";
- })(SocksClientState || (SocksClientState = {}));
- exports.SocksClientState = SocksClientState;
}
});
-// .yarn/cache/socks-npm-2.7.1-17f2b53052-43f69dbc9f.zip/node_modules/socks/build/common/util.js
-var require_util = __commonJS({
- ".yarn/cache/socks-npm-2.7.1-17f2b53052-43f69dbc9f.zip/node_modules/socks/build/common/util.js"(exports) {
+// .yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/core/request.js
+var require_request = __commonJS({
+ ".yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/core/request.js"(exports, module2) {
"use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.shuffleArray = exports.SocksClientError = void 0;
- var SocksClientError = class extends Error {
- constructor(message, options) {
- super(message);
- this.options = options;
+ var {
+ InvalidArgumentError,
+ NotSupportedError
+ } = require_errors();
+ var assert3 = require("node:assert");
+ var { kHTTP2BuildRequest, kHTTP2CopyHeaders, kHTTP1BuildRequest } = require_symbols();
+ var util = require_util();
+ var { channels } = require_diagnostics();
+ var { headerNameLowerCasedRecord } = require_constants2();
+ var headerCharRegex = /[^\t\x20-\x7e\x80-\xff]/;
+ var invalidPathRegex = /[^\u0021-\u00ff]/;
+ var kHandler = Symbol("handler");
+ var extractBody;
+ var Request = class _Request {
+ constructor(origin, {
+ path: path10,
+ method,
+ body,
+ headers,
+ query,
+ idempotent,
+ blocking,
+ upgrade,
+ headersTimeout,
+ bodyTimeout,
+ reset,
+ throwOnError,
+ expectContinue
+ }, handler) {
+ if (typeof path10 !== "string") {
+ throw new InvalidArgumentError("path must be a string");
+ } else if (path10[0] !== "/" && !(path10.startsWith("http://") || path10.startsWith("https://")) && method !== "CONNECT") {
+ throw new InvalidArgumentError("path must be an absolute URL or start with a slash");
+ } else if (invalidPathRegex.exec(path10) !== null) {
+ throw new InvalidArgumentError("invalid request path");
+ }
+ if (typeof method !== "string") {
+ throw new InvalidArgumentError("method must be a string");
+ } else if (!util.isValidHTTPToken(method)) {
+ throw new InvalidArgumentError("invalid request method");
+ }
+ if (upgrade && typeof upgrade !== "string") {
+ throw new InvalidArgumentError("upgrade must be a string");
+ }
+ if (headersTimeout != null && (!Number.isFinite(headersTimeout) || headersTimeout < 0)) {
+ throw new InvalidArgumentError("invalid headersTimeout");
+ }
+ if (bodyTimeout != null && (!Number.isFinite(bodyTimeout) || bodyTimeout < 0)) {
+ throw new InvalidArgumentError("invalid bodyTimeout");
+ }
+ if (reset != null && typeof reset !== "boolean") {
+ throw new InvalidArgumentError("invalid reset");
+ }
+ if (expectContinue != null && typeof expectContinue !== "boolean") {
+ throw new InvalidArgumentError("invalid expectContinue");
+ }
+ this.headersTimeout = headersTimeout;
+ this.bodyTimeout = bodyTimeout;
+ this.throwOnError = throwOnError === true;
+ this.method = method;
+ this.abort = null;
+ if (body == null) {
+ this.body = null;
+ } else if (util.isStream(body)) {
+ this.body = body;
+ const rState = this.body._readableState;
+ if (!rState || !rState.autoDestroy) {
+ this.endHandler = function autoDestroy() {
+ util.destroy(this);
+ };
+ this.body.on("end", this.endHandler);
+ }
+ this.errorHandler = (err) => {
+ if (this.abort) {
+ this.abort(err);
+ } else {
+ this.error = err;
+ }
+ };
+ this.body.on("error", this.errorHandler);
+ } else if (util.isBuffer(body)) {
+ this.body = body.byteLength ? body : null;
+ } else if (ArrayBuffer.isView(body)) {
+ this.body = body.buffer.byteLength ? Buffer.from(body.buffer, body.byteOffset, body.byteLength) : null;
+ } else if (body instanceof ArrayBuffer) {
+ this.body = body.byteLength ? Buffer.from(body) : null;
+ } else if (typeof body === "string") {
+ this.body = body.length ? Buffer.from(body) : null;
+ } else if (util.isFormDataLike(body) || util.isIterable(body) || util.isBlobLike(body)) {
+ this.body = body;
+ } else {
+ throw new InvalidArgumentError("body must be a string, a Buffer, a Readable stream, an iterable, or an async iterable");
+ }
+ this.completed = false;
+ this.aborted = false;
+ this.upgrade = upgrade || null;
+ this.path = query ? util.buildURL(path10, query) : path10;
+ this.origin = origin;
+ this.idempotent = idempotent == null ? method === "HEAD" || method === "GET" : idempotent;
+ this.blocking = blocking == null ? false : blocking;
+ this.reset = reset == null ? null : reset;
+ this.host = null;
+ this.contentLength = null;
+ this.contentType = null;
+ this.headers = "";
+ this.expectContinue = expectContinue != null ? expectContinue : false;
+ if (Array.isArray(headers)) {
+ if (headers.length % 2 !== 0) {
+ throw new InvalidArgumentError("headers array must be even");
+ }
+ for (let i = 0; i < headers.length; i += 2) {
+ processHeader(this, headers[i], headers[i + 1]);
+ }
+ } else if (headers && typeof headers === "object") {
+ const keys = Object.keys(headers);
+ for (let i = 0; i < keys.length; i++) {
+ const key = keys[i];
+ processHeader(this, key, headers[key]);
+ }
+ } else if (headers != null) {
+ throw new InvalidArgumentError("headers must be an object or an array");
+ }
+ if (util.isFormDataLike(this.body)) {
+ if (!extractBody) {
+ extractBody = require_body().extractBody;
+ }
+ const [bodyStream, contentType] = extractBody(body);
+ if (this.contentType == null) {
+ this.contentType = contentType;
+ this.headers += `content-type: ${contentType}\r
+`;
+ }
+ this.body = bodyStream.stream;
+ this.contentLength = bodyStream.length;
+ } else if (util.isBlobLike(body) && this.contentType == null && body.type) {
+ this.contentType = body.type;
+ this.headers += `content-type: ${body.type}\r
+`;
+ }
+ util.validateHandler(handler, method, upgrade);
+ this.servername = util.getServerName(this.host);
+ this[kHandler] = handler;
+ if (channels.create.hasSubscribers) {
+ channels.create.publish({ request: this });
+ }
}
- };
- exports.SocksClientError = SocksClientError;
- function shuffleArray(array) {
- for (let i = array.length - 1; i > 0; i--) {
- const j = Math.floor(Math.random() * (i + 1));
- [array[i], array[j]] = [array[j], array[i]];
+ onBodySent(chunk) {
+ if (this[kHandler].onBodySent) {
+ try {
+ return this[kHandler].onBodySent(chunk);
+ } catch (err) {
+ this.abort(err);
+ }
+ }
}
- }
- exports.shuffleArray = shuffleArray;
- }
-});
-
-// .yarn/cache/socks-npm-2.7.1-17f2b53052-43f69dbc9f.zip/node_modules/socks/build/common/helpers.js
-var require_helpers2 = __commonJS({
- ".yarn/cache/socks-npm-2.7.1-17f2b53052-43f69dbc9f.zip/node_modules/socks/build/common/helpers.js"(exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.validateSocksClientChainOptions = exports.validateSocksClientOptions = void 0;
- var util_1 = require_util();
- var constants_1 = require_constants2();
- var stream = require("stream");
- function validateSocksClientOptions(options, acceptedCommands = ["connect", "bind", "associate"]) {
- if (!constants_1.SocksCommand[options.command]) {
- throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksCommand, options);
+ onRequestSent() {
+ if (channels.bodySent.hasSubscribers) {
+ channels.bodySent.publish({ request: this });
+ }
+ if (this[kHandler].onRequestSent) {
+ try {
+ return this[kHandler].onRequestSent();
+ } catch (err) {
+ this.abort(err);
+ }
+ }
}
- if (acceptedCommands.indexOf(options.command) === -1) {
- throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksCommandForOperation, options);
+ onConnect(abort) {
+ assert3(!this.aborted);
+ assert3(!this.completed);
+ if (this.error) {
+ abort(this.error);
+ } else {
+ this.abort = abort;
+ return this[kHandler].onConnect(abort);
+ }
}
- if (!isValidSocksRemoteHost(options.destination)) {
- throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsDestination, options);
+ onResponseStarted() {
+ return this[kHandler].onResponseStarted?.();
}
- if (!isValidSocksProxy(options.proxy)) {
- throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsProxy, options);
+ onHeaders(statusCode, headers, resume, statusText) {
+ assert3(!this.aborted);
+ assert3(!this.completed);
+ if (channels.headers.hasSubscribers) {
+ channels.headers.publish({ request: this, response: { statusCode, headers, statusText } });
+ }
+ try {
+ return this[kHandler].onHeaders(statusCode, headers, resume, statusText);
+ } catch (err) {
+ this.abort(err);
+ }
}
- validateCustomProxyAuth(options.proxy, options);
- if (options.timeout && !isValidTimeoutValue(options.timeout)) {
- throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsTimeout, options);
+ onData(chunk) {
+ assert3(!this.aborted);
+ assert3(!this.completed);
+ try {
+ return this[kHandler].onData(chunk);
+ } catch (err) {
+ this.abort(err);
+ return false;
+ }
}
- if (options.existing_socket && !(options.existing_socket instanceof stream.Duplex)) {
- throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsExistingSocket, options);
+ onUpgrade(statusCode, headers, socket) {
+ assert3(!this.aborted);
+ assert3(!this.completed);
+ return this[kHandler].onUpgrade(statusCode, headers, socket);
}
- }
- exports.validateSocksClientOptions = validateSocksClientOptions;
- function validateSocksClientChainOptions(options) {
- if (options.command !== "connect") {
- throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksCommandChain, options);
+ onComplete(trailers) {
+ this.onFinally();
+ assert3(!this.aborted);
+ this.completed = true;
+ if (channels.trailers.hasSubscribers) {
+ channels.trailers.publish({ request: this, trailers });
+ }
+ try {
+ return this[kHandler].onComplete(trailers);
+ } catch (err) {
+ this.onError(err);
+ }
+ }
+ onError(error) {
+ this.onFinally();
+ if (channels.error.hasSubscribers) {
+ channels.error.publish({ request: this, error });
+ }
+ if (this.aborted) {
+ return;
+ }
+ this.aborted = true;
+ return this[kHandler].onError(error);
}
- if (!isValidSocksRemoteHost(options.destination)) {
- throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsDestination, options);
+ onFinally() {
+ if (this.errorHandler) {
+ this.body.off("error", this.errorHandler);
+ this.errorHandler = null;
+ }
+ if (this.endHandler) {
+ this.body.off("end", this.endHandler);
+ this.endHandler = null;
+ }
}
- if (!(options.proxies && Array.isArray(options.proxies) && options.proxies.length >= 2)) {
- throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsProxiesLength, options);
+ // TODO: adjust to support H2
+ addHeader(key, value) {
+ processHeader(this, key, value);
+ return this;
}
- options.proxies.forEach((proxy) => {
- if (!isValidSocksProxy(proxy)) {
- throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsProxy, options);
+ static [kHTTP1BuildRequest](origin, opts, handler) {
+ return new _Request(origin, opts, handler);
+ }
+ static [kHTTP2BuildRequest](origin, opts, handler) {
+ const headers = opts.headers;
+ opts = { ...opts, headers: null };
+ const request = new _Request(origin, opts, handler);
+ request.headers = {};
+ if (Array.isArray(headers)) {
+ if (headers.length % 2 !== 0) {
+ throw new InvalidArgumentError("headers array must be even");
+ }
+ for (let i = 0; i < headers.length; i += 2) {
+ processHeader(request, headers[i], headers[i + 1], true);
+ }
+ } else if (headers && typeof headers === "object") {
+ const keys = Object.keys(headers);
+ for (let i = 0; i < keys.length; i++) {
+ const key = keys[i];
+ processHeader(request, key, headers[key], true);
+ }
+ } else if (headers != null) {
+ throw new InvalidArgumentError("headers must be an object or an array");
+ }
+ return request;
+ }
+ static [kHTTP2CopyHeaders](raw) {
+ const rawHeaders = raw.split("\r\n");
+ const headers = {};
+ for (const header of rawHeaders) {
+ const [key, value] = header.split(": ");
+ if (value == null || value.length === 0)
+ continue;
+ if (headers[key]) {
+ headers[key] += `,${value}`;
+ } else {
+ headers[key] = value;
+ }
}
- validateCustomProxyAuth(proxy, options);
- });
- if (options.timeout && !isValidTimeoutValue(options.timeout)) {
- throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsTimeout, options);
+ return headers;
}
+ };
+ function processHeaderValue(key, val, skipAppend) {
+ if (val && typeof val === "object") {
+ throw new InvalidArgumentError(`invalid ${key} header`);
+ }
+ val = val != null ? `${val}` : "";
+ if (headerCharRegex.exec(val) !== null) {
+ throw new InvalidArgumentError(`invalid ${key} header`);
+ }
+ return skipAppend ? val : `${key}: ${val}\r
+`;
}
- exports.validateSocksClientChainOptions = validateSocksClientChainOptions;
- function validateCustomProxyAuth(proxy, options) {
- if (proxy.custom_auth_method !== void 0) {
- if (proxy.custom_auth_method < constants_1.SOCKS5_CUSTOM_AUTH_START || proxy.custom_auth_method > constants_1.SOCKS5_CUSTOM_AUTH_END) {
- throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsCustomAuthRange, options);
+ function processHeader(request, key, val, skipAppend = false) {
+ if (val && (typeof val === "object" && !Array.isArray(val))) {
+ throw new InvalidArgumentError(`invalid ${key} header`);
+ } else if (val === void 0) {
+ return;
+ }
+ let headerName = headerNameLowerCasedRecord[key];
+ if (headerName === void 0) {
+ headerName = key.toLowerCase();
+ if (headerNameLowerCasedRecord[headerName] === void 0 && !util.isValidHTTPToken(headerName)) {
+ throw new InvalidArgumentError("invalid header key");
}
- if (proxy.custom_auth_request_handler === void 0 || typeof proxy.custom_auth_request_handler !== "function") {
- throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsCustomAuthOptions, options);
+ }
+ if (request.host === null && headerName === "host") {
+ if (headerCharRegex.exec(val) !== null) {
+ throw new InvalidArgumentError(`invalid ${key} header`);
}
- if (proxy.custom_auth_response_size === void 0) {
- throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsCustomAuthOptions, options);
+ request.host = val;
+ } else if (request.contentLength === null && headerName === "content-length") {
+ request.contentLength = parseInt(val, 10);
+ if (!Number.isFinite(request.contentLength)) {
+ throw new InvalidArgumentError("invalid content-length header");
}
- if (proxy.custom_auth_response_handler === void 0 || typeof proxy.custom_auth_response_handler !== "function") {
- throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsCustomAuthOptions, options);
+ } else if (request.contentType === null && headerName === "content-type") {
+ request.contentType = val;
+ if (skipAppend)
+ request.headers[key] = processHeaderValue(key, val, skipAppend);
+ else
+ request.headers += processHeaderValue(key, val);
+ } else if (headerName === "transfer-encoding" || headerName === "keep-alive" || headerName === "upgrade") {
+ throw new InvalidArgumentError(`invalid ${headerName} header`);
+ } else if (headerName === "connection") {
+ const value = typeof val === "string" ? val.toLowerCase() : null;
+ if (value !== "close" && value !== "keep-alive") {
+ throw new InvalidArgumentError("invalid connection header");
+ } else if (value === "close") {
+ request.reset = true;
+ }
+ } else if (headerName === "expect") {
+ throw new NotSupportedError("expect header not supported");
+ } else if (Array.isArray(val)) {
+ for (let i = 0; i < val.length; i++) {
+ if (skipAppend) {
+ if (request.headers[key]) {
+ request.headers[key] += `,${processHeaderValue(key, val[i], skipAppend)}`;
+ } else {
+ request.headers[key] = processHeaderValue(key, val[i], skipAppend);
+ }
+ } else {
+ request.headers += processHeaderValue(key, val[i]);
+ }
}
+ } else if (skipAppend) {
+ request.headers[key] = processHeaderValue(key, val, skipAppend);
+ } else {
+ request.headers += processHeaderValue(key, val);
}
}
- function isValidSocksRemoteHost(remoteHost) {
- return remoteHost && typeof remoteHost.host === "string" && typeof remoteHost.port === "number" && remoteHost.port >= 0 && remoteHost.port <= 65535;
- }
- function isValidSocksProxy(proxy) {
- return proxy && (typeof proxy.host === "string" || typeof proxy.ipaddress === "string") && typeof proxy.port === "number" && proxy.port >= 0 && proxy.port <= 65535 && (proxy.type === 4 || proxy.type === 5);
- }
- function isValidTimeoutValue(value) {
- return typeof value === "number" && value > 0;
- }
+ module2.exports = Request;
}
});
-// .yarn/cache/socks-npm-2.7.1-17f2b53052-43f69dbc9f.zip/node_modules/socks/build/common/receivebuffer.js
-var require_receivebuffer = __commonJS({
- ".yarn/cache/socks-npm-2.7.1-17f2b53052-43f69dbc9f.zip/node_modules/socks/build/common/receivebuffer.js"(exports) {
+// .yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/core/connect.js
+var require_connect = __commonJS({
+ ".yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/core/connect.js"(exports, module2) {
"use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.ReceiveBuffer = void 0;
- var ReceiveBuffer = class {
- constructor(size = 4096) {
- this.buffer = Buffer.allocUnsafe(size);
- this.offset = 0;
- this.originalSize = size;
- }
- get length() {
- return this.offset;
- }
- append(data) {
- if (!Buffer.isBuffer(data)) {
- throw new Error("Attempted to append a non-buffer instance to ReceiveBuffer.");
+ var net = require("node:net");
+ var assert3 = require("node:assert");
+ var util = require_util();
+ var { InvalidArgumentError, ConnectTimeoutError } = require_errors();
+ var tls;
+ var SessionCache;
+ if (global.FinalizationRegistry && !(process.env.NODE_V8_COVERAGE || process.env.UNDICI_NO_FG)) {
+ SessionCache = class WeakSessionCache {
+ constructor(maxCachedSessions) {
+ this._maxCachedSessions = maxCachedSessions;
+ this._sessionCache = /* @__PURE__ */ new Map();
+ this._sessionRegistry = new global.FinalizationRegistry((key) => {
+ if (this._sessionCache.size < this._maxCachedSessions) {
+ return;
+ }
+ const ref = this._sessionCache.get(key);
+ if (ref !== void 0 && ref.deref() === void 0) {
+ this._sessionCache.delete(key);
+ }
+ });
}
- if (this.offset + data.length >= this.buffer.length) {
- const tmp = this.buffer;
- this.buffer = Buffer.allocUnsafe(Math.max(this.buffer.length + this.originalSize, this.buffer.length + data.length));
- tmp.copy(this.buffer);
+ get(sessionKey) {
+ const ref = this._sessionCache.get(sessionKey);
+ return ref ? ref.deref() : null;
}
- data.copy(this.buffer, this.offset);
- return this.offset += data.length;
- }
- peek(length) {
- if (length > this.offset) {
- throw new Error("Attempted to read beyond the bounds of the managed internal data.");
+ set(sessionKey, session) {
+ if (this._maxCachedSessions === 0) {
+ return;
+ }
+ this._sessionCache.set(sessionKey, new WeakRef(session));
+ this._sessionRegistry.register(session, sessionKey);
+ }
+ };
+ } else {
+ SessionCache = class SimpleSessionCache {
+ constructor(maxCachedSessions) {
+ this._maxCachedSessions = maxCachedSessions;
+ this._sessionCache = /* @__PURE__ */ new Map();
+ }
+ get(sessionKey) {
+ return this._sessionCache.get(sessionKey);
+ }
+ set(sessionKey, session) {
+ if (this._maxCachedSessions === 0) {
+ return;
+ }
+ if (this._sessionCache.size >= this._maxCachedSessions) {
+ const { value: oldestKey } = this._sessionCache.keys().next();
+ this._sessionCache.delete(oldestKey);
+ }
+ this._sessionCache.set(sessionKey, session);
}
- return this.buffer.slice(0, length);
+ };
+ }
+ function buildConnector({ allowH2, maxCachedSessions, socketPath, timeout, ...opts }) {
+ if (maxCachedSessions != null && (!Number.isInteger(maxCachedSessions) || maxCachedSessions < 0)) {
+ throw new InvalidArgumentError("maxCachedSessions must be a positive integer or zero");
}
- get(length) {
- if (length > this.offset) {
- throw new Error("Attempted to read beyond the bounds of the managed internal data.");
+ const options = { path: socketPath, ...opts };
+ const sessionCache = new SessionCache(maxCachedSessions == null ? 100 : maxCachedSessions);
+ timeout = timeout == null ? 1e4 : timeout;
+ allowH2 = allowH2 != null ? allowH2 : false;
+ return function connect({ hostname, host, protocol, port, servername, localAddress, httpSocket }, callback) {
+ let socket;
+ if (protocol === "https:") {
+ if (!tls) {
+ tls = require("node:tls");
+ }
+ servername = servername || options.servername || util.getServerName(host) || null;
+ const sessionKey = servername || hostname;
+ const session = sessionCache.get(sessionKey) || null;
+ assert3(sessionKey);
+ socket = tls.connect({
+ highWaterMark: 16384,
+ // TLS in node can't have bigger HWM anyway...
+ ...options,
+ servername,
+ session,
+ localAddress,
+ // TODO(HTTP/2): Add support for h2c
+ ALPNProtocols: allowH2 ? ["http/1.1", "h2"] : ["http/1.1"],
+ socket: httpSocket,
+ // upgrade socket connection
+ port: port || 443,
+ host: hostname
+ });
+ socket.on("session", function(session2) {
+ sessionCache.set(sessionKey, session2);
+ });
+ } else {
+ assert3(!httpSocket, "httpSocket can only be sent on TLS update");
+ socket = net.connect({
+ highWaterMark: 64 * 1024,
+ // Same as nodejs fs streams.
+ ...options,
+ localAddress,
+ port: port || 80,
+ host: hostname
+ });
}
- const value = Buffer.allocUnsafe(length);
- this.buffer.slice(0, length).copy(value);
- this.buffer.copyWithin(0, length, length + this.offset - length);
- this.offset -= length;
- return value;
+ if (options.keepAlive == null || options.keepAlive) {
+ const keepAliveInitialDelay = options.keepAliveInitialDelay === void 0 ? 6e4 : options.keepAliveInitialDelay;
+ socket.setKeepAlive(true, keepAliveInitialDelay);
+ }
+ const cancelTimeout = setupTimeout(() => onConnectTimeout(socket), timeout);
+ socket.setNoDelay(true).once(protocol === "https:" ? "secureConnect" : "connect", function() {
+ cancelTimeout();
+ if (callback) {
+ const cb = callback;
+ callback = null;
+ cb(null, this);
+ }
+ }).on("error", function(err) {
+ cancelTimeout();
+ if (callback) {
+ const cb = callback;
+ callback = null;
+ cb(err);
+ }
+ });
+ return socket;
+ };
+ }
+ function setupTimeout(onConnectTimeout2, timeout) {
+ if (!timeout) {
+ return () => {
+ };
}
- };
- exports.ReceiveBuffer = ReceiveBuffer;
+ let s1 = null;
+ let s2 = null;
+ const timeoutId = setTimeout(() => {
+ s1 = setImmediate(() => {
+ if (process.platform === "win32") {
+ s2 = setImmediate(() => onConnectTimeout2());
+ } else {
+ onConnectTimeout2();
+ }
+ });
+ }, timeout);
+ return () => {
+ clearTimeout(timeoutId);
+ clearImmediate(s1);
+ clearImmediate(s2);
+ };
+ }
+ function onConnectTimeout(socket) {
+ let message = "Connect Timeout Error";
+ if (Array.isArray(socket.autoSelectFamilyAttemptedAddresses)) {
+ message = +` (attempted addresses: ${socket.autoSelectFamilyAttemptedAddresses.join(", ")})`;
+ }
+ util.destroy(socket, new ConnectTimeoutError(message));
+ }
+ module2.exports = buildConnector;
}
});
-// .yarn/cache/socks-npm-2.7.1-17f2b53052-43f69dbc9f.zip/node_modules/socks/build/client/socksclient.js
-var require_socksclient = __commonJS({
- ".yarn/cache/socks-npm-2.7.1-17f2b53052-43f69dbc9f.zip/node_modules/socks/build/client/socksclient.js"(exports) {
+// .yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/llhttp/utils.js
+var require_utils = __commonJS({
+ ".yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/llhttp/utils.js"(exports) {
"use strict";
- var __awaiter2 = exports && exports.__awaiter || function(thisArg, _arguments, P, generator) {
- function adopt(value) {
- return value instanceof P ? value : new P(function(resolve) {
- resolve(value);
- });
- }
- return new (P || (P = Promise))(function(resolve, reject) {
- function fulfilled(value) {
- try {
- step(generator.next(value));
- } catch (e) {
- reject(e);
- }
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.enumToMap = void 0;
+ function enumToMap(obj) {
+ const res = {};
+ Object.keys(obj).forEach((key) => {
+ const value = obj[key];
+ if (typeof value === "number") {
+ res[key] = value;
}
- function rejected(value) {
- try {
- step(generator["throw"](value));
- } catch (e) {
- reject(e);
- }
- }
- function step(result) {
- result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
- }
- step((generator = generator.apply(thisArg, _arguments || [])).next());
});
- };
+ return res;
+ }
+ exports.enumToMap = enumToMap;
+ }
+});
+
+// .yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/llhttp/constants.js
+var require_constants4 = __commonJS({
+ ".yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/llhttp/constants.js"(exports) {
+ "use strict";
Object.defineProperty(exports, "__esModule", { value: true });
- exports.SocksClientError = exports.SocksClient = void 0;
- var events_1 = require("events");
- var net = require("net");
- var ip = require_ip();
- var smart_buffer_1 = require_smartbuffer();
- var constants_1 = require_constants2();
- var helpers_1 = require_helpers2();
- var receivebuffer_1 = require_receivebuffer();
- var util_1 = require_util();
- Object.defineProperty(exports, "SocksClientError", { enumerable: true, get: function() {
- return util_1.SocksClientError;
- } });
- var SocksClient = class _SocksClient extends events_1.EventEmitter {
- constructor(options) {
- super();
- this.options = Object.assign({}, options);
- (0, helpers_1.validateSocksClientOptions)(options);
- this.setState(constants_1.SocksClientState.Created);
- }
- /**
- * Creates a new SOCKS connection.
- *
- * Note: Supports callbacks and promises. Only supports the connect command.
- * @param options { SocksClientOptions } Options.
- * @param callback { Function } An optional callback function.
- * @returns { Promise }
- */
- static createConnection(options, callback) {
- return new Promise((resolve, reject) => {
- try {
- (0, helpers_1.validateSocksClientOptions)(options, ["connect"]);
- } catch (err) {
- if (typeof callback === "function") {
- callback(err);
- return resolve(err);
- } else {
- return reject(err);
- }
- }
- const client = new _SocksClient(options);
- client.connect(options.existing_socket);
- client.once("established", (info) => {
- client.removeAllListeners();
- if (typeof callback === "function") {
- callback(null, info);
- resolve(info);
- } else {
- resolve(info);
- }
- });
- client.once("error", (err) => {
- client.removeAllListeners();
- if (typeof callback === "function") {
- callback(err);
- resolve(err);
- } else {
- reject(err);
- }
- });
- });
+ exports.SPECIAL_HEADERS = exports.HEADER_STATE = exports.MINOR = exports.MAJOR = exports.CONNECTION_TOKEN_CHARS = exports.HEADER_CHARS = exports.TOKEN = exports.STRICT_TOKEN = exports.HEX = exports.URL_CHAR = exports.STRICT_URL_CHAR = exports.USERINFO_CHARS = exports.MARK = exports.ALPHANUM = exports.NUM = exports.HEX_MAP = exports.NUM_MAP = exports.ALPHA = exports.FINISH = exports.H_METHOD_MAP = exports.METHOD_MAP = exports.METHODS_RTSP = exports.METHODS_ICE = exports.METHODS_HTTP = exports.METHODS = exports.LENIENT_FLAGS = exports.FLAGS = exports.TYPE = exports.ERROR = void 0;
+ var utils_1 = require_utils();
+ var ERROR;
+ (function(ERROR2) {
+ ERROR2[ERROR2["OK"] = 0] = "OK";
+ ERROR2[ERROR2["INTERNAL"] = 1] = "INTERNAL";
+ ERROR2[ERROR2["STRICT"] = 2] = "STRICT";
+ ERROR2[ERROR2["LF_EXPECTED"] = 3] = "LF_EXPECTED";
+ ERROR2[ERROR2["UNEXPECTED_CONTENT_LENGTH"] = 4] = "UNEXPECTED_CONTENT_LENGTH";
+ ERROR2[ERROR2["CLOSED_CONNECTION"] = 5] = "CLOSED_CONNECTION";
+ ERROR2[ERROR2["INVALID_METHOD"] = 6] = "INVALID_METHOD";
+ ERROR2[ERROR2["INVALID_URL"] = 7] = "INVALID_URL";
+ ERROR2[ERROR2["INVALID_CONSTANT"] = 8] = "INVALID_CONSTANT";
+ ERROR2[ERROR2["INVALID_VERSION"] = 9] = "INVALID_VERSION";
+ ERROR2[ERROR2["INVALID_HEADER_TOKEN"] = 10] = "INVALID_HEADER_TOKEN";
+ ERROR2[ERROR2["INVALID_CONTENT_LENGTH"] = 11] = "INVALID_CONTENT_LENGTH";
+ ERROR2[ERROR2["INVALID_CHUNK_SIZE"] = 12] = "INVALID_CHUNK_SIZE";
+ ERROR2[ERROR2["INVALID_STATUS"] = 13] = "INVALID_STATUS";
+ ERROR2[ERROR2["INVALID_EOF_STATE"] = 14] = "INVALID_EOF_STATE";
+ ERROR2[ERROR2["INVALID_TRANSFER_ENCODING"] = 15] = "INVALID_TRANSFER_ENCODING";
+ ERROR2[ERROR2["CB_MESSAGE_BEGIN"] = 16] = "CB_MESSAGE_BEGIN";
+ ERROR2[ERROR2["CB_HEADERS_COMPLETE"] = 17] = "CB_HEADERS_COMPLETE";
+ ERROR2[ERROR2["CB_MESSAGE_COMPLETE"] = 18] = "CB_MESSAGE_COMPLETE";
+ ERROR2[ERROR2["CB_CHUNK_HEADER"] = 19] = "CB_CHUNK_HEADER";
+ ERROR2[ERROR2["CB_CHUNK_COMPLETE"] = 20] = "CB_CHUNK_COMPLETE";
+ ERROR2[ERROR2["PAUSED"] = 21] = "PAUSED";
+ ERROR2[ERROR2["PAUSED_UPGRADE"] = 22] = "PAUSED_UPGRADE";
+ ERROR2[ERROR2["PAUSED_H2_UPGRADE"] = 23] = "PAUSED_H2_UPGRADE";
+ ERROR2[ERROR2["USER"] = 24] = "USER";
+ })(ERROR = exports.ERROR || (exports.ERROR = {}));
+ var TYPE;
+ (function(TYPE2) {
+ TYPE2[TYPE2["BOTH"] = 0] = "BOTH";
+ TYPE2[TYPE2["REQUEST"] = 1] = "REQUEST";
+ TYPE2[TYPE2["RESPONSE"] = 2] = "RESPONSE";
+ })(TYPE = exports.TYPE || (exports.TYPE = {}));
+ var FLAGS;
+ (function(FLAGS2) {
+ FLAGS2[FLAGS2["CONNECTION_KEEP_ALIVE"] = 1] = "CONNECTION_KEEP_ALIVE";
+ FLAGS2[FLAGS2["CONNECTION_CLOSE"] = 2] = "CONNECTION_CLOSE";
+ FLAGS2[FLAGS2["CONNECTION_UPGRADE"] = 4] = "CONNECTION_UPGRADE";
+ FLAGS2[FLAGS2["CHUNKED"] = 8] = "CHUNKED";
+ FLAGS2[FLAGS2["UPGRADE"] = 16] = "UPGRADE";
+ FLAGS2[FLAGS2["CONTENT_LENGTH"] = 32] = "CONTENT_LENGTH";
+ FLAGS2[FLAGS2["SKIPBODY"] = 64] = "SKIPBODY";
+ FLAGS2[FLAGS2["TRAILING"] = 128] = "TRAILING";
+ FLAGS2[FLAGS2["TRANSFER_ENCODING"] = 512] = "TRANSFER_ENCODING";
+ })(FLAGS = exports.FLAGS || (exports.FLAGS = {}));
+ var LENIENT_FLAGS;
+ (function(LENIENT_FLAGS2) {
+ LENIENT_FLAGS2[LENIENT_FLAGS2["HEADERS"] = 1] = "HEADERS";
+ LENIENT_FLAGS2[LENIENT_FLAGS2["CHUNKED_LENGTH"] = 2] = "CHUNKED_LENGTH";
+ LENIENT_FLAGS2[LENIENT_FLAGS2["KEEP_ALIVE"] = 4] = "KEEP_ALIVE";
+ })(LENIENT_FLAGS = exports.LENIENT_FLAGS || (exports.LENIENT_FLAGS = {}));
+ var METHODS;
+ (function(METHODS2) {
+ METHODS2[METHODS2["DELETE"] = 0] = "DELETE";
+ METHODS2[METHODS2["GET"] = 1] = "GET";
+ METHODS2[METHODS2["HEAD"] = 2] = "HEAD";
+ METHODS2[METHODS2["POST"] = 3] = "POST";
+ METHODS2[METHODS2["PUT"] = 4] = "PUT";
+ METHODS2[METHODS2["CONNECT"] = 5] = "CONNECT";
+ METHODS2[METHODS2["OPTIONS"] = 6] = "OPTIONS";
+ METHODS2[METHODS2["TRACE"] = 7] = "TRACE";
+ METHODS2[METHODS2["COPY"] = 8] = "COPY";
+ METHODS2[METHODS2["LOCK"] = 9] = "LOCK";
+ METHODS2[METHODS2["MKCOL"] = 10] = "MKCOL";
+ METHODS2[METHODS2["MOVE"] = 11] = "MOVE";
+ METHODS2[METHODS2["PROPFIND"] = 12] = "PROPFIND";
+ METHODS2[METHODS2["PROPPATCH"] = 13] = "PROPPATCH";
+ METHODS2[METHODS2["SEARCH"] = 14] = "SEARCH";
+ METHODS2[METHODS2["UNLOCK"] = 15] = "UNLOCK";
+ METHODS2[METHODS2["BIND"] = 16] = "BIND";
+ METHODS2[METHODS2["REBIND"] = 17] = "REBIND";
+ METHODS2[METHODS2["UNBIND"] = 18] = "UNBIND";
+ METHODS2[METHODS2["ACL"] = 19] = "ACL";
+ METHODS2[METHODS2["REPORT"] = 20] = "REPORT";
+ METHODS2[METHODS2["MKACTIVITY"] = 21] = "MKACTIVITY";
+ METHODS2[METHODS2["CHECKOUT"] = 22] = "CHECKOUT";
+ METHODS2[METHODS2["MERGE"] = 23] = "MERGE";
+ METHODS2[METHODS2["M-SEARCH"] = 24] = "M-SEARCH";
+ METHODS2[METHODS2["NOTIFY"] = 25] = "NOTIFY";
+ METHODS2[METHODS2["SUBSCRIBE"] = 26] = "SUBSCRIBE";
+ METHODS2[METHODS2["UNSUBSCRIBE"] = 27] = "UNSUBSCRIBE";
+ METHODS2[METHODS2["PATCH"] = 28] = "PATCH";
+ METHODS2[METHODS2["PURGE"] = 29] = "PURGE";
+ METHODS2[METHODS2["MKCALENDAR"] = 30] = "MKCALENDAR";
+ METHODS2[METHODS2["LINK"] = 31] = "LINK";
+ METHODS2[METHODS2["UNLINK"] = 32] = "UNLINK";
+ METHODS2[METHODS2["SOURCE"] = 33] = "SOURCE";
+ METHODS2[METHODS2["PRI"] = 34] = "PRI";
+ METHODS2[METHODS2["DESCRIBE"] = 35] = "DESCRIBE";
+ METHODS2[METHODS2["ANNOUNCE"] = 36] = "ANNOUNCE";
+ METHODS2[METHODS2["SETUP"] = 37] = "SETUP";
+ METHODS2[METHODS2["PLAY"] = 38] = "PLAY";
+ METHODS2[METHODS2["PAUSE"] = 39] = "PAUSE";
+ METHODS2[METHODS2["TEARDOWN"] = 40] = "TEARDOWN";
+ METHODS2[METHODS2["GET_PARAMETER"] = 41] = "GET_PARAMETER";
+ METHODS2[METHODS2["SET_PARAMETER"] = 42] = "SET_PARAMETER";
+ METHODS2[METHODS2["REDIRECT"] = 43] = "REDIRECT";
+ METHODS2[METHODS2["RECORD"] = 44] = "RECORD";
+ METHODS2[METHODS2["FLUSH"] = 45] = "FLUSH";
+ })(METHODS = exports.METHODS || (exports.METHODS = {}));
+ exports.METHODS_HTTP = [
+ METHODS.DELETE,
+ METHODS.GET,
+ METHODS.HEAD,
+ METHODS.POST,
+ METHODS.PUT,
+ METHODS.CONNECT,
+ METHODS.OPTIONS,
+ METHODS.TRACE,
+ METHODS.COPY,
+ METHODS.LOCK,
+ METHODS.MKCOL,
+ METHODS.MOVE,
+ METHODS.PROPFIND,
+ METHODS.PROPPATCH,
+ METHODS.SEARCH,
+ METHODS.UNLOCK,
+ METHODS.BIND,
+ METHODS.REBIND,
+ METHODS.UNBIND,
+ METHODS.ACL,
+ METHODS.REPORT,
+ METHODS.MKACTIVITY,
+ METHODS.CHECKOUT,
+ METHODS.MERGE,
+ METHODS["M-SEARCH"],
+ METHODS.NOTIFY,
+ METHODS.SUBSCRIBE,
+ METHODS.UNSUBSCRIBE,
+ METHODS.PATCH,
+ METHODS.PURGE,
+ METHODS.MKCALENDAR,
+ METHODS.LINK,
+ METHODS.UNLINK,
+ METHODS.PRI,
+ // TODO(indutny): should we allow it with HTTP?
+ METHODS.SOURCE
+ ];
+ exports.METHODS_ICE = [
+ METHODS.SOURCE
+ ];
+ exports.METHODS_RTSP = [
+ METHODS.OPTIONS,
+ METHODS.DESCRIBE,
+ METHODS.ANNOUNCE,
+ METHODS.SETUP,
+ METHODS.PLAY,
+ METHODS.PAUSE,
+ METHODS.TEARDOWN,
+ METHODS.GET_PARAMETER,
+ METHODS.SET_PARAMETER,
+ METHODS.REDIRECT,
+ METHODS.RECORD,
+ METHODS.FLUSH,
+ // For AirPlay
+ METHODS.GET,
+ METHODS.POST
+ ];
+ exports.METHOD_MAP = utils_1.enumToMap(METHODS);
+ exports.H_METHOD_MAP = {};
+ Object.keys(exports.METHOD_MAP).forEach((key) => {
+ if (/^H/.test(key)) {
+ exports.H_METHOD_MAP[key] = exports.METHOD_MAP[key];
}
- /**
- * Creates a new SOCKS connection chain to a destination host through 2 or more SOCKS proxies.
- *
- * Note: Supports callbacks and promises. Only supports the connect method.
- * Note: Implemented via createConnection() factory function.
- * @param options { SocksClientChainOptions } Options
- * @param callback { Function } An optional callback function.
- * @returns { Promise }
- */
- static createConnectionChain(options, callback) {
- return new Promise((resolve, reject) => __awaiter2(this, void 0, void 0, function* () {
- try {
- (0, helpers_1.validateSocksClientChainOptions)(options);
- } catch (err) {
- if (typeof callback === "function") {
- callback(err);
- return resolve(err);
- } else {
- return reject(err);
- }
+ });
+ var FINISH;
+ (function(FINISH2) {
+ FINISH2[FINISH2["SAFE"] = 0] = "SAFE";
+ FINISH2[FINISH2["SAFE_WITH_CB"] = 1] = "SAFE_WITH_CB";
+ FINISH2[FINISH2["UNSAFE"] = 2] = "UNSAFE";
+ })(FINISH = exports.FINISH || (exports.FINISH = {}));
+ exports.ALPHA = [];
+ for (let i = "A".charCodeAt(0); i <= "Z".charCodeAt(0); i++) {
+ exports.ALPHA.push(String.fromCharCode(i));
+ exports.ALPHA.push(String.fromCharCode(i + 32));
+ }
+ exports.NUM_MAP = {
+ 0: 0,
+ 1: 1,
+ 2: 2,
+ 3: 3,
+ 4: 4,
+ 5: 5,
+ 6: 6,
+ 7: 7,
+ 8: 8,
+ 9: 9
+ };
+ exports.HEX_MAP = {
+ 0: 0,
+ 1: 1,
+ 2: 2,
+ 3: 3,
+ 4: 4,
+ 5: 5,
+ 6: 6,
+ 7: 7,
+ 8: 8,
+ 9: 9,
+ A: 10,
+ B: 11,
+ C: 12,
+ D: 13,
+ E: 14,
+ F: 15,
+ a: 10,
+ b: 11,
+ c: 12,
+ d: 13,
+ e: 14,
+ f: 15
+ };
+ exports.NUM = [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9"
+ ];
+ exports.ALPHANUM = exports.ALPHA.concat(exports.NUM);
+ exports.MARK = ["-", "_", ".", "!", "~", "*", "'", "(", ")"];
+ exports.USERINFO_CHARS = exports.ALPHANUM.concat(exports.MARK).concat(["%", ";", ":", "&", "=", "+", "$", ","]);
+ exports.STRICT_URL_CHAR = [
+ "!",
+ '"',
+ "$",
+ "%",
+ "&",
+ "'",
+ "(",
+ ")",
+ "*",
+ "+",
+ ",",
+ "-",
+ ".",
+ "/",
+ ":",
+ ";",
+ "<",
+ "=",
+ ">",
+ "@",
+ "[",
+ "\\",
+ "]",
+ "^",
+ "_",
+ "`",
+ "{",
+ "|",
+ "}",
+ "~"
+ ].concat(exports.ALPHANUM);
+ exports.URL_CHAR = exports.STRICT_URL_CHAR.concat([" ", "\f"]);
+ for (let i = 128; i <= 255; i++) {
+ exports.URL_CHAR.push(i);
+ }
+ exports.HEX = exports.NUM.concat(["a", "b", "c", "d", "e", "f", "A", "B", "C", "D", "E", "F"]);
+ exports.STRICT_TOKEN = [
+ "!",
+ "#",
+ "$",
+ "%",
+ "&",
+ "'",
+ "*",
+ "+",
+ "-",
+ ".",
+ "^",
+ "_",
+ "`",
+ "|",
+ "~"
+ ].concat(exports.ALPHANUM);
+ exports.TOKEN = exports.STRICT_TOKEN.concat([" "]);
+ exports.HEADER_CHARS = [" "];
+ for (let i = 32; i <= 255; i++) {
+ if (i !== 127) {
+ exports.HEADER_CHARS.push(i);
+ }
+ }
+ exports.CONNECTION_TOKEN_CHARS = exports.HEADER_CHARS.filter((c) => c !== 44);
+ exports.MAJOR = exports.NUM_MAP;
+ exports.MINOR = exports.MAJOR;
+ var HEADER_STATE;
+ (function(HEADER_STATE2) {
+ HEADER_STATE2[HEADER_STATE2["GENERAL"] = 0] = "GENERAL";
+ HEADER_STATE2[HEADER_STATE2["CONNECTION"] = 1] = "CONNECTION";
+ HEADER_STATE2[HEADER_STATE2["CONTENT_LENGTH"] = 2] = "CONTENT_LENGTH";
+ HEADER_STATE2[HEADER_STATE2["TRANSFER_ENCODING"] = 3] = "TRANSFER_ENCODING";
+ HEADER_STATE2[HEADER_STATE2["UPGRADE"] = 4] = "UPGRADE";
+ HEADER_STATE2[HEADER_STATE2["CONNECTION_KEEP_ALIVE"] = 5] = "CONNECTION_KEEP_ALIVE";
+ HEADER_STATE2[HEADER_STATE2["CONNECTION_CLOSE"] = 6] = "CONNECTION_CLOSE";
+ HEADER_STATE2[HEADER_STATE2["CONNECTION_UPGRADE"] = 7] = "CONNECTION_UPGRADE";
+ HEADER_STATE2[HEADER_STATE2["TRANSFER_ENCODING_CHUNKED"] = 8] = "TRANSFER_ENCODING_CHUNKED";
+ })(HEADER_STATE = exports.HEADER_STATE || (exports.HEADER_STATE = {}));
+ exports.SPECIAL_HEADERS = {
+ "connection": HEADER_STATE.CONNECTION,
+ "content-length": HEADER_STATE.CONTENT_LENGTH,
+ "proxy-connection": HEADER_STATE.CONNECTION,
+ "transfer-encoding": HEADER_STATE.TRANSFER_ENCODING,
+ "upgrade": HEADER_STATE.UPGRADE
+ };
+ }
+});
+
+// .yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/handler/RedirectHandler.js
+var require_RedirectHandler = __commonJS({
+ ".yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/handler/RedirectHandler.js"(exports, module2) {
+ "use strict";
+ var util = require_util();
+ var { kBodyUsed } = require_symbols();
+ var assert3 = require("node:assert");
+ var { InvalidArgumentError } = require_errors();
+ var EE = require("node:events");
+ var redirectableStatusCodes = [300, 301, 302, 303, 307, 308];
+ var kBody = Symbol("body");
+ var BodyAsyncIterable = class {
+ constructor(body) {
+ this[kBody] = body;
+ this[kBodyUsed] = false;
+ }
+ async *[Symbol.asyncIterator]() {
+ assert3(!this[kBodyUsed], "disturbed");
+ this[kBodyUsed] = true;
+ yield* this[kBody];
+ }
+ };
+ var RedirectHandler = class {
+ constructor(dispatch, maxRedirections, opts, handler) {
+ if (maxRedirections != null && (!Number.isInteger(maxRedirections) || maxRedirections < 0)) {
+ throw new InvalidArgumentError("maxRedirections must be a positive number");
+ }
+ util.validateHandler(handler, opts.method, opts.upgrade);
+ this.dispatch = dispatch;
+ this.location = null;
+ this.abort = null;
+ this.opts = { ...opts, maxRedirections: 0 };
+ this.maxRedirections = maxRedirections;
+ this.handler = handler;
+ this.history = [];
+ this.redirectionLimitReached = false;
+ if (util.isStream(this.opts.body)) {
+ if (util.bodyLength(this.opts.body) === 0) {
+ this.opts.body.on("data", function() {
+ assert3(false);
+ });
}
- if (options.randomizeChain) {
- (0, util_1.shuffleArray)(options.proxies);
+ if (typeof this.opts.body.readableDidRead !== "boolean") {
+ this.opts.body[kBodyUsed] = false;
+ EE.prototype.on.call(this.opts.body, "data", function() {
+ this[kBodyUsed] = true;
+ });
}
- try {
- let sock;
- for (let i = 0; i < options.proxies.length; i++) {
- const nextProxy = options.proxies[i];
- const nextDestination = i === options.proxies.length - 1 ? options.destination : {
- host: options.proxies[i + 1].host || options.proxies[i + 1].ipaddress,
- port: options.proxies[i + 1].port
- };
- const result = yield _SocksClient.createConnection({
- command: "connect",
- proxy: nextProxy,
- destination: nextDestination,
- existing_socket: sock
- });
- sock = sock || result.socket;
- }
- if (typeof callback === "function") {
- callback(null, { socket: sock });
- resolve({ socket: sock });
- } else {
- resolve({ socket: sock });
- }
- } catch (err) {
- if (typeof callback === "function") {
- callback(err);
- resolve(err);
- } else {
- reject(err);
- }
+ } else if (this.opts.body && typeof this.opts.body.pipeTo === "function") {
+ this.opts.body = new BodyAsyncIterable(this.opts.body);
+ } else if (this.opts.body && typeof this.opts.body !== "string" && !ArrayBuffer.isView(this.opts.body) && util.isIterable(this.opts.body)) {
+ this.opts.body = new BodyAsyncIterable(this.opts.body);
+ }
+ }
+ onConnect(abort) {
+ this.abort = abort;
+ this.handler.onConnect(abort, { history: this.history });
+ }
+ onUpgrade(statusCode, headers, socket) {
+ this.handler.onUpgrade(statusCode, headers, socket);
+ }
+ onError(error) {
+ this.handler.onError(error);
+ }
+ onHeaders(statusCode, headers, resume, statusText) {
+ this.location = this.history.length >= this.maxRedirections || util.isDisturbed(this.opts.body) ? null : parseLocation(statusCode, headers);
+ if (this.opts.throwOnMaxRedirect && this.history.length >= this.maxRedirections) {
+ if (this.request) {
+ this.request.abort(new Error("max redirects"));
}
- }));
+ this.redirectionLimitReached = true;
+ this.abort(new Error("max redirects"));
+ return;
+ }
+ if (this.opts.origin) {
+ this.history.push(new URL(this.opts.path, this.opts.origin));
+ }
+ if (!this.location) {
+ return this.handler.onHeaders(statusCode, headers, resume, statusText);
+ }
+ const { origin, pathname, search } = util.parseURL(new URL(this.location, this.opts.origin && new URL(this.opts.path, this.opts.origin)));
+ const path10 = search ? `${pathname}${search}` : pathname;
+ this.opts.headers = cleanRequestHeaders(this.opts.headers, statusCode === 303, this.opts.origin !== origin);
+ this.opts.path = path10;
+ this.opts.origin = origin;
+ this.opts.maxRedirections = 0;
+ this.opts.query = null;
+ if (statusCode === 303 && this.opts.method !== "HEAD") {
+ this.opts.method = "GET";
+ this.opts.body = null;
+ }
}
- /**
- * Creates a SOCKS UDP Frame.
- * @param options
- */
- static createUDPFrame(options) {
- const buff = new smart_buffer_1.SmartBuffer();
- buff.writeUInt16BE(0);
- buff.writeUInt8(options.frameNumber || 0);
- if (net.isIPv4(options.remoteHost.host)) {
- buff.writeUInt8(constants_1.Socks5HostType.IPv4);
- buff.writeUInt32BE(ip.toLong(options.remoteHost.host));
- } else if (net.isIPv6(options.remoteHost.host)) {
- buff.writeUInt8(constants_1.Socks5HostType.IPv6);
- buff.writeBuffer(ip.toBuffer(options.remoteHost.host));
+ onData(chunk) {
+ if (this.location) {
} else {
- buff.writeUInt8(constants_1.Socks5HostType.Hostname);
- buff.writeUInt8(Buffer.byteLength(options.remoteHost.host));
- buff.writeString(options.remoteHost.host);
+ return this.handler.onData(chunk);
}
- buff.writeUInt16BE(options.remoteHost.port);
- buff.writeBuffer(options.data);
- return buff.toBuffer();
}
- /**
- * Parses a SOCKS UDP frame.
- * @param data
- */
- static parseUDPFrame(data) {
- const buff = smart_buffer_1.SmartBuffer.fromBuffer(data);
- buff.readOffset = 2;
- const frameNumber = buff.readUInt8();
- const hostType = buff.readUInt8();
- let remoteHost;
- if (hostType === constants_1.Socks5HostType.IPv4) {
- remoteHost = ip.fromLong(buff.readUInt32BE());
- } else if (hostType === constants_1.Socks5HostType.IPv6) {
- remoteHost = ip.toString(buff.readBuffer(16));
+ onComplete(trailers) {
+ if (this.location) {
+ this.location = null;
+ this.abort = null;
+ this.dispatch(this.opts, this);
} else {
- remoteHost = buff.readString(buff.readUInt8());
+ this.handler.onComplete(trailers);
}
- const remotePort = buff.readUInt16BE();
- return {
- frameNumber,
- remoteHost: {
- host: remoteHost,
- port: remotePort
- },
- data: buff.readBuffer()
- };
}
- /**
- * Internal state setter. If the SocksClient is in an error state, it cannot be changed to a non error state.
- */
- setState(newState) {
- if (this.state !== constants_1.SocksClientState.Error) {
- this.state = newState;
+ onBodySent(chunk) {
+ if (this.handler.onBodySent) {
+ this.handler.onBodySent(chunk);
}
}
- /**
- * Starts the connection establishment to the proxy and destination.
- * @param existingSocket Connected socket to use instead of creating a new one (internal use).
- */
- connect(existingSocket) {
- this.onDataReceived = (data) => this.onDataReceivedHandler(data);
- this.onClose = () => this.onCloseHandler();
- this.onError = (err) => this.onErrorHandler(err);
- this.onConnect = () => this.onConnectHandler();
- const timer = setTimeout(() => this.onEstablishedTimeout(), this.options.timeout || constants_1.DEFAULT_TIMEOUT);
- if (timer.unref && typeof timer.unref === "function") {
- timer.unref();
- }
- if (existingSocket) {
- this.socket = existingSocket;
- } else {
- this.socket = new net.Socket();
- }
- this.socket.once("close", this.onClose);
- this.socket.once("error", this.onError);
- this.socket.once("connect", this.onConnect);
- this.socket.on("data", this.onDataReceived);
- this.setState(constants_1.SocksClientState.Connecting);
- this.receiveBuffer = new receivebuffer_1.ReceiveBuffer();
- if (existingSocket) {
- this.socket.emit("connect");
- } else {
- this.socket.connect(this.getSocketOptions());
- if (this.options.set_tcp_nodelay !== void 0 && this.options.set_tcp_nodelay !== null) {
- this.socket.setNoDelay(!!this.options.set_tcp_nodelay);
- }
+ };
+ function parseLocation(statusCode, headers) {
+ if (redirectableStatusCodes.indexOf(statusCode) === -1) {
+ return null;
+ }
+ for (let i = 0; i < headers.length; i += 2) {
+ if (headers[i].length === 8 && util.headerNameToString(headers[i]) === "location") {
+ return headers[i + 1];
}
- this.prependOnceListener("established", (info) => {
- setImmediate(() => {
- if (this.receiveBuffer.length > 0) {
- const excessData = this.receiveBuffer.get(this.receiveBuffer.length);
- info.socket.emit("data", excessData);
- }
- info.socket.resume();
- });
- });
}
- // Socket options (defaults host/port to options.proxy.host/options.proxy.port)
- getSocketOptions() {
- return Object.assign(Object.assign({}, this.options.socket_options), { host: this.options.proxy.host || this.options.proxy.ipaddress, port: this.options.proxy.port });
+ }
+ function shouldRemoveHeader(header, removeContent, unknownOrigin) {
+ if (header.length === 4) {
+ return util.headerNameToString(header) === "host";
+ }
+ if (removeContent && util.headerNameToString(header).startsWith("content-")) {
+ return true;
}
- /**
- * Handles internal Socks timeout callback.
- * Note: If the Socks client is not BoundWaitingForConnection or Established, the connection will be closed.
- */
- onEstablishedTimeout() {
- if (this.state !== constants_1.SocksClientState.Established && this.state !== constants_1.SocksClientState.BoundWaitingForConnection) {
- this.closeSocket(constants_1.ERRORS.ProxyConnectionTimedOut);
+ if (unknownOrigin && (header.length === 13 || header.length === 6)) {
+ const name = util.headerNameToString(header);
+ return name === "authorization" || name === "cookie";
+ }
+ return false;
+ }
+ function cleanRequestHeaders(headers, removeContent, unknownOrigin) {
+ const ret = [];
+ if (Array.isArray(headers)) {
+ for (let i = 0; i < headers.length; i += 2) {
+ if (!shouldRemoveHeader(headers[i], removeContent, unknownOrigin)) {
+ ret.push(headers[i], headers[i + 1]);
+ }
}
+ } else if (headers && typeof headers === "object") {
+ for (const key of Object.keys(headers)) {
+ if (!shouldRemoveHeader(key, removeContent, unknownOrigin)) {
+ ret.push(key, headers[key]);
+ }
+ }
+ } else {
+ assert3(headers == null, "headers must be an object or an array");
}
+ return ret;
+ }
+ module2.exports = RedirectHandler;
+ }
+});
+
+// .yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/interceptor/redirectInterceptor.js
+var require_redirectInterceptor = __commonJS({
+ ".yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/interceptor/redirectInterceptor.js"(exports, module2) {
+ "use strict";
+ var RedirectHandler = require_RedirectHandler();
+ function createRedirectInterceptor({ maxRedirections: defaultMaxRedirections }) {
+ return (dispatch) => {
+ return function Intercept(opts, handler) {
+ const { maxRedirections = defaultMaxRedirections } = opts;
+ if (!maxRedirections) {
+ return dispatch(opts, handler);
+ }
+ const redirectHandler = new RedirectHandler(dispatch, maxRedirections, opts, handler);
+ opts = { ...opts, maxRedirections: 0 };
+ return dispatch(opts, redirectHandler);
+ };
+ };
+ }
+ module2.exports = createRedirectInterceptor;
+ }
+});
+
+// .yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/llhttp/llhttp-wasm.js
+var require_llhttp_wasm = __commonJS({
+ ".yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/llhttp/llhttp-wasm.js"(exports, module2) {
+ var { Buffer: Buffer2 } = require("node:buffer");
+ module2.exports = Buffer2.from("AGFzbQEAAAABMAhgAX8Bf2ADf39/AX9gBH9/f38Bf2AAAGADf39/AGABfwBgAn9/AGAGf39/f39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQACA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAA0ZFAwMEAAAFAAAAAAAABQEFAAUFBQAABgAAAAAGBgYGAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAABAQcAAAUFAwABBAUBcAESEgUDAQACBggBfwFBgNQECwfRBSIGbWVtb3J5AgALX2luaXRpYWxpemUACRlfX2luZGlyZWN0X2Z1bmN0aW9uX3RhYmxlAQALbGxodHRwX2luaXQAChhsbGh0dHBfc2hvdWxkX2tlZXBfYWxpdmUAQQxsbGh0dHBfYWxsb2MADAZtYWxsb2MARgtsbGh0dHBfZnJlZQANBGZyZWUASA9sbGh0dHBfZ2V0X3R5cGUADhVsbGh0dHBfZ2V0X2h0dHBfbWFqb3IADxVsbGh0dHBfZ2V0X2h0dHBfbWlub3IAEBFsbGh0dHBfZ2V0X21ldGhvZAARFmxsaHR0cF9nZXRfc3RhdHVzX2NvZGUAEhJsbGh0dHBfZ2V0X3VwZ3JhZGUAEwxsbGh0dHBfcmVzZXQAFA5sbGh0dHBfZXhlY3V0ZQAVFGxsaHR0cF9zZXR0aW5nc19pbml0ABYNbGxodHRwX2ZpbmlzaAAXDGxsaHR0cF9wYXVzZQAYDWxsaHR0cF9yZXN1bWUAGRtsbGh0dHBfcmVzdW1lX2FmdGVyX3VwZ3JhZGUAGhBsbGh0dHBfZ2V0X2Vycm5vABsXbGxodHRwX2dldF9lcnJvcl9yZWFzb24AHBdsbGh0dHBfc2V0X2Vycm9yX3JlYXNvbgAdFGxsaHR0cF9nZXRfZXJyb3JfcG9zAB4RbGxodHRwX2Vycm5vX25hbWUAHxJsbGh0dHBfbWV0aG9kX25hbWUAIBJs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ADcDACAAQShqQgA3AwAgAEEgakIANwMAIABBEGpCADcDACAAQQhqQgA3AwAgAEHdATYCHEEAC3sBAX8CQCAAKAIMIgMNAAJAIAAoAgRFDQAgACABNgIECwJAIAAgASACEMSAgIAAIgMNACAAKAIMDwsgACADNgIcQQAhAyAAKAIEIgFFDQAgACABIAIgACgCCBGBgICAAAAiAUUNACAAIAI2AhQgACABNgIMIAEhAwsgAwvk8wEDDn8DfgR/I4CAgIAAQRBrIgMkgICAgAAgASEEIAEhBSABIQYgASEHIAEhCCABIQkgASEKIAEhCyABIQwgASENIAEhDiABIQ8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgACgCHCIQQX9qDt0B2gEB2QECAwQFBgcICQoLDA0O2AEPENcBERLWARMUFRYXGBkaG+AB3wEcHR7VAR8gISIjJCXUASYnKCkqKyzTAdIBLS7RAdABLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVG2wFHSElKzwHOAUvNAUzMAU1OT1BRUlNUVVZXWFlaW1xdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+f4ABgQGCAYMBhAGFAYYBhwGIAYkB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QAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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FCAAIBA2AgxBACEQDLIBCyAAKAIEIRAgAEEANgIEAkAgACAQIAEQp4CAgAAiEA0AIAEhAQxNCyAAQdMANgIcIAAgATYCFCAAIBA2AgxBACEQDLEBCyAAKAIEIRAgAEEANgIEAkAgACAQIAEQp4CAgAAiEA0AIAEhAQxRCyAAQeUANgIcIAAgATYCFCAAIBA2AgxBACEQDLABCyAAQQA2AhwgACABNgIUIABBxoqAgAA2AhAgAEEHNgIMQQAhEAyvAQsgACgCBCEQIABBADYCBAJAIAAgECABEKeAgIAAIhANACABIQEMSQsgAEHSADYCHCAAIAE2AhQgACAQNgIMQQAhEAyuAQsgACgCBCEQIABBADYCBAJAIAAgECABEKeAgIAAIhANACABIQEMSQsgAEHTADYCHCAAIAE2AhQgACAQNgIMQQAhEAytAQsgACgCBCEQIABBADYCBAJAIAAgECABEKeAgIAAIhANACABIQEMTQsgAEHlADYCHCAAIAE2AhQgACAQNgIMQQAhEAysAQsgAEEANgIcIAAgATYCFCAAQdyIgIAANgIQIABBBzYCDEEAIRAMqwELIBBBP0cNASABQQFqIQELQQUhEAyQAQtBACEQIABBADYCHCAAIAE2AhQgAEH9koCAADYCECAAQQc2AgwMqAELIAAoAgQhECAAQQA2AgQCQCAAIBAgARCngICAACIQDQAgASEBDEILIABB0gA2AhwgACABNgIUIAAgEDYCDEEAIRAMpwELIAAoAgQhECAAQQA2AgQCQCAAIBAgARCngICAACIQDQAgASEBDEILIABB0wA2AhwgACABNgIUIAAgEDYCDEEAIRAMpgELIAAoAgQhECAAQQA2AgQCQCAAIBAgARCngICAACIQDQAgASEBDEYLIABB5QA2AhwgACABNgIUIAAgEDYCDEEAIRAMpQELIAAoAgQhASAAQQA2AgQCQCAAIAEgFBCngICAACIBDQAgFCEBDD8LIABB0gA2AhwgACAUNgIUIAAgATYCDEEAIRAMpAELIAAoAgQhASAAQQA2AgQCQCAAIAEgFBCngICAACIBDQAgFCEBDD8LIABB0wA2AhwgACAUNgIUIAAgATYCDEEAIRAMowELIAAoAgQhASAAQQA2AgQCQCAAIAEgFBCngICAACIBDQAgFCEBDEMLIABB5QA2AhwgACAU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YWdlX2JlZ2luYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlYCBjYWxsYmFjayBlcnJvcgBgb25fc3RhdHVzX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdmVyc2lvbl9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3VybF9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX3ZhbHVlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWVzc2FnZV9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX21ldGhvZF9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2hlYWRlcl9maWVsZF9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lYCBjYWxsYmFjayBlcnJvcgBVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNlcnZlcgBJbnZhbGlkIGhlYWRlciB2YWx1ZSBjaGFyAEludmFsaWQgaGVhZGVyIGZpZWxkIGNoYXIAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl92ZXJzaW9uAEludmFsaWQgbWlub3IgdmVyc2lvbgBJbnZhbGlkIG1ham9yIHZlcnNpb24ARXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgdmVyc2lvbgBFeHBlY3RlZCBDUkxGIGFmdGVyIHZlcnNpb24ASW52YWxpZCBIVFRQIHZlcnNpb24ASW52YWxpZCBoZWFkZXIgdG9rZW4AU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl91cmwASW52YWxpZCBjaGFyYWN0ZXJzIGluIHVybABVbmV4cGVjdGVkIHN0YXJ0IGNoYXIgaW4gdXJsAERvdWJsZSBAIGluIHVybABFbXB0eSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXJhY3RlciBpbiBDb250ZW50LUxlbmd0aABEdXBsaWNhdGUgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyIGluIHVybCBwYXRoAENvbnRlbnQtTGVuZ3RoIGNhbid0IGJlIHByZXNlbnQgd2l0aCBUcmFuc2Zlci1FbmNvZGluZwBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBzaXplAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25faGVhZGVyX3ZhbHVlAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgdmFsdWUATWlzc2luZyBleHBlY3RlZCBMRiBhZnRlciBoZWFkZXIgdmFsdWUASW52YWxpZCBgVHJhbnNmZXItRW5jb2RpbmdgIGhlYWRlciB2YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHF1b3RlIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGVkIHZhbHVlAFBhdXNlZCBieSBvbl9oZWFkZXJzX2NvbXBsZXRlAEludmFsaWQgRU9GIHN0YXRlAG9uX3Jlc2V0IHBhdXNlAG9uX2NodW5rX2hlYWRlciBwYXVzZQBvbl9tZXNzYWdlX2JlZ2luIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZSBwYXVzZQBvbl9zdGF0dXNfY29tcGxldGUgcGF1c2UAb25fdmVyc2lvbl9jb21wbGV0ZSBwYXVzZQBvbl91cmxfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX3ZhbHVlX2NvbXBsZXRlIHBhdXNlAG9uX21lc3NhZ2VfY29tcGxldGUgcGF1c2UAb25fbWV0aG9kX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl9maWVsZF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fbmFtZSBwYXVzZQBVbmV4cGVjdGVkIHNwYWNlIGFmdGVyIHN0YXJ0IGxpbmUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fbmFtZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIG5hbWUAUGF1c2Ugb24gQ09OTkVDVC9VcGdyYWRlAFBhdXNlIG9uIFBSSS9VcGdyYWRlAEV4cGVjdGVkIEhUVFAvMiBDb25uZWN0aW9uIFByZWZhY2UAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9tZXRob2QARXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgbWV0aG9kAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25faGVhZGVyX2ZpZWxkAFBhdXNlZABJbnZhbGlkIHdvcmQgZW5jb3VudGVyZWQASW52YWxpZCBtZXRob2QgZW5jb3VudGVyZWQAVW5leHBlY3RlZCBjaGFyIGluIHVybCBzY2hlbWEAUmVxdWVzdCBoYXMgaW52YWxpZCBgVHJhbnNmZXItRW5jb2RpbmdgAFNXSVRDSF9QUk9YWQBVU0VfUFJPWFkATUtBQ1RJVklUWQBVTlBST0NFU1NBQkxFX0VOVElUWQBDT1BZAE1PVkVEX1BFUk1BTkVOVExZAFRPT19FQVJMWQBOT1RJRlkARkFJTEVEX0RFUEVOREVOQ1kAQkFEX0dBVEVXQVkAUExBWQBQVVQAQ0hFQ0tPVVQAR0FURVdBWV9USU1FT1VUAFJFUVVFU1RfVElNRU9VVABORVRXT1JLX0NPTk5FQ1RfVElNRU9VVABDT05ORUNUSU9OX1RJTUVPVVQATE9HSU5fVElNRU9VVABORVRXT1JLX1JFQURfVElNRU9VVABQT1NUAE1JU0RJUkVDVEVEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfTE9BRF9CQUxBTkNFRF9SRVFVRVNUAEJBRF9SRVFVRVNUAEhUVFBfUkVRVUVTVF9TRU5UX1RPX0hUVFBTX1BPUlQAUkVQT1JUAElNX0FfVEVBUE9UAFJFU0VUX0NPTlRFTlQATk9fQ09OVEVOVABQQVJUSUFMX0NPTlRFTlQASFBFX0lOVkFMSURfQ09OU1RBTlQASFBFX0NCX1JFU0VUAEdFVABIUEVfU1RSSUNUAENPTkZMSUNUAFRFTVBPUkFSWV9SRURJUkVDVABQRVJNQU5FTlRfUkVESVJFQ1QAQ09OTkVDVABNVUxUSV9TVEFUVVMASFBFX0lOVkFMSURfU1RBVFVTAFRPT19NQU5ZX1JFUVVFU1RTAEVBUkxZX0hJTlRTAFVOQVZBSUxBQkxFX0ZPUl9MRUdBTF9SRUFTT05TAE9QVElPTlMAU1dJVENISU5HX1BST1RPQ09MUwBWQVJJQU5UX0FMU09fTkVHT1RJQVRFUwBNVUxUSVBMRV9DSE9JQ0VTAElOVEVSTkFMX1NFUlZFUl9FUlJPUgBXRUJfU0VSVkVSX1VOS05PV05fRVJST1IAUkFJTEdVTl9FUlJPUgBJREVOVElUWV9QUk9WSURFUl9BVVRIRU5USUNBVElPTl9FUlJPUgBTU0xfQ0VSVElGSUNBVEVfRVJST1IASU5WQUxJRF9YX0ZPUldBUkRFRF9GT1IAU0VUX1BBUkFNRVRFUgBHRVRfUEFSQU1FVEVSAEhQRV9VU0VSAFNFRV9PVEhFUgBIUEVfQ0JfQ0hVTktfSEVBREVSAE1LQ0FMRU5EQVIAU0VUVVAAV0VCX1NFUlZFUl9JU19ET1dOAFRFQVJET1dOAEhQRV9DTE9TRURfQ09OTkVDVElPTgBIRVVSSVNUSUNfRVhQSVJBVElPTgBESVNDT05ORUNURURfT1BFUkFUSU9OAE5PTl9BVVRIT1JJVEFUSVZFX0lORk9STUFUSU9OAEhQRV9JTlZBTElEX1ZFUlNJT04ASFBFX0NCX01FU1NBR0VfQkVHSU4AU0lURV9JU19GUk9aRU4ASFBFX0lOVkFMSURfSEVBREVSX1RPS0VOAElOVkFMSURfVE9LRU4ARk9SQklEREVOAEVOSEFOQ0VfWU9VUl9DQUxNAEhQRV9JTlZBTElEX1VSTABCTE9DS0VEX0JZX1BBUkVOVEFMX0NPTlRST0wATUtDT0wAQUNMAEhQRV9JTlRFUk5BTABSRVFVRVNUX0hFQURFUl9GSUVMRFNfVE9PX0xBUkdFX1VOT0ZGSUNJQUwASFBFX09LAFVOTElOSwBVTkxPQ0sAUFJJAFJFVFJZX1dJVEgASFBFX0lOVkFMSURfQ09OVEVOVF9MRU5HVEgASFBFX1VORVhQRUNURURfQ09OVEVOVF9MRU5HVEgARkxVU0gAUFJPUFBBVENIAE0tU0VBUkNIAFVSSV9UT09fTE9ORwBQUk9DRVNTSU5HAE1JU0NFTExBTkVPVVNfUEVSU0lTVEVOVF9XQVJOSU5HAE1JU0NFTExBTkVPVVNfV0FSTklORwBIUEVfSU5WQUxJRF9UUkFOU0ZFUl9FTkNPRElORwBFeHBlY3RlZCBDUkxGAEhQRV9JTlZBTElEX0NIVU5LX1NJWkUATU9WRQBDT05USU5VRQBIUEVfQ0JfU1RBVFVTX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJTX0NPTVBMRVRFAEhQRV9DQl9WRVJTSU9OX0NPTVBMRVRFAEhQRV9DQl9VUkxfQ09NUExFVEUASFBFX0NCX0NIVU5LX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJfVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9WQUxVRV9DT01QTEVURQBIUEVfQ0JfQ0hVTktfRVhURU5TSU9OX05BTUVfQ09NUExFVEUASFBFX0NCX01FU1NBR0VfQ09NUExFVEUASFBFX0NCX01FVEhPRF9DT01QTEVURQBIUEVfQ0JfSEVBREVSX0ZJRUxEX0NPTVBMRVRFAERFTEVURQBIUEVfSU5WQUxJRF9FT0ZfU1RBVEUASU5WQUxJRF9TU0xfQ0VSVElGSUNBVEUAUEFVU0UATk9fUkVTUE9OU0UAVU5TVVBQT1JURURfTUVESUFfVFlQRQBHT05FAE5PVF9BQ0NFUFRBQkxFAFNFUlZJQ0VfVU5BVkFJTEFCTEUAUkFOR0VfTk9UX1NBVElTRklBQkxFAE9SSUdJTl9JU19VTlJFQUNIQUJMRQBSRVNQT05TRV9JU19TVEFMRQBQVVJHRQBNRVJHRQBSRVFVRVNUX0hFQURFUl9GSUVMRFNfVE9PX0xBUkdFAFJFUVVFU1RfSEVBREVSX1RPT19MQVJHRQBQQVlMT0FEX1RPT19MQVJHRQBJTlNVRkZJQ0lFTlRfU1RPUkFHRQBIUEVfUEFVU0VEX1VQR1JBREUASFBFX1BBVVNFRF9IMl9VUEdSQURFAFNPVVJDRQBBTk5PVU5DRQBUUkFDRQBIUEVfVU5FWFBFQ1RFRF9TUEFDRQBERVNDUklCRQBVTlNVQlNDUklCRQBSRUNPUkQASFBFX0lOVkFMSURfTUVUSE9EAE5PVF9GT1VORABQUk9QRklORABVTkJJTkQAUkVCSU5EAFVOQVVUSE9SSVpFRABNRVRIT0RfTk9UX0FMTE9XRUQASFRUUF9WRVJTSU9OX05PVF9TVVBQT1JURUQAQUxSRUFEWV9SRVBPUlRFRABBQ0NFUFRFRABOT1RfSU1QTEVNRU5URUQATE9PUF9ERVRFQ1RFRABIUEVfQ1JfRVhQRUNURUQASFBFX0xGX0VYUEVDVEVEAENSRUFURUQASU1fVVNFRABIUEVfUEFVU0VEAFRJTUVPVVRfT0NDVVJFRABQQVlNRU5UX1JFUVVJUkVEAFBSRUNPTkRJVElPTl9SRVFVSVJFRABQUk9YWV9BVVRIRU5USUNBVElPTl9SRVFVSVJFRABORVRXT1JLX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEAExFTkdUSF9SRVFVSVJFRABTU0xfQ0VSVElGSUNBVEVfUkVRVUlSRUQAVVBHUkFERV9SRVFVSVJFRABQQUdFX0VYUElSRUQAUFJFQ09ORElUSU9OX0ZBSUxFRABFWFBFQ1RBVElPTl9GQUlMRUQAUkVWQUxJREFUSU9OX0ZBSUxFRABTU0xfSEFORFNIQUtFX0ZBSUxFRABMT0NLRUQAVFJBTlNGT1JNQVRJT05fQVBQTElFRABOT1RfTU9ESUZJRUQATk9UX0VYVEVOREVEAEJBTkRXSURUSF9MSU1JVF9FWENFRURFRABTSVRFX0lTX09WRVJMT0FERUQASEVBRABFeHBlY3RlZCBIVFRQLwAAXhMAACYTAAAwEAAA8BcAAJ0TAAAVEgAAORcAAPASAAAKEAAAdRIAAK0SAACCEwAATxQAAH8QAACgFQAAIxQAAIkSAACLFAAATRUAANQRAADPFAAAEBgAAMkWAADcFgAAwREAAOAXAAC7FAAAdBQAAHwVAADlFAAACBcAAB8QAABlFQAAoxQAACgVAAACFQAAmRUAACwQAACLGQAATw8AANQOAABqEAAAzhAAAAIXAACJDgAAbhMAABwTAABmFAAAVhcAAMETAADNEwAAbBMAAGgXAABmFwAAXxcAACITAADODwAAaQ4AANgOAABjFgAAyxMAAKoOAAAoFwAAJhcAAMUTAABdFgAA6BEAAGcTAABlEwAA8hYAAHMTAAAdFwAA+RYAAPMRAADPDgAAzhUAAAwSAACzEQAApREAAGEQAAAyFwAAuxMAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAIDAgICAgIAAAICAAICAAICAgICAgICAgIABAAAAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgIAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgACAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAACAAICAgICAAACAgACAgACAgICAgICAgICAAMABAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbG9zZWVlcC1hbGl2ZQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBY2h1bmtlZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEAAQEBAQEAAAEBAAEBAAEBAQEBAQEBAQEAAAAAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AAAAAAAAAAAAAAAAAAAByYW5zZmVyLWVuY29kaW5ncGdyYWRlDQoNCg0KU00NCg0KVFRQL0NFL1RTUC8AAAAAAAAAAAAAAAABAgABAwAAAAAAAAAAAAAAAAAAAAAAAAQBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAQIAAQMAAAAAAAAAAAAAAAAAAAAAAAAEAQEFAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAEAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAAAAAAAAAAQAAAgAAAAAAAAAAAAAAAAAAAAAAAAMEAAAEBAQEBAQEBAQEBAUEBAQEBAQEBAQEBAQABAAGBwQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAIAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABOT1VOQ0VFQ0tPVVRORUNURVRFQ1JJQkVMVVNIRVRFQURTRUFSQ0hSR0VDVElWSVRZTEVOREFSVkVPVElGWVBUSU9OU0NIU0VBWVNUQVRDSEdFT1JESVJFQ1RPUlRSQ0hQQVJBTUVURVJVUkNFQlNDUklCRUFSRE9XTkFDRUlORE5LQ0tVQlNDUklCRUhUVFAvQURUUC8=", "base64");
+ }
+});
+
+// .yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/llhttp/llhttp_simd-wasm.js
+var require_llhttp_simd_wasm = __commonJS({
+ ".yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/llhttp/llhttp_simd-wasm.js"(exports, module2) {
+ var { Buffer: Buffer2 } = require("node:buffer");
+ module2.exports = Buffer2.from("AGFzbQEAAAABMAhgAX8Bf2ADf39/AX9gBH9/f38Bf2AAAGADf39/AGABfwBgAn9/AGAGf39/f39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQACA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAA0ZFAwMEAAAFAAAAAAAABQEFAAUFBQAABgAAAAAGBgYGAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAABAQcAAAUFAwABBAUBcAESEgUDAQACBggBfwFBgNQECwfRBSIGbWVtb3J5AgALX2luaXRpYWxpemUACRlfX2luZGlyZWN0X2Z1bmN0aW9uX3RhYmxlAQALbGxodHRwX2luaXQAChhsbGh0dHBfc2hvdWxkX2tlZXBfYWxpdmUAQQxsbGh0dHBfYWxsb2MADAZtYWxsb2MARgtsbGh0dHBfZnJlZQANBGZyZWUASA9sbGh0dHBfZ2V0X3R5cGUADhVsbGh0dHBfZ2V0X2h0dHBfbWFqb3IADxVsbGh0dHBfZ2V0X2h0dHBfbWlub3IAEBFsbGh0dHBfZ2V0X21ldGhvZAARFmxsaHR0cF9nZXRfc3RhdHVzX2NvZGUAEhJsbGh0dHBfZ2V0X3VwZ3JhZGUAEwxsbGh0dHBfcmVzZXQAFA5sbGh0dHBfZXhlY3V0ZQAVFGxsaHR0cF9zZXR0aW5nc19pbml0ABYNbGxodHRwX2ZpbmlzaAAXDGxsaHR0cF9wYXVzZQAYDWxsaHR0cF9yZXN1bWUAGRtsbGh0dHBfcmVzdW1lX2FmdGVyX3VwZ3JhZGUAGhBsbGh0dHBfZ2V0X2Vycm5vABsXbGxodHRwX2dldF9lcnJvcl9yZWFzb24AHBdsbGh0dHBfc2V0X2Vycm9yX3JlYXNvbgAdFGxsaHR0cF9nZXRfZXJyb3JfcG9zAB4RbGxodHRwX2Vycm5vX25hbWUAHxJsbGh0dHBfbWV0aG9kX25hbWUAIBJsbGh0dHBfc3RhdHVzX25hbWUAIRpsbGh0dHBfc2V0X2xlbmllbnRfaGVhZGVycwAiIWxsaHR0cF9zZXRfbGVuaWVudF9jaHVua2VkX2xlbmd0aAAjHWxsaHR0cF9zZXRfbGVuaWVudF9rZWVwX2FsaXZlACQkbGxodHRwX3NldF9sZW5pZW50X3RyYW5zZmVyX2VuY29kaW5nACUYbGxodHRwX21lc3NhZ2VfbmVlZHNfZW9mAD8JFwEAQQELEQECAwQFCwYHNTk3MS8tJyspCrLgAkUCAAsIABCIgICAAAsZACAAEMKAgIAAGiAAIAI2AjggACABOgAoCxwAIAAgAC8BMiAALQAuIAAQwYCAgAAQgICAgAALKgEBf0HAABDGgICAACIBEMKAgIAAGiABQYCIgIAANgI4IAEgADoAKCABCwoAIAAQyICAgAALBwAgAC0AKAsHACAALQAqCwcAIAAtACsLBwAgAC0AKQsHACAALwEyCwcAIAAtAC4LRQEEfyAAKAIYIQEgAC0ALSECIAAtACghAyAAKAI4IQQgABDCgICAABogACAENgI4IAAgAzoAKCAAIAI6AC0gACABNgIYCxEAIAAgASABIAJqEMOAgIAACxAAIABBAEHcABDMgICAABoLZwEBf0EAIQECQCAAKAIMDQACQAJAAkACQCAALQAvDgMBAAMCCyAAKAI4IgFFDQAgASgCLCIBRQ0AIAAgARGAgICAAAAiAQ0DC0EADwsQyoCAgAAACyAAQcOWgIAANgIQQQ4hAQsgAQseAAJAIAAoAgwNACAAQdGbgIAANgIQIABBFTYCDAsLFgACQCAAKAIMQRVHDQAgAEEANgIMCwsWAAJAIAAoAgxBFkcNACAAQQA2AgwLCwcAIAAoAgwLBwAgACgCEAsJACAAIAE2AhALBwAgACgCFAsiAAJAIABBJEkNABDKgICAAAALIABBAnRBoLOAgABqKAIACyIAAkAgAEEuSQ0AEMqAgIAAAAsgAEECdEGwtICAAGooAgAL7gsBAX9B66iAgAAhAQJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABBnH9qDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0Hhp4CAAA8LQaShgIAADwtBy6yAgAAPC0H+sYCAAA8LQcCkgIAADwtBq6SAgAAPC0GNqICAAA8LQeKmgIAADwtBgLCAgAAPC0G5r4CAAA8LQdekgIAADwtB75+AgAAPC0Hhn4CAAA8LQfqfgIAADwtB8qCAgAAPC0Gor4CAAA8LQa6ygIAADwtBiLCAgAAPC0Hsp4CAAA8LQYKigIAADwtBjp2AgAAPC0HQroCAAA8LQcqjgIAADwtBxbKAgAAPC0HfnICAAA8LQdKcgIAADwtBxKCAgAAPC0HXoICAAA8LQaKfgIAADwtB7a6AgAAPC0GrsICAAA8LQdSlgIAADwtBzK6AgAAPC0H6roCAAA8LQfyrgIAADwtB0rCAgAAPC0HxnYCAAA8LQbuggIAADwtB96uAgAAPC0GQsYCAAA8LQdexgIAADwtBoq2AgAAPC0HUp4CAAA8LQeCrgIAADwtBn6yAgAAPC0HrsYCAAA8LQdWfgIAADwtByrGAgAAPC0HepYCAAA8LQdSegIAADwtB9JyAgAAPC0GnsoCAAA8LQbGdgIAADwtBoJ2AgAAPC0G5sYCAAA8LQbywgIAADwtBkqGAgAAPC0GzpoCAAA8LQemsgIAADwtBrJ6AgAAPC0HUq4CAAA8LQfemgIAADwtBgKaAgAAPC0GwoYCAAA8LQf6egIAADwtBjaOAgAAPC0GJrYCAAA8LQfeigIAADwtBoLGAgAAPC0Gun4CAAA8LQcalgIAADwtB6J6AgAAPC0GTooCAAA8LQcKvgIAADwtBw52AgAAPC0GLrICAAA8LQeGdgIAADwtBja+AgAAPC0HqoYCAAA8LQbStgIAADwtB0q+AgAAPC0HfsoCAAA8LQdKygIAADwtB8LCAgAAPC0GpooCAAA8LQfmjgIAADwtBmZ6AgAAPC0G1rICAAA8LQZuwgIAADwtBkrKAgAAPC0G2q4CAAA8LQcKigIAADwtB+LKAgAAPC0GepYCAAA8LQdCigIAADwtBup6AgAAPC0GBnoCAAA8LEMqAgIAAAAtB1qGAgAAhAQsgAQsWACAAIAAtAC1B/gFxIAFBAEdyOgAtCxkAIAAgAC0ALUH9AXEgAUEAR0EBdHI6AC0LGQAgACAALQAtQfsBcSABQQBHQQJ0cjoALQsZACAAIAAtAC1B9wFxIAFBAEdBA3RyOgAtCy4BAn9BACEDAkAgACgCOCIERQ0AIAQoAgAiBEUNACAAIAQRgICAgAAAIQMLIAMLSQECf0EAIQMCQCAAKAI4IgRFDQAgBCgCBCIERQ0AIAAgASACIAFrIAQRgYCAgAAAIgNBf0cNACAAQcaRgIAANgIQQRghAwsgAwsuAQJ/QQAhAwJAIAAoAjgiBEUNACAEKAIwIgRFDQAgACAEEYCAgIAAACEDCyADC0kBAn9BACEDAkAgACgCOCIERQ0AIAQoAggiBEUNACAAIAEgAiABayAEEYGAgIAAACIDQX9HDQAgAEH2ioCAADYCEEEYIQMLIAMLLgECf0EAIQMCQCAAKAI4IgRFDQAgBCgCNCIERQ0AIAAgBBGAgICAAAAhAwsgAwtJAQJ/QQAhAwJAIAAoAjgiBEUNACAEKAIMIgRFDQAgACABIAIgAWsgBBGBgICAAAAiA0F/Rw0AIABB7ZqAgAA2AhBBGCEDCyADCy4BAn9BACEDAkAgACgCOCIERQ0AIAQoAjgiBEUNACAAIAQRgICAgAAAIQMLIAMLSQECf0EAIQMCQCAAKAI4IgRFDQAgBCgCECIERQ0AIAAgASACIAFrIAQRgYCAgAAAIgNBf0cNACAAQZWQgIAANgIQQRghAwsgAwsuAQJ/QQAhAwJAIAAoAjgiBEUNACAEKAI8IgRFDQAgACAEEYCAgIAAACEDCyADC0kBAn9BACEDAkAgACgCOCIERQ0AIAQoAhQiBEUNACAAIAEgAiABayAEEYGAgIAAACIDQX9HDQAgAEGqm4CAADYCEEEYIQMLIAMLLgECf0EAIQMCQCAAKAI4IgRFDQAgBCgCQCIERQ0AIAAgBBGAgICAAAAhAwsgAwtJAQJ/QQAhAwJAIAAoAjgiBEUNACAEKAIYIgRFDQAgACABIAIgAWsgBBGBgICAAAAiA0F/Rw0AIABB7ZOAgAA2AhBBGCEDCyADCy4BAn9BACEDAkAgACgCOCIERQ0AIAQoAkQiBEUNACAAIAQRgICAgAAAIQMLIAMLLgECf0EAIQMCQCAAKAI4IgRFDQAgBCgCJCIERQ0AIAAgBBGAgICAAAAhAwsgAwsuAQJ/QQAhAwJAIAAoAjgiBEUNACAEKAIsIgRFDQAgACAEEYCAgIAAACEDCyADC0kBAn9BACEDAkAgACgCOCIERQ0AIAQoAigiBEUNACAAIAEgAiABayAEEYGAgIAAACIDQX9HDQAgAEH2iICAADYCEEEYIQMLIAMLLgECf0EAIQMCQCAAKAI4IgRFDQAgBCgCUCIERQ0AIAAgBBGAgICAAAAhAwsgAwtJAQJ/QQAhAwJAIAAoAjgiBEUNACAEKAIcIgRFDQAgACABIAIgAWsgBBGBgICAAAAiA0F/Rw0AIABBwpmAgAA2AhBBGCEDCyADCy4BAn9BACEDAkAgACgCOCIERQ0AIAQoAkgiBEUNACAAIAQRgICAgAAAIQMLIAMLSQECf0EAIQMCQCAAKAI4IgRFDQAgBCgCICIERQ0AIAAgASACIAFrIAQRgYCAgAAAIgNBf0cNACAAQZSUgIAANgIQQRghAwsgAwsuAQJ/QQAhAwJAIAAoAjgiBEUNACAEKAJMIgRFDQAgACAEEYCAgIAAACEDCyADCy4BAn9BACEDAkAgACgCOCIERQ0AIAQoAlQiBEUNACAAIAQRgICAgAAAIQMLIAMLLgECf0EAIQMCQCAAKAI4IgRFDQAgBCgCWCIERQ0AIAAgBBGAgICAAAAhAwsgAwtFAQF/AkACQCAALwEwQRRxQRRHDQBBASEDIAAtAChBAUYNASAALwEyQeUARiEDDAELIAAtAClBBUYhAwsgACADOgAuQQAL/gEBA39BASEDAkAgAC8BMCIEQQhxDQAgACkDIEIAUiEDCwJAAkAgAC0ALkUNAEEBIQUgAC0AKUEFRg0BQQEhBSAEQcAAcUUgA3FBAUcNAQtBACEFIARBwABxDQBBAiEFIARB//8DcSIDQQhxDQACQCADQYAEcUUNAAJAIAAtAChBAUcNACAALQAtQQpxDQBBBQ8LQQQPCwJAIANBIHENAAJAIAAtAChBAUYNACAALwEyQf//A3EiAEGcf2pB5ABJDQAgAEHMAUYNACAAQbACRg0AQQQhBSAEQShxRQ0CIANBiARxQYAERg0CC0EADwtBAEEDIAApAyBQGyEFCyAFC2IBAn9BACEBAkAgAC0AKEEBRg0AIAAvATJB//8DcSICQZx/akHkAEkNACACQcwBRg0AIAJBsAJGDQAgAC8BMCIAQcAAcQ0AQQEhASAAQYgEcUGABEYNACAAQShxRSEBCyABC6cBAQN/AkACQAJAIAAtACpFDQAgAC0AK0UNAEEAIQMgAC8BMCIEQQJxRQ0BDAILQQAhAyAALwEwIgRBAXFFDQELQQEhAyAALQAoQQFGDQAgAC8BMkH//wNxIgVBnH9qQeQASQ0AIAVBzAFGDQAgBUGwAkYNACAEQcAAcQ0AQQAhAyAEQYgEcUGABEYNACAEQShxQQBHIQMLIABBADsBMCAAQQA6AC8gAwuZAQECfwJAAkACQCAALQAqRQ0AIAAtACtFDQBBACEBIAAvATAiAkECcUUNAQwCC0EAIQEgAC8BMCICQQFxRQ0BC0EBIQEgAC0AKEEBRg0AIAAvATJB//8DcSIAQZx/akHkAEkNACAAQcwBRg0AIABBsAJGDQAgAkHAAHENAEEAIQEgAkGIBHFBgARGDQAgAkEocUEARyEBCyABC0kBAXsgAEEQav0MAAAAAAAAAAAAAAAAAAAAACIB/QsDACAAIAH9CwMAIABBMGogAf0LAwAgAEEgaiAB/QsDACAAQd0BNgIcQQALewEBfwJAIAAoAgwiAw0AAkAgACgCBEUNACAAIAE2AgQLAkAgACABIAIQxICAgAAiAw0AIAAoAgwPCyAAIAM2AhxBACEDIAAoAgQiAUUNACAAIAEgAiAAKAIIEYGAgIAAACIBRQ0AIAAgAjYCFCAAIAE2AgwgASEDCyADC+TzAQMOfwN+BH8jgICAgABBEGsiAySAgICAACABIQQgASEFIAEhBiABIQcgASEIIAEhCSABIQogASELIAEhDCABIQ0gASEOIAEhDwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAAKAIcIhBBf2oO3QHaAQHZAQIDBAUGBwgJCgsMDQ7YAQ8Q1wEREtYBExQVFhcYGRob4AHfARwdHtUBHyAhIiMkJdQBJicoKSorLNMB0gEtLtEB0AEvMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUbbAUdISUrPAc4BS80BTMwBTU5PUFFSU1RVVldYWVpbXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5/gAGBAYIBgwGEAYUBhgGHAYgBiQGKAYsBjAGNAY4BjwGQAZEB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QAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIBAOxwEAAQID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YWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fdmFsdWVgIGNhbGxiYWNrIGVycm9yAGBvbl9zdGF0dXNfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl92ZXJzaW9uX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdXJsX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAEVtcHR5IENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhcmFjdGVyIGluIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBNaXNzaW5nIGV4cGVjdGVkIExGIGFmdGVyIGhlYWRlciB2YWx1ZQBJbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AgaGVhZGVyIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGUgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZWQgdmFsdWUAUGF1c2VkIGJ5IG9uX2hlYWRlcnNfY29tcGxldGUASW52YWxpZCBFT0Ygc3RhdGUAb25fcmVzZXQgcGF1c2UAb25fY2h1bmtfaGVhZGVyIHBhdXNlAG9uX21lc3NhZ2VfYmVnaW4gcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlIHBhdXNlAG9uX3N0YXR1c19jb21wbGV0ZSBwYXVzZQBvbl92ZXJzaW9uX2NvbXBsZXRlIHBhdXNlAG9uX3VybF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGUgcGF1c2UAb25fbWVzc2FnZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXRob2RfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lIHBhdXNlAFVuZXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgc3RhcnQgbGluZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgbmFtZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AAU1dJVENIX1BST1hZAFVTRV9QUk9YWQBNS0FDVElWSVRZAFVOUFJPQ0VTU0FCTEVfRU5USVRZAENPUFkATU9WRURfUEVSTUFORU5UTFkAVE9PX0VBUkxZAE5PVElGWQBGQUlMRURfREVQRU5ERU5DWQBCQURfR0FURVdBWQBQTEFZAFBVVABDSEVDS09VVABHQVRFV0FZX1RJTUVPVVQAUkVRVUVTVF9USU1FT1VUAE5FVFdPUktfQ09OTkVDVF9USU1FT1VUAENPTk5FQ1RJT05fVElNRU9VVABMT0dJTl9USU1FT1VUAE5FVFdPUktfUkVBRF9USU1FT1VUAFBPU1QATUlTRElSRUNURURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9MT0FEX0JBTEFOQ0VEX1JFUVVFU1QAQkFEX1JFUVVFU1QASFRUUF9SRVFVRVNUX1NFTlRfVE9fSFRUUFNfUE9SVABSRVBPUlQASU1fQV9URUFQT1QAUkVTRVRfQ09OVEVOVABOT19DT05URU5UAFBBUlRJQUxfQ09OVEVOVABIUEVfSU5WQUxJRF9DT05TVEFOVABIUEVfQ0JfUkVTRVQAR0VUAEhQRV9TVFJJQ1QAQ09ORkxJQ1QAVEVNUE9SQVJZX1JFRElSRUNUAFBFUk1BTkVOVF9SRURJUkVDVABDT05ORUNUAE1VTFRJX1NUQVRVUwBIUEVfSU5WQUxJRF9TVEFUVVMAVE9PX01BTllfUkVRVUVTVFMARUFSTFlfSElOVFMAVU5BVkFJTEFCTEVfRk9SX0xFR0FMX1JFQVNPTlMAT1BUSU9OUwBTV0lUQ0hJTkdfUFJPVE9DT0xTAFZBUklBTlRfQUxTT19ORUdPVElBVEVTAE1VTFRJUExFX0NIT0lDRVMASU5URVJOQUxfU0VSVkVSX0VSUk9SAFdFQl9TRVJWRVJfVU5LTk9XTl9FUlJPUgBSQUlMR1VOX0VSUk9SAElERU5USVRZX1BST1ZJREVSX0FVVEhFTlRJQ0FUSU9OX0VSUk9SAFNTTF9DRVJUSUZJQ0FURV9FUlJPUgBJTlZBTElEX1hfRk9SV0FSREVEX0ZPUgBTRVRfUEFSQU1FVEVSAEdFVF9QQVJBTUVURVIASFBFX1VTRVIAU0VFX09USEVSAEhQRV9DQl9DSFVOS19IRUFERVIATUtDQUxFTkRBUgBTRVRVUABXRUJfU0VSVkVSX0lTX0RPV04AVEVBUkRPV04ASFBFX0NMT1NFRF9DT05ORUNUSU9OAEhFVVJJU1RJQ19FWFBJUkFUSU9OAERJU0NPTk5FQ1RFRF9PUEVSQVRJT04ATk9OX0FVVEhPUklUQVRJVkVfSU5GT1JNQVRJT04ASFBFX0lOVkFMSURfVkVSU0lPTgBIUEVfQ0JfTUVTU0FHRV9CRUdJTgBTSVRFX0lTX0ZST1pFTgBIUEVfSU5WQUxJRF9IRUFERVJfVE9LRU4ASU5WQUxJRF9UT0tFTgBGT1JCSURERU4ARU5IQU5DRV9ZT1VSX0NBTE0ASFBFX0lOVkFMSURfVVJMAEJMT0NLRURfQllfUEFSRU5UQUxfQ09OVFJPTABNS0NPTABBQ0wASFBFX0lOVEVSTkFMAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0VfVU5PRkZJQ0lBTABIUEVfT0sAVU5MSU5LAFVOTE9DSwBQUkkAUkVUUllfV0lUSABIUEVfSU5WQUxJRF9DT05URU5UX0xFTkdUSABIUEVfVU5FWFBFQ1RFRF9DT05URU5UX0xFTkdUSABGTFVTSABQUk9QUEFUQ0gATS1TRUFSQ0gAVVJJX1RPT19MT05HAFBST0NFU1NJTkcATUlTQ0VMTEFORU9VU19QRVJTSVNURU5UX1dBUk5JTkcATUlTQ0VMTEFORU9VU19XQVJOSU5HAEhQRV9JTlZBTElEX1RSQU5TRkVSX0VOQ09ESU5HAEV4cGVjdGVkIENSTEYASFBFX0lOVkFMSURfQ0hVTktfU0laRQBNT1ZFAENPTlRJTlVFAEhQRV9DQl9TVEFUVVNfQ09NUExFVEUASFBFX0NCX0hFQURFUlNfQ09NUExFVEUASFBFX0NCX1ZFUlNJT05fQ09NUExFVEUASFBFX0NCX1VSTF9DT01QTEVURQBIUEVfQ0JfQ0hVTktfQ09NUExFVEUASFBFX0NCX0hFQURFUl9WQUxVRV9DT01QTEVURQBIUEVfQ0JfQ0hVTktfRVhURU5TSU9OX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fTkFNRV9DT01QTEVURQBIUEVfQ0JfTUVTU0FHRV9DT01QTEVURQBIUEVfQ0JfTUVUSE9EX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJfRklFTERfQ09NUExFVEUAREVMRVRFAEhQRV9JTlZBTElEX0VPRl9TVEFURQBJTlZBTElEX1NTTF9DRVJUSUZJQ0FURQBQQVVTRQBOT19SRVNQT05TRQBVTlNVUFBPUlRFRF9NRURJQV9UWVBFAEdPTkUATk9UX0FDQ0VQVEFCTEUAU0VSVklDRV9VTkFWQUlMQUJMRQBSQU5HRV9OT1RfU0FUSVNGSUFCTEUAT1JJR0lOX0lTX1VOUkVBQ0hBQkxFAFJFU1BPTlNFX0lTX1NUQUxFAFBVUkdFAE1FUkdFAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0UAUkVRVUVTVF9IRUFERVJfVE9PX0xBUkdFAFBBWUxPQURfVE9PX0xBUkdFAElOU1VGRklDSUVOVF9TVE9SQUdFAEhQRV9QQVVTRURfVVBHUkFERQBIUEVfUEFVU0VEX0gyX1VQR1JBREUAU09VUkNFAEFOTk9VTkNFAFRSQUNFAEhQRV9VTkVYUEVDVEVEX1NQQUNFAERFU0NSSUJFAFVOU1VCU0NSSUJFAFJFQ09SRABIUEVfSU5WQUxJRF9NRVRIT0QATk9UX0ZPVU5EAFBST1BGSU5EAFVOQklORABSRUJJTkQAVU5BVVRIT1JJWkVEAE1FVEhPRF9OT1RfQUxMT1dFRABIVFRQX1ZFUlNJT05fTk9UX1NVUFBPUlRFRABBTFJFQURZX1JFUE9SVEVEAEFDQ0VQVEVEAE5PVF9JTVBMRU1FTlRFRABMT09QX0RFVEVDVEVEAEhQRV9DUl9FWFBFQ1RFRABIUEVfTEZfRVhQRUNURUQAQ1JFQVRFRABJTV9VU0VEAEhQRV9QQVVTRUQAVElNRU9VVF9PQ0NVUkVEAFBBWU1FTlRfUkVRVUlSRUQAUFJFQ09ORElUSU9OX1JFUVVJUkVEAFBST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEAE5FVFdPUktfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATEVOR1RIX1JFUVVJUkVEAFNTTF9DRVJUSUZJQ0FURV9SRVFVSVJFRABVUEdSQURFX1JFUVVJUkVEAFBBR0VfRVhQSVJFRABQUkVDT05ESVRJT05fRkFJTEVEAEVYUEVDVEFUSU9OX0ZBSUxFRABSRVZBTElEQVRJT05fRkFJTEVEAFNTTF9IQU5EU0hBS0VfRkFJTEVEAExPQ0tFRABUUkFOU0ZPUk1BVElPTl9BUFBMSUVEAE5PVF9NT0RJRklFRABOT1RfRVhURU5ERUQAQkFORFdJRFRIX0xJTUlUX0VYQ0VFREVEAFNJVEVfSVNfT1ZFUkxPQURFRABIRUFEAEV4cGVjdGVkIEhUVFAvAABeEwAAJhMAADAQAADwFwAAnRMAABUSAAA5FwAA8BIAAAoQAAB1EgAArRIAAIITAABPFAAAfxAAAKAVAAAjFAAAiRIAAIsUAABNFQAA1BEAAM8UAAAQGAAAyRYAANwWAADBEQAA4BcAALsUAAB0FAAAfBUAAOUUAAAIFwAAHxAAAGUVAACjFAAAKBUAAAIVAACZFQAALBAAAIsZAABPDwAA1A4AAGoQAADOEAAAAhcAAIkOAABuEwAAHBMAAGYUAABWFwAAwRMAAM0TAABsEwAAaBcAAGYXAABfFwAAIhMAAM4PAABpDgAA2A4AAGMWAADLEwAAqg4AACgXAAAmFwAAxRMAAF0WAADoEQAAZxMAAGUTAADyFgAAcxMAAB0XAAD5FgAA8xEAAM8OAADOFQAADBIAALMRAAClEQAAYRAAADIXAAC7EwAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAgMCAgICAgAAAgIAAgIAAgICAgICAgICAgAEAAAAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAIAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAIAAgICAgIAAAICAAICAAICAgICAgICAgIAAwAEAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgIAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgACAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsb3NlZWVwLWFsaXZlAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQFjaHVua2VkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGVjdGlvbmVudC1sZW5ndGhvbnJveHktY29ubmVjdGlvbgAAAAAAAAAAAAAAAAAAAHJhbnNmZXItZW5jb2RpbmdwZ3JhZGUNCg0KDQpTTQ0KDQpUVFAvQ0UvVFNQLwAAAAAAAAAAAAAAAAECAAEDAAAAAAAAAAAAAAAAAAAAAAAABAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAAAAAAAABAgABAwAAAAAAAAAAAAAAAAAAAAAAAAQBAQUBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAQAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAABAAACAAAAAAAAAAAAAAAAAAAAAAAAAwQAAAQEBAQEBAQEBAQEBQQEBAQEBAQEBAQEBAAEAAYHBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAgAAAAACAAAAAAAAAAAAAAAAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE5PVU5DRUVDS09VVE5FQ1RFVEVDUklCRUxVU0hFVEVBRFNFQVJDSFJHRUNUSVZJVFlMRU5EQVJWRU9USUZZUFRJT05TQ0hTRUFZU1RBVENIR0VPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFSFRUUC9BRFRQLw==", "base64");
+ }
+});
+
+// .yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/client.js
+var require_client = __commonJS({
+ ".yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/client.js"(exports, module2) {
+ "use strict";
+ var assert3 = require("node:assert");
+ var net = require("node:net");
+ var http = require("node:http");
+ var { pipeline } = require("node:stream");
+ var util = require_util();
+ var { channels } = require_diagnostics();
+ var timers = require_timers();
+ var Request = require_request();
+ var DispatcherBase = require_dispatcher_base();
+ var {
+ RequestContentLengthMismatchError,
+ ResponseContentLengthMismatchError,
+ InvalidArgumentError,
+ RequestAbortedError,
+ HeadersTimeoutError,
+ HeadersOverflowError,
+ SocketError,
+ InformationalError,
+ BodyTimeoutError,
+ HTTPParserError,
+ ResponseExceededMaxSizeError,
+ ClientDestroyedError
+ } = require_errors();
+ var buildConnector = require_connect();
+ var {
+ kUrl,
+ kReset,
+ kServerName,
+ kClient,
+ kBusy,
+ kParser,
+ kConnect,
+ kBlocking,
+ kResuming,
+ kRunning,
+ kPending,
+ kSize,
+ kWriting,
+ kQueue,
+ kConnected,
+ kConnecting,
+ kNeedDrain,
+ kNoRef,
+ kKeepAliveDefaultTimeout,
+ kHostHeader,
+ kPendingIdx,
+ kRunningIdx,
+ kError,
+ kPipelining,
+ kSocket,
+ kKeepAliveTimeoutValue,
+ kMaxHeadersSize,
+ kKeepAliveMaxTimeout,
+ kKeepAliveTimeoutThreshold,
+ kHeadersTimeout,
+ kBodyTimeout,
+ kStrictContentLength,
+ kConnector,
+ kMaxRedirections,
+ kMaxRequests,
+ kCounter,
+ kClose,
+ kDestroy,
+ kDispatch,
+ kInterceptors,
+ kLocalAddress,
+ kMaxResponseSize,
+ kHTTPConnVersion,
+ // HTTP2
+ kHost,
+ kHTTP2Session,
+ kHTTP2SessionState,
+ kHTTP2BuildRequest,
+ kHTTP2CopyHeaders,
+ kHTTP1BuildRequest
+ } = require_symbols();
+ var http2;
+ try {
+ http2 = require("node:http2");
+ } catch {
+ http2 = { constants: {} };
+ }
+ var {
+ constants: {
+ HTTP2_HEADER_AUTHORITY,
+ HTTP2_HEADER_METHOD,
+ HTTP2_HEADER_PATH,
+ HTTP2_HEADER_SCHEME,
+ HTTP2_HEADER_CONTENT_LENGTH,
+ HTTP2_HEADER_EXPECT,
+ HTTP2_HEADER_STATUS
+ }
+ } = http2;
+ var h2ExperimentalWarned = false;
+ var FastBuffer = Buffer[Symbol.species];
+ var kClosedResolve = Symbol("kClosedResolve");
+ var Client = class extends DispatcherBase {
/**
- * Handles Socket connect event.
- */
- onConnectHandler() {
- this.setState(constants_1.SocksClientState.Connected);
- if (this.options.proxy.type === 4) {
- this.sendSocks4InitialHandshake();
+ *
+ * @param {string|URL} url
+ * @param {import('../types/client').Client.Options} options
+ */
+ constructor(url, {
+ interceptors,
+ maxHeaderSize,
+ headersTimeout,
+ socketTimeout,
+ requestTimeout,
+ connectTimeout,
+ bodyTimeout,
+ idleTimeout,
+ keepAlive,
+ keepAliveTimeout,
+ maxKeepAliveTimeout,
+ keepAliveMaxTimeout,
+ keepAliveTimeoutThreshold,
+ socketPath,
+ pipelining,
+ tls,
+ strictContentLength,
+ maxCachedSessions,
+ maxRedirections,
+ connect: connect2,
+ maxRequestsPerClient,
+ localAddress,
+ maxResponseSize,
+ autoSelectFamily,
+ autoSelectFamilyAttemptTimeout,
+ // h2
+ allowH2,
+ maxConcurrentStreams
+ } = {}) {
+ super();
+ if (keepAlive !== void 0) {
+ throw new InvalidArgumentError("unsupported keepAlive, use pipelining=0 instead");
+ }
+ if (socketTimeout !== void 0) {
+ throw new InvalidArgumentError("unsupported socketTimeout, use headersTimeout & bodyTimeout instead");
+ }
+ if (requestTimeout !== void 0) {
+ throw new InvalidArgumentError("unsupported requestTimeout, use headersTimeout & bodyTimeout instead");
+ }
+ if (idleTimeout !== void 0) {
+ throw new InvalidArgumentError("unsupported idleTimeout, use keepAliveTimeout instead");
+ }
+ if (maxKeepAliveTimeout !== void 0) {
+ throw new InvalidArgumentError("unsupported maxKeepAliveTimeout, use keepAliveMaxTimeout instead");
+ }
+ if (maxHeaderSize != null && !Number.isFinite(maxHeaderSize)) {
+ throw new InvalidArgumentError("invalid maxHeaderSize");
+ }
+ if (socketPath != null && typeof socketPath !== "string") {
+ throw new InvalidArgumentError("invalid socketPath");
+ }
+ if (connectTimeout != null && (!Number.isFinite(connectTimeout) || connectTimeout < 0)) {
+ throw new InvalidArgumentError("invalid connectTimeout");
+ }
+ if (keepAliveTimeout != null && (!Number.isFinite(keepAliveTimeout) || keepAliveTimeout <= 0)) {
+ throw new InvalidArgumentError("invalid keepAliveTimeout");
+ }
+ if (keepAliveMaxTimeout != null && (!Number.isFinite(keepAliveMaxTimeout) || keepAliveMaxTimeout <= 0)) {
+ throw new InvalidArgumentError("invalid keepAliveMaxTimeout");
+ }
+ if (keepAliveTimeoutThreshold != null && !Number.isFinite(keepAliveTimeoutThreshold)) {
+ throw new InvalidArgumentError("invalid keepAliveTimeoutThreshold");
+ }
+ if (headersTimeout != null && (!Number.isInteger(headersTimeout) || headersTimeout < 0)) {
+ throw new InvalidArgumentError("headersTimeout must be a positive integer or zero");
+ }
+ if (bodyTimeout != null && (!Number.isInteger(bodyTimeout) || bodyTimeout < 0)) {
+ throw new InvalidArgumentError("bodyTimeout must be a positive integer or zero");
+ }
+ if (connect2 != null && typeof connect2 !== "function" && typeof connect2 !== "object") {
+ throw new InvalidArgumentError("connect must be a function or an object");
+ }
+ if (maxRedirections != null && (!Number.isInteger(maxRedirections) || maxRedirections < 0)) {
+ throw new InvalidArgumentError("maxRedirections must be a positive number");
+ }
+ if (maxRequestsPerClient != null && (!Number.isInteger(maxRequestsPerClient) || maxRequestsPerClient < 0)) {
+ throw new InvalidArgumentError("maxRequestsPerClient must be a positive number");
+ }
+ if (localAddress != null && (typeof localAddress !== "string" || net.isIP(localAddress) === 0)) {
+ throw new InvalidArgumentError("localAddress must be valid string IP address");
+ }
+ if (maxResponseSize != null && (!Number.isInteger(maxResponseSize) || maxResponseSize < -1)) {
+ throw new InvalidArgumentError("maxResponseSize must be a positive number");
+ }
+ if (autoSelectFamilyAttemptTimeout != null && (!Number.isInteger(autoSelectFamilyAttemptTimeout) || autoSelectFamilyAttemptTimeout < -1)) {
+ throw new InvalidArgumentError("autoSelectFamilyAttemptTimeout must be a positive number");
+ }
+ if (allowH2 != null && typeof allowH2 !== "boolean") {
+ throw new InvalidArgumentError("allowH2 must be a valid boolean value");
+ }
+ if (maxConcurrentStreams != null && (typeof maxConcurrentStreams !== "number" || maxConcurrentStreams < 1)) {
+ throw new InvalidArgumentError("maxConcurrentStreams must be a positive integer, greater than 0");
+ }
+ if (typeof connect2 !== "function") {
+ connect2 = buildConnector({
+ ...tls,
+ maxCachedSessions,
+ allowH2,
+ socketPath,
+ timeout: connectTimeout,
+ ...util.nodeHasAutoSelectFamily && autoSelectFamily ? { autoSelectFamily, autoSelectFamilyAttemptTimeout } : void 0,
+ ...connect2
+ });
+ }
+ this[kInterceptors] = interceptors?.Client && Array.isArray(interceptors.Client) ? interceptors.Client : [createRedirectInterceptor({ maxRedirections })];
+ this[kUrl] = util.parseOrigin(url);
+ this[kConnector] = connect2;
+ this[kSocket] = null;
+ this[kPipelining] = pipelining != null ? pipelining : 1;
+ this[kMaxHeadersSize] = maxHeaderSize || http.maxHeaderSize;
+ this[kKeepAliveDefaultTimeout] = keepAliveTimeout == null ? 4e3 : keepAliveTimeout;
+ this[kKeepAliveMaxTimeout] = keepAliveMaxTimeout == null ? 6e5 : keepAliveMaxTimeout;
+ this[kKeepAliveTimeoutThreshold] = keepAliveTimeoutThreshold == null ? 1e3 : keepAliveTimeoutThreshold;
+ this[kKeepAliveTimeoutValue] = this[kKeepAliveDefaultTimeout];
+ this[kServerName] = null;
+ this[kLocalAddress] = localAddress != null ? localAddress : null;
+ this[kResuming] = 0;
+ this[kNeedDrain] = 0;
+ this[kHostHeader] = `host: ${this[kUrl].hostname}${this[kUrl].port ? `:${this[kUrl].port}` : ""}\r
+`;
+ this[kBodyTimeout] = bodyTimeout != null ? bodyTimeout : 3e5;
+ this[kHeadersTimeout] = headersTimeout != null ? headersTimeout : 3e5;
+ this[kStrictContentLength] = strictContentLength == null ? true : strictContentLength;
+ this[kMaxRedirections] = maxRedirections;
+ this[kMaxRequests] = maxRequestsPerClient;
+ this[kClosedResolve] = null;
+ this[kMaxResponseSize] = maxResponseSize > -1 ? maxResponseSize : -1;
+ this[kHTTPConnVersion] = "h1";
+ this[kHTTP2Session] = null;
+ this[kHTTP2SessionState] = !allowH2 ? null : {
+ // streams: null, // Fixed queue of streams - For future support of `push`
+ openStreams: 0,
+ // Keep track of them to decide whether or not unref the session
+ maxConcurrentStreams: maxConcurrentStreams != null ? maxConcurrentStreams : 100
+ // Max peerConcurrentStreams for a Node h2 server
+ };
+ this[kHost] = `${this[kUrl].hostname}${this[kUrl].port ? `:${this[kUrl].port}` : ""}`;
+ this[kQueue] = [];
+ this[kRunningIdx] = 0;
+ this[kPendingIdx] = 0;
+ }
+ get pipelining() {
+ return this[kPipelining];
+ }
+ set pipelining(value) {
+ this[kPipelining] = value;
+ resume(this, true);
+ }
+ get [kPending]() {
+ return this[kQueue].length - this[kPendingIdx];
+ }
+ get [kRunning]() {
+ return this[kPendingIdx] - this[kRunningIdx];
+ }
+ get [kSize]() {
+ return this[kQueue].length - this[kRunningIdx];
+ }
+ get [kConnected]() {
+ return !!this[kSocket] && !this[kConnecting] && !this[kSocket].destroyed;
+ }
+ get [kBusy]() {
+ const socket = this[kSocket];
+ return socket && (socket[kReset] || socket[kWriting] || socket[kBlocking]) || this[kSize] >= (this[kPipelining] || 1) || this[kPending] > 0;
+ }
+ /* istanbul ignore: only used for test */
+ [kConnect](cb) {
+ connect(this);
+ this.once("connect", cb);
+ }
+ [kDispatch](opts, handler) {
+ const origin = opts.origin || this[kUrl].origin;
+ const request = this[kHTTPConnVersion] === "h2" ? Request[kHTTP2BuildRequest](origin, opts, handler) : Request[kHTTP1BuildRequest](origin, opts, handler);
+ this[kQueue].push(request);
+ if (this[kResuming]) {
+ } else if (util.bodyLength(request.body) == null && util.isIterable(request.body)) {
+ this[kResuming] = 1;
+ process.nextTick(resume, this);
} else {
- this.sendSocks5InitialHandshake();
+ resume(this, true);
+ }
+ if (this[kResuming] && this[kNeedDrain] !== 2 && this[kBusy]) {
+ this[kNeedDrain] = 2;
}
- this.setState(constants_1.SocksClientState.SentInitialHandshake);
+ return this[kNeedDrain] < 2;
}
- /**
- * Handles Socket data event.
- * @param data
- */
- onDataReceivedHandler(data) {
- this.receiveBuffer.append(data);
- this.processData();
+ async [kClose]() {
+ return new Promise((resolve) => {
+ if (this[kSize]) {
+ this[kClosedResolve] = resolve;
+ } else {
+ resolve(null);
+ }
+ });
}
- /**
- * Handles processing of the data we have received.
- */
- processData() {
- while (this.state !== constants_1.SocksClientState.Established && this.state !== constants_1.SocksClientState.Error && this.receiveBuffer.length >= this.nextRequiredPacketBufferSize) {
- if (this.state === constants_1.SocksClientState.SentInitialHandshake) {
- if (this.options.proxy.type === 4) {
- this.handleSocks4FinalHandshakeResponse();
- } else {
- this.handleInitialSocks5HandshakeResponse();
+ async [kDestroy](err) {
+ return new Promise((resolve) => {
+ const requests = this[kQueue].splice(this[kPendingIdx]);
+ for (let i = 0; i < requests.length; i++) {
+ const request = requests[i];
+ errorRequest(this, request, err);
+ }
+ const callback = () => {
+ if (this[kClosedResolve]) {
+ this[kClosedResolve]();
+ this[kClosedResolve] = null;
}
- } else if (this.state === constants_1.SocksClientState.SentAuthentication) {
- this.handleInitialSocks5AuthenticationHandshakeResponse();
- } else if (this.state === constants_1.SocksClientState.SentFinalHandshake) {
- this.handleSocks5FinalHandshakeResponse();
- } else if (this.state === constants_1.SocksClientState.BoundWaitingForConnection) {
- if (this.options.proxy.type === 4) {
- this.handleSocks4IncomingConnectionResponse();
- } else {
- this.handleSocks5IncomingConnectionResponse();
+ resolve();
+ };
+ if (this[kHTTP2Session] != null) {
+ util.destroy(this[kHTTP2Session], err);
+ this[kHTTP2Session] = null;
+ this[kHTTP2SessionState] = null;
+ }
+ if (this[kSocket]) {
+ util.destroy(this[kSocket].on("close", callback), err);
+ } else {
+ queueMicrotask(callback);
+ }
+ resume(this);
+ });
+ }
+ };
+ function onHttp2SessionError(err) {
+ assert3(err.code !== "ERR_TLS_CERT_ALTNAME_INVALID");
+ this[kSocket][kError] = err;
+ onError(this[kClient], err);
+ }
+ function onHttp2FrameError(type, code, id) {
+ const err = new InformationalError(`HTTP/2: "frameError" received - type ${type}, code ${code}`);
+ if (id === 0) {
+ this[kSocket][kError] = err;
+ onError(this[kClient], err);
+ }
+ }
+ function onHttp2SessionEnd() {
+ util.destroy(this, new SocketError("other side closed"));
+ util.destroy(this[kSocket], new SocketError("other side closed"));
+ }
+ function onHTTP2GoAway(code) {
+ const client = this[kClient];
+ const err = new InformationalError(`HTTP/2: "GOAWAY" frame received with code ${code}`);
+ client[kSocket] = null;
+ client[kHTTP2Session] = null;
+ if (client.destroyed) {
+ assert3(this[kPending] === 0);
+ const requests = client[kQueue].splice(client[kRunningIdx]);
+ for (let i = 0; i < requests.length; i++) {
+ const request = requests[i];
+ errorRequest(this, request, err);
+ }
+ } else if (client[kRunning] > 0) {
+ const request = client[kQueue][client[kRunningIdx]];
+ client[kQueue][client[kRunningIdx]++] = null;
+ errorRequest(client, request, err);
+ }
+ client[kPendingIdx] = client[kRunningIdx];
+ assert3(client[kRunning] === 0);
+ client.emit(
+ "disconnect",
+ client[kUrl],
+ [client],
+ err
+ );
+ resume(client);
+ }
+ var constants = require_constants4();
+ var createRedirectInterceptor = require_redirectInterceptor();
+ var EMPTY_BUF = Buffer.alloc(0);
+ async function lazyllhttp() {
+ const llhttpWasmData = process.env.JEST_WORKER_ID ? require_llhttp_wasm() : void 0;
+ let mod;
+ try {
+ mod = await WebAssembly.compile(require_llhttp_simd_wasm());
+ } catch (e) {
+ mod = await WebAssembly.compile(llhttpWasmData || require_llhttp_wasm());
+ }
+ return await WebAssembly.instantiate(mod, {
+ env: {
+ /* eslint-disable camelcase */
+ wasm_on_url: (p, at, len) => {
+ return 0;
+ },
+ wasm_on_status: (p, at, len) => {
+ assert3.strictEqual(currentParser.ptr, p);
+ const start = at - currentBufferPtr + currentBufferRef.byteOffset;
+ return currentParser.onStatus(new FastBuffer(currentBufferRef.buffer, start, len)) || 0;
+ },
+ wasm_on_message_begin: (p) => {
+ assert3.strictEqual(currentParser.ptr, p);
+ return currentParser.onMessageBegin() || 0;
+ },
+ wasm_on_header_field: (p, at, len) => {
+ assert3.strictEqual(currentParser.ptr, p);
+ const start = at - currentBufferPtr + currentBufferRef.byteOffset;
+ return currentParser.onHeaderField(new FastBuffer(currentBufferRef.buffer, start, len)) || 0;
+ },
+ wasm_on_header_value: (p, at, len) => {
+ assert3.strictEqual(currentParser.ptr, p);
+ const start = at - currentBufferPtr + currentBufferRef.byteOffset;
+ return currentParser.onHeaderValue(new FastBuffer(currentBufferRef.buffer, start, len)) || 0;
+ },
+ wasm_on_headers_complete: (p, statusCode, upgrade, shouldKeepAlive) => {
+ assert3.strictEqual(currentParser.ptr, p);
+ return currentParser.onHeadersComplete(statusCode, Boolean(upgrade), Boolean(shouldKeepAlive)) || 0;
+ },
+ wasm_on_body: (p, at, len) => {
+ assert3.strictEqual(currentParser.ptr, p);
+ const start = at - currentBufferPtr + currentBufferRef.byteOffset;
+ return currentParser.onBody(new FastBuffer(currentBufferRef.buffer, start, len)) || 0;
+ },
+ wasm_on_message_complete: (p) => {
+ assert3.strictEqual(currentParser.ptr, p);
+ return currentParser.onMessageComplete() || 0;
+ }
+ /* eslint-enable camelcase */
+ }
+ });
+ }
+ var llhttpInstance = null;
+ var llhttpPromise = lazyllhttp();
+ llhttpPromise.catch();
+ var currentParser = null;
+ var currentBufferRef = null;
+ var currentBufferSize = 0;
+ var currentBufferPtr = null;
+ var TIMEOUT_HEADERS = 1;
+ var TIMEOUT_BODY = 2;
+ var TIMEOUT_IDLE = 3;
+ var Parser = class {
+ constructor(client, socket, { exports: exports2 }) {
+ assert3(Number.isFinite(client[kMaxHeadersSize]) && client[kMaxHeadersSize] > 0);
+ this.llhttp = exports2;
+ this.ptr = this.llhttp.llhttp_alloc(constants.TYPE.RESPONSE);
+ this.client = client;
+ this.socket = socket;
+ this.timeout = null;
+ this.timeoutValue = null;
+ this.timeoutType = null;
+ this.statusCode = null;
+ this.statusText = "";
+ this.upgrade = false;
+ this.headers = [];
+ this.headersSize = 0;
+ this.headersMaxSize = client[kMaxHeadersSize];
+ this.shouldKeepAlive = false;
+ this.paused = false;
+ this.resume = this.resume.bind(this);
+ this.bytesRead = 0;
+ this.keepAlive = "";
+ this.contentLength = "";
+ this.connection = "";
+ this.maxResponseSize = client[kMaxResponseSize];
+ }
+ setTimeout(value, type) {
+ this.timeoutType = type;
+ if (value !== this.timeoutValue) {
+ timers.clearTimeout(this.timeout);
+ if (value) {
+ this.timeout = timers.setTimeout(onParserTimeout, value, this);
+ if (this.timeout.unref) {
+ this.timeout.unref();
}
} else {
- this.closeSocket(constants_1.ERRORS.InternalError);
+ this.timeout = null;
+ }
+ this.timeoutValue = value;
+ } else if (this.timeout) {
+ if (this.timeout.refresh) {
+ this.timeout.refresh();
+ }
+ }
+ }
+ resume() {
+ if (this.socket.destroyed || !this.paused) {
+ return;
+ }
+ assert3(this.ptr != null);
+ assert3(currentParser == null);
+ this.llhttp.llhttp_resume(this.ptr);
+ assert3(this.timeoutType === TIMEOUT_BODY);
+ if (this.timeout) {
+ if (this.timeout.refresh) {
+ this.timeout.refresh();
+ }
+ }
+ this.paused = false;
+ this.execute(this.socket.read() || EMPTY_BUF);
+ this.readMore();
+ }
+ readMore() {
+ while (!this.paused && this.ptr) {
+ const chunk = this.socket.read();
+ if (chunk === null) {
break;
}
+ this.execute(chunk);
}
}
- /**
- * Handles Socket close event.
- * @param had_error
- */
- onCloseHandler() {
- this.closeSocket(constants_1.ERRORS.SocketClosed);
+ execute(data) {
+ assert3(this.ptr != null);
+ assert3(currentParser == null);
+ assert3(!this.paused);
+ const { socket, llhttp } = this;
+ if (data.length > currentBufferSize) {
+ if (currentBufferPtr) {
+ llhttp.free(currentBufferPtr);
+ }
+ currentBufferSize = Math.ceil(data.length / 4096) * 4096;
+ currentBufferPtr = llhttp.malloc(currentBufferSize);
+ }
+ new Uint8Array(llhttp.memory.buffer, currentBufferPtr, currentBufferSize).set(data);
+ try {
+ let ret;
+ try {
+ currentBufferRef = data;
+ currentParser = this;
+ ret = llhttp.llhttp_execute(this.ptr, currentBufferPtr, data.length);
+ } catch (err) {
+ throw err;
+ } finally {
+ currentParser = null;
+ currentBufferRef = null;
+ }
+ const offset = llhttp.llhttp_get_error_pos(this.ptr) - currentBufferPtr;
+ if (ret === constants.ERROR.PAUSED_UPGRADE) {
+ this.onUpgrade(data.slice(offset));
+ } else if (ret === constants.ERROR.PAUSED) {
+ this.paused = true;
+ socket.unshift(data.slice(offset));
+ } else if (ret !== constants.ERROR.OK) {
+ const ptr = llhttp.llhttp_get_error_reason(this.ptr);
+ let message = "";
+ if (ptr) {
+ const len = new Uint8Array(llhttp.memory.buffer, ptr).indexOf(0);
+ message = "Response does not match the HTTP/1.1 protocol (" + Buffer.from(llhttp.memory.buffer, ptr, len).toString() + ")";
+ }
+ throw new HTTPParserError(message, constants.ERROR[ret], data.slice(offset));
+ }
+ } catch (err) {
+ util.destroy(socket, err);
+ }
}
- /**
- * Handles Socket error event.
- * @param err
- */
- onErrorHandler(err) {
- this.closeSocket(err.message);
+ destroy() {
+ assert3(this.ptr != null);
+ assert3(currentParser == null);
+ this.llhttp.llhttp_free(this.ptr);
+ this.ptr = null;
+ timers.clearTimeout(this.timeout);
+ this.timeout = null;
+ this.timeoutValue = null;
+ this.timeoutType = null;
+ this.paused = false;
}
- /**
- * Removes internal event listeners on the underlying Socket.
- */
- removeInternalSocketHandlers() {
- this.socket.pause();
- this.socket.removeListener("data", this.onDataReceived);
- this.socket.removeListener("close", this.onClose);
- this.socket.removeListener("error", this.onError);
- this.socket.removeListener("connect", this.onConnect);
+ onStatus(buf) {
+ this.statusText = buf.toString();
}
- /**
- * Closes and destroys the underlying Socket. Emits an error event.
- * @param err { String } An error string to include in error event.
- */
- closeSocket(err) {
- if (this.state !== constants_1.SocksClientState.Error) {
- this.setState(constants_1.SocksClientState.Error);
- this.socket.destroy();
- this.removeInternalSocketHandlers();
- this.emit("error", new util_1.SocksClientError(err, this.options));
+ onMessageBegin() {
+ const { socket, client } = this;
+ if (socket.destroyed) {
+ return -1;
}
- }
- /**
- * Sends initial Socks v4 handshake request.
- */
- sendSocks4InitialHandshake() {
- const userId = this.options.proxy.userId || "";
- const buff = new smart_buffer_1.SmartBuffer();
- buff.writeUInt8(4);
- buff.writeUInt8(constants_1.SocksCommand[this.options.command]);
- buff.writeUInt16BE(this.options.destination.port);
- if (net.isIPv4(this.options.destination.host)) {
- buff.writeBuffer(ip.toBuffer(this.options.destination.host));
- buff.writeStringNT(userId);
- } else {
- buff.writeUInt8(0);
- buff.writeUInt8(0);
- buff.writeUInt8(0);
- buff.writeUInt8(1);
- buff.writeStringNT(userId);
- buff.writeStringNT(this.options.destination.host);
+ const request = client[kQueue][client[kRunningIdx]];
+ if (!request) {
+ return -1;
}
- this.nextRequiredPacketBufferSize = constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks4Response;
- this.socket.write(buff.toBuffer());
+ request.onResponseStarted();
}
- /**
- * Handles Socks v4 handshake response.
- * @param data
- */
- handleSocks4FinalHandshakeResponse() {
- const data = this.receiveBuffer.get(8);
- if (data[1] !== constants_1.Socks4Response.Granted) {
- this.closeSocket(`${constants_1.ERRORS.Socks4ProxyRejectedConnection} - (${constants_1.Socks4Response[data[1]]})`);
+ onHeaderField(buf) {
+ const len = this.headers.length;
+ if ((len & 1) === 0) {
+ this.headers.push(buf);
} else {
- if (constants_1.SocksCommand[this.options.command] === constants_1.SocksCommand.bind) {
- const buff = smart_buffer_1.SmartBuffer.fromBuffer(data);
- buff.readOffset = 2;
- const remoteHost = {
- port: buff.readUInt16BE(),
- host: ip.fromLong(buff.readUInt32BE())
- };
- if (remoteHost.host === "0.0.0.0") {
- remoteHost.host = this.options.proxy.ipaddress;
- }
- this.setState(constants_1.SocksClientState.BoundWaitingForConnection);
- this.emit("bound", { remoteHost, socket: this.socket });
- } else {
- this.setState(constants_1.SocksClientState.Established);
- this.removeInternalSocketHandlers();
- this.emit("established", { socket: this.socket });
- }
+ this.headers[len - 1] = Buffer.concat([this.headers[len - 1], buf]);
}
+ this.trackHeader(buf.length);
}
- /**
- * Handles Socks v4 incoming connection request (BIND)
- * @param data
- */
- handleSocks4IncomingConnectionResponse() {
- const data = this.receiveBuffer.get(8);
- if (data[1] !== constants_1.Socks4Response.Granted) {
- this.closeSocket(`${constants_1.ERRORS.Socks4ProxyRejectedIncomingBoundConnection} - (${constants_1.Socks4Response[data[1]]})`);
+ onHeaderValue(buf) {
+ let len = this.headers.length;
+ if ((len & 1) === 1) {
+ this.headers.push(buf);
+ len += 1;
} else {
- const buff = smart_buffer_1.SmartBuffer.fromBuffer(data);
- buff.readOffset = 2;
- const remoteHost = {
- port: buff.readUInt16BE(),
- host: ip.fromLong(buff.readUInt32BE())
- };
- this.setState(constants_1.SocksClientState.Established);
- this.removeInternalSocketHandlers();
- this.emit("established", { remoteHost, socket: this.socket });
+ this.headers[len - 1] = Buffer.concat([this.headers[len - 1], buf]);
+ }
+ const key = this.headers[len - 2];
+ if (key.length === 10) {
+ const headerName = util.bufferToLowerCasedHeaderName(key);
+ if (headerName === "keep-alive") {
+ this.keepAlive += buf.toString();
+ } else if (headerName === "connection") {
+ this.connection += buf.toString();
+ }
+ } else if (key.length === 14 && util.bufferToLowerCasedHeaderName(key) === "content-length") {
+ this.contentLength += buf.toString();
+ }
+ this.trackHeader(buf.length);
+ }
+ trackHeader(len) {
+ this.headersSize += len;
+ if (this.headersSize >= this.headersMaxSize) {
+ util.destroy(this.socket, new HeadersOverflowError());
+ }
+ }
+ onUpgrade(head) {
+ const { upgrade, client, socket, headers, statusCode } = this;
+ assert3(upgrade);
+ const request = client[kQueue][client[kRunningIdx]];
+ assert3(request);
+ assert3(!socket.destroyed);
+ assert3(socket === client[kSocket]);
+ assert3(!this.paused);
+ assert3(request.upgrade || request.method === "CONNECT");
+ this.statusCode = null;
+ this.statusText = "";
+ this.shouldKeepAlive = null;
+ assert3(this.headers.length % 2 === 0);
+ this.headers = [];
+ this.headersSize = 0;
+ socket.unshift(head);
+ socket[kParser].destroy();
+ socket[kParser] = null;
+ socket[kClient] = null;
+ socket[kError] = null;
+ socket.removeListener("error", onSocketError).removeListener("readable", onSocketReadable).removeListener("end", onSocketEnd).removeListener("close", onSocketClose);
+ client[kSocket] = null;
+ client[kQueue][client[kRunningIdx]++] = null;
+ client.emit("disconnect", client[kUrl], [client], new InformationalError("upgrade"));
+ try {
+ request.onUpgrade(statusCode, headers, socket);
+ } catch (err) {
+ util.destroy(socket, err);
}
+ resume(client);
}
- /**
- * Sends initial Socks v5 handshake request.
- */
- sendSocks5InitialHandshake() {
- const buff = new smart_buffer_1.SmartBuffer();
- const supportedAuthMethods = [constants_1.Socks5Auth.NoAuth];
- if (this.options.proxy.userId || this.options.proxy.password) {
- supportedAuthMethods.push(constants_1.Socks5Auth.UserPass);
+ onHeadersComplete(statusCode, upgrade, shouldKeepAlive) {
+ const { client, socket, headers, statusText } = this;
+ if (socket.destroyed) {
+ return -1;
}
- if (this.options.proxy.custom_auth_method !== void 0) {
- supportedAuthMethods.push(this.options.proxy.custom_auth_method);
+ const request = client[kQueue][client[kRunningIdx]];
+ if (!request) {
+ return -1;
}
- buff.writeUInt8(5);
- buff.writeUInt8(supportedAuthMethods.length);
- for (const authMethod of supportedAuthMethods) {
- buff.writeUInt8(authMethod);
+ assert3(!this.upgrade);
+ assert3(this.statusCode < 200);
+ if (statusCode === 100) {
+ util.destroy(socket, new SocketError("bad response", util.getSocketInfo(socket)));
+ return -1;
}
- this.nextRequiredPacketBufferSize = constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks5InitialHandshakeResponse;
- this.socket.write(buff.toBuffer());
- this.setState(constants_1.SocksClientState.SentInitialHandshake);
- }
- /**
- * Handles initial Socks v5 handshake response.
- * @param data
- */
- handleInitialSocks5HandshakeResponse() {
- const data = this.receiveBuffer.get(2);
- if (data[0] !== 5) {
- this.closeSocket(constants_1.ERRORS.InvalidSocks5IntiailHandshakeSocksVersion);
- } else if (data[1] === constants_1.SOCKS5_NO_ACCEPTABLE_AUTH) {
- this.closeSocket(constants_1.ERRORS.InvalidSocks5InitialHandshakeNoAcceptedAuthType);
- } else {
- if (data[1] === constants_1.Socks5Auth.NoAuth) {
- this.socks5ChosenAuthType = constants_1.Socks5Auth.NoAuth;
- this.sendSocks5CommandRequest();
- } else if (data[1] === constants_1.Socks5Auth.UserPass) {
- this.socks5ChosenAuthType = constants_1.Socks5Auth.UserPass;
- this.sendSocks5UserPassAuthentication();
- } else if (data[1] === this.options.proxy.custom_auth_method) {
- this.socks5ChosenAuthType = this.options.proxy.custom_auth_method;
- this.sendSocks5CustomAuthentication();
+ if (upgrade && !request.upgrade) {
+ util.destroy(socket, new SocketError("bad upgrade", util.getSocketInfo(socket)));
+ return -1;
+ }
+ assert3.strictEqual(this.timeoutType, TIMEOUT_HEADERS);
+ this.statusCode = statusCode;
+ this.shouldKeepAlive = shouldKeepAlive || // Override llhttp value which does not allow keepAlive for HEAD.
+ request.method === "HEAD" && !socket[kReset] && this.connection.toLowerCase() === "keep-alive";
+ if (this.statusCode >= 200) {
+ const bodyTimeout = request.bodyTimeout != null ? request.bodyTimeout : client[kBodyTimeout];
+ this.setTimeout(bodyTimeout, TIMEOUT_BODY);
+ } else if (this.timeout) {
+ if (this.timeout.refresh) {
+ this.timeout.refresh();
+ }
+ }
+ if (request.method === "CONNECT") {
+ assert3(client[kRunning] === 1);
+ this.upgrade = true;
+ return 2;
+ }
+ if (upgrade) {
+ assert3(client[kRunning] === 1);
+ this.upgrade = true;
+ return 2;
+ }
+ assert3(this.headers.length % 2 === 0);
+ this.headers = [];
+ this.headersSize = 0;
+ if (this.shouldKeepAlive && client[kPipelining]) {
+ const keepAliveTimeout = this.keepAlive ? util.parseKeepAliveTimeout(this.keepAlive) : null;
+ if (keepAliveTimeout != null) {
+ const timeout = Math.min(
+ keepAliveTimeout - client[kKeepAliveTimeoutThreshold],
+ client[kKeepAliveMaxTimeout]
+ );
+ if (timeout <= 0) {
+ socket[kReset] = true;
+ } else {
+ client[kKeepAliveTimeoutValue] = timeout;
+ }
} else {
- this.closeSocket(constants_1.ERRORS.InvalidSocks5InitialHandshakeUnknownAuthType);
+ client[kKeepAliveTimeoutValue] = client[kKeepAliveDefaultTimeout];
}
+ } else {
+ socket[kReset] = true;
}
+ const pause = request.onHeaders(statusCode, headers, this.resume, statusText) === false;
+ if (request.aborted) {
+ return -1;
+ }
+ if (request.method === "HEAD") {
+ return 1;
+ }
+ if (statusCode < 200) {
+ return 1;
+ }
+ if (socket[kBlocking]) {
+ socket[kBlocking] = false;
+ resume(client);
+ }
+ return pause ? constants.ERROR.PAUSED : 0;
}
- /**
- * Sends Socks v5 user & password auth handshake.
- *
- * Note: No auth and user/pass are currently supported.
- */
- sendSocks5UserPassAuthentication() {
- const userId = this.options.proxy.userId || "";
- const password = this.options.proxy.password || "";
- const buff = new smart_buffer_1.SmartBuffer();
- buff.writeUInt8(1);
- buff.writeUInt8(Buffer.byteLength(userId));
- buff.writeString(userId);
- buff.writeUInt8(Buffer.byteLength(password));
- buff.writeString(password);
- this.nextRequiredPacketBufferSize = constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks5UserPassAuthenticationResponse;
- this.socket.write(buff.toBuffer());
- this.setState(constants_1.SocksClientState.SentAuthentication);
- }
- sendSocks5CustomAuthentication() {
- return __awaiter2(this, void 0, void 0, function* () {
- this.nextRequiredPacketBufferSize = this.options.proxy.custom_auth_response_size;
- this.socket.write(yield this.options.proxy.custom_auth_request_handler());
- this.setState(constants_1.SocksClientState.SentAuthentication);
- });
+ onBody(buf) {
+ const { client, socket, statusCode, maxResponseSize } = this;
+ if (socket.destroyed) {
+ return -1;
+ }
+ const request = client[kQueue][client[kRunningIdx]];
+ assert3(request);
+ assert3.strictEqual(this.timeoutType, TIMEOUT_BODY);
+ if (this.timeout) {
+ if (this.timeout.refresh) {
+ this.timeout.refresh();
+ }
+ }
+ assert3(statusCode >= 200);
+ if (maxResponseSize > -1 && this.bytesRead + buf.length > maxResponseSize) {
+ util.destroy(socket, new ResponseExceededMaxSizeError());
+ return -1;
+ }
+ this.bytesRead += buf.length;
+ if (request.onData(buf) === false) {
+ return constants.ERROR.PAUSED;
+ }
}
- handleSocks5CustomAuthHandshakeResponse(data) {
- return __awaiter2(this, void 0, void 0, function* () {
- return yield this.options.proxy.custom_auth_response_handler(data);
- });
+ onMessageComplete() {
+ const { client, socket, statusCode, upgrade, headers, contentLength, bytesRead, shouldKeepAlive } = this;
+ if (socket.destroyed && (!statusCode || shouldKeepAlive)) {
+ return -1;
+ }
+ if (upgrade) {
+ return;
+ }
+ const request = client[kQueue][client[kRunningIdx]];
+ assert3(request);
+ assert3(statusCode >= 100);
+ this.statusCode = null;
+ this.statusText = "";
+ this.bytesRead = 0;
+ this.contentLength = "";
+ this.keepAlive = "";
+ this.connection = "";
+ assert3(this.headers.length % 2 === 0);
+ this.headers = [];
+ this.headersSize = 0;
+ if (statusCode < 200) {
+ return;
+ }
+ if (request.method !== "HEAD" && contentLength && bytesRead !== parseInt(contentLength, 10)) {
+ util.destroy(socket, new ResponseContentLengthMismatchError());
+ return -1;
+ }
+ request.onComplete(headers);
+ client[kQueue][client[kRunningIdx]++] = null;
+ if (socket[kWriting]) {
+ assert3.strictEqual(client[kRunning], 0);
+ util.destroy(socket, new InformationalError("reset"));
+ return constants.ERROR.PAUSED;
+ } else if (!shouldKeepAlive) {
+ util.destroy(socket, new InformationalError("reset"));
+ return constants.ERROR.PAUSED;
+ } else if (socket[kReset] && client[kRunning] === 0) {
+ util.destroy(socket, new InformationalError("reset"));
+ return constants.ERROR.PAUSED;
+ } else if (client[kPipelining] === 1) {
+ setImmediate(resume, client);
+ } else {
+ resume(client);
+ }
}
- handleSocks5AuthenticationNoAuthHandshakeResponse(data) {
- return __awaiter2(this, void 0, void 0, function* () {
- return data[1] === 0;
- });
+ };
+ function onParserTimeout(parser) {
+ const { socket, timeoutType, client } = parser;
+ if (timeoutType === TIMEOUT_HEADERS) {
+ if (!socket[kWriting] || socket.writableNeedDrain || client[kRunning] > 1) {
+ assert3(!parser.paused, "cannot be paused while waiting for headers");
+ util.destroy(socket, new HeadersTimeoutError());
+ }
+ } else if (timeoutType === TIMEOUT_BODY) {
+ if (!parser.paused) {
+ util.destroy(socket, new BodyTimeoutError());
+ }
+ } else if (timeoutType === TIMEOUT_IDLE) {
+ assert3(client[kRunning] === 0 && client[kKeepAliveTimeoutValue]);
+ util.destroy(socket, new InformationalError("socket idle timeout"));
}
- handleSocks5AuthenticationUserPassHandshakeResponse(data) {
- return __awaiter2(this, void 0, void 0, function* () {
- return data[1] === 0;
- });
+ }
+ function onSocketReadable() {
+ const { [kParser]: parser } = this;
+ if (parser) {
+ parser.readMore();
}
- /**
- * Handles Socks v5 auth handshake response.
- * @param data
- */
- handleInitialSocks5AuthenticationHandshakeResponse() {
- return __awaiter2(this, void 0, void 0, function* () {
- this.setState(constants_1.SocksClientState.ReceivedAuthenticationResponse);
- let authResult = false;
- if (this.socks5ChosenAuthType === constants_1.Socks5Auth.NoAuth) {
- authResult = yield this.handleSocks5AuthenticationNoAuthHandshakeResponse(this.receiveBuffer.get(2));
- } else if (this.socks5ChosenAuthType === constants_1.Socks5Auth.UserPass) {
- authResult = yield this.handleSocks5AuthenticationUserPassHandshakeResponse(this.receiveBuffer.get(2));
- } else if (this.socks5ChosenAuthType === this.options.proxy.custom_auth_method) {
- authResult = yield this.handleSocks5CustomAuthHandshakeResponse(this.receiveBuffer.get(this.options.proxy.custom_auth_response_size));
- }
- if (!authResult) {
- this.closeSocket(constants_1.ERRORS.Socks5AuthenticationFailed);
- } else {
- this.sendSocks5CommandRequest();
- }
- });
+ }
+ function onSocketError(err) {
+ const { [kClient]: client, [kParser]: parser } = this;
+ assert3(err.code !== "ERR_TLS_CERT_ALTNAME_INVALID");
+ if (client[kHTTPConnVersion] !== "h2") {
+ if (err.code === "ECONNRESET" && parser.statusCode && !parser.shouldKeepAlive) {
+ parser.onMessageComplete();
+ return;
+ }
}
- /**
- * Sends Socks v5 final handshake request.
- */
- sendSocks5CommandRequest() {
- const buff = new smart_buffer_1.SmartBuffer();
- buff.writeUInt8(5);
- buff.writeUInt8(constants_1.SocksCommand[this.options.command]);
- buff.writeUInt8(0);
- if (net.isIPv4(this.options.destination.host)) {
- buff.writeUInt8(constants_1.Socks5HostType.IPv4);
- buff.writeBuffer(ip.toBuffer(this.options.destination.host));
- } else if (net.isIPv6(this.options.destination.host)) {
- buff.writeUInt8(constants_1.Socks5HostType.IPv6);
- buff.writeBuffer(ip.toBuffer(this.options.destination.host));
- } else {
- buff.writeUInt8(constants_1.Socks5HostType.Hostname);
- buff.writeUInt8(this.options.destination.host.length);
- buff.writeString(this.options.destination.host);
+ this[kError] = err;
+ onError(this[kClient], err);
+ }
+ function onError(client, err) {
+ if (client[kRunning] === 0 && err.code !== "UND_ERR_INFO" && err.code !== "UND_ERR_SOCKET") {
+ assert3(client[kPendingIdx] === client[kRunningIdx]);
+ const requests = client[kQueue].splice(client[kRunningIdx]);
+ for (let i = 0; i < requests.length; i++) {
+ const request = requests[i];
+ errorRequest(client, request, err);
}
- buff.writeUInt16BE(this.options.destination.port);
- this.nextRequiredPacketBufferSize = constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks5ResponseHeader;
- this.socket.write(buff.toBuffer());
- this.setState(constants_1.SocksClientState.SentFinalHandshake);
+ assert3(client[kSize] === 0);
}
- /**
- * Handles Socks v5 final handshake response.
- * @param data
- */
- handleSocks5FinalHandshakeResponse() {
- const header = this.receiveBuffer.peek(5);
- if (header[0] !== 5 || header[1] !== constants_1.Socks5Response.Granted) {
- this.closeSocket(`${constants_1.ERRORS.InvalidSocks5FinalHandshakeRejected} - ${constants_1.Socks5Response[header[1]]}`);
- } else {
- const addressType = header[3];
- let remoteHost;
- let buff;
- if (addressType === constants_1.Socks5HostType.IPv4) {
- const dataNeeded = constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks5ResponseIPv4;
- if (this.receiveBuffer.length < dataNeeded) {
- this.nextRequiredPacketBufferSize = dataNeeded;
- return;
- }
- buff = smart_buffer_1.SmartBuffer.fromBuffer(this.receiveBuffer.get(dataNeeded).slice(4));
- remoteHost = {
- host: ip.fromLong(buff.readUInt32BE()),
- port: buff.readUInt16BE()
- };
- if (remoteHost.host === "0.0.0.0") {
- remoteHost.host = this.options.proxy.ipaddress;
- }
- } else if (addressType === constants_1.Socks5HostType.Hostname) {
- const hostLength = header[4];
- const dataNeeded = constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks5ResponseHostname(hostLength);
- if (this.receiveBuffer.length < dataNeeded) {
- this.nextRequiredPacketBufferSize = dataNeeded;
- return;
- }
- buff = smart_buffer_1.SmartBuffer.fromBuffer(this.receiveBuffer.get(dataNeeded).slice(5));
- remoteHost = {
- host: buff.readString(hostLength),
- port: buff.readUInt16BE()
- };
- } else if (addressType === constants_1.Socks5HostType.IPv6) {
- const dataNeeded = constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks5ResponseIPv6;
- if (this.receiveBuffer.length < dataNeeded) {
- this.nextRequiredPacketBufferSize = dataNeeded;
- return;
+ }
+ function onSocketEnd() {
+ const { [kParser]: parser, [kClient]: client } = this;
+ if (client[kHTTPConnVersion] !== "h2") {
+ if (parser.statusCode && !parser.shouldKeepAlive) {
+ parser.onMessageComplete();
+ return;
+ }
+ }
+ util.destroy(this, new SocketError("other side closed", util.getSocketInfo(this)));
+ }
+ function onSocketClose() {
+ const { [kClient]: client, [kParser]: parser } = this;
+ if (client[kHTTPConnVersion] === "h1" && parser) {
+ if (!this[kError] && parser.statusCode && !parser.shouldKeepAlive) {
+ parser.onMessageComplete();
+ }
+ this[kParser].destroy();
+ this[kParser] = null;
+ }
+ const err = this[kError] || new SocketError("closed", util.getSocketInfo(this));
+ client[kSocket] = null;
+ if (client.destroyed) {
+ assert3(client[kPending] === 0);
+ const requests = client[kQueue].splice(client[kRunningIdx]);
+ for (let i = 0; i < requests.length; i++) {
+ const request = requests[i];
+ errorRequest(client, request, err);
+ }
+ } else if (client[kRunning] > 0 && err.code !== "UND_ERR_INFO") {
+ const request = client[kQueue][client[kRunningIdx]];
+ client[kQueue][client[kRunningIdx]++] = null;
+ errorRequest(client, request, err);
+ }
+ client[kPendingIdx] = client[kRunningIdx];
+ assert3(client[kRunning] === 0);
+ client.emit("disconnect", client[kUrl], [client], err);
+ resume(client);
+ }
+ async function connect(client) {
+ assert3(!client[kConnecting]);
+ assert3(!client[kSocket]);
+ let { host, hostname, protocol, port } = client[kUrl];
+ if (hostname[0] === "[") {
+ const idx = hostname.indexOf("]");
+ assert3(idx !== -1);
+ const ip = hostname.substring(1, idx);
+ assert3(net.isIP(ip));
+ hostname = ip;
+ }
+ client[kConnecting] = true;
+ if (channels.beforeConnect.hasSubscribers) {
+ channels.beforeConnect.publish({
+ connectParams: {
+ host,
+ hostname,
+ protocol,
+ port,
+ version: client[kHTTPConnVersion],
+ servername: client[kServerName],
+ localAddress: client[kLocalAddress]
+ },
+ connector: client[kConnector]
+ });
+ }
+ try {
+ const socket = await new Promise((resolve, reject) => {
+ client[kConnector]({
+ host,
+ hostname,
+ protocol,
+ port,
+ servername: client[kServerName],
+ localAddress: client[kLocalAddress]
+ }, (err, socket2) => {
+ if (err) {
+ reject(err);
+ } else {
+ resolve(socket2);
}
- buff = smart_buffer_1.SmartBuffer.fromBuffer(this.receiveBuffer.get(dataNeeded).slice(4));
- remoteHost = {
- host: ip.toString(buff.readBuffer(16)),
- port: buff.readUInt16BE()
- };
- }
- this.setState(constants_1.SocksClientState.ReceivedFinalResponse);
- if (constants_1.SocksCommand[this.options.command] === constants_1.SocksCommand.connect) {
- this.setState(constants_1.SocksClientState.Established);
- this.removeInternalSocketHandlers();
- this.emit("established", { remoteHost, socket: this.socket });
- } else if (constants_1.SocksCommand[this.options.command] === constants_1.SocksCommand.bind) {
- this.setState(constants_1.SocksClientState.BoundWaitingForConnection);
- this.nextRequiredPacketBufferSize = constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks5ResponseHeader;
- this.emit("bound", { remoteHost, socket: this.socket });
- } else if (constants_1.SocksCommand[this.options.command] === constants_1.SocksCommand.associate) {
- this.setState(constants_1.SocksClientState.Established);
- this.removeInternalSocketHandlers();
- this.emit("established", {
- remoteHost,
- socket: this.socket
+ });
+ });
+ if (client.destroyed) {
+ util.destroy(socket.on("error", () => {
+ }), new ClientDestroyedError());
+ return;
+ }
+ client[kConnecting] = false;
+ assert3(socket);
+ const isH2 = socket.alpnProtocol === "h2";
+ if (isH2) {
+ if (!h2ExperimentalWarned) {
+ h2ExperimentalWarned = true;
+ process.emitWarning("H2 support is experimental, expect them to change at any time.", {
+ code: "UNDICI-H2"
});
}
+ const session = http2.connect(client[kUrl], {
+ createConnection: () => socket,
+ peerMaxConcurrentStreams: client[kHTTP2SessionState].maxConcurrentStreams
+ });
+ client[kHTTPConnVersion] = "h2";
+ session[kClient] = client;
+ session[kSocket] = socket;
+ session.on("error", onHttp2SessionError);
+ session.on("frameError", onHttp2FrameError);
+ session.on("end", onHttp2SessionEnd);
+ session.on("goaway", onHTTP2GoAway);
+ session.on("close", onSocketClose);
+ session.unref();
+ client[kHTTP2Session] = session;
+ socket[kHTTP2Session] = session;
+ } else {
+ if (!llhttpInstance) {
+ llhttpInstance = await llhttpPromise;
+ llhttpPromise = null;
+ }
+ socket[kNoRef] = false;
+ socket[kWriting] = false;
+ socket[kReset] = false;
+ socket[kBlocking] = false;
+ socket[kParser] = new Parser(client, socket, llhttpInstance);
+ }
+ socket[kCounter] = 0;
+ socket[kMaxRequests] = client[kMaxRequests];
+ socket[kClient] = client;
+ socket[kError] = null;
+ socket.on("error", onSocketError).on("readable", onSocketReadable).on("end", onSocketEnd).on("close", onSocketClose);
+ client[kSocket] = socket;
+ if (channels.connected.hasSubscribers) {
+ channels.connected.publish({
+ connectParams: {
+ host,
+ hostname,
+ protocol,
+ port,
+ version: client[kHTTPConnVersion],
+ servername: client[kServerName],
+ localAddress: client[kLocalAddress]
+ },
+ connector: client[kConnector],
+ socket
+ });
}
- }
- /**
- * Handles Socks v5 incoming connection request (BIND).
- */
- handleSocks5IncomingConnectionResponse() {
- const header = this.receiveBuffer.peek(5);
- if (header[0] !== 5 || header[1] !== constants_1.Socks5Response.Granted) {
- this.closeSocket(`${constants_1.ERRORS.Socks5ProxyRejectedIncomingBoundConnection} - ${constants_1.Socks5Response[header[1]]}`);
+ client.emit("connect", client[kUrl], [client]);
+ } catch (err) {
+ if (client.destroyed) {
+ return;
+ }
+ client[kConnecting] = false;
+ if (channels.connectError.hasSubscribers) {
+ channels.connectError.publish({
+ connectParams: {
+ host,
+ hostname,
+ protocol,
+ port,
+ version: client[kHTTPConnVersion],
+ servername: client[kServerName],
+ localAddress: client[kLocalAddress]
+ },
+ connector: client[kConnector],
+ error: err
+ });
+ }
+ if (err.code === "ERR_TLS_CERT_ALTNAME_INVALID") {
+ assert3(client[kRunning] === 0);
+ while (client[kPending] > 0 && client[kQueue][client[kPendingIdx]].servername === client[kServerName]) {
+ const request = client[kQueue][client[kPendingIdx]++];
+ errorRequest(client, request, err);
+ }
} else {
- const addressType = header[3];
- let remoteHost;
- let buff;
- if (addressType === constants_1.Socks5HostType.IPv4) {
- const dataNeeded = constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks5ResponseIPv4;
- if (this.receiveBuffer.length < dataNeeded) {
- this.nextRequiredPacketBufferSize = dataNeeded;
- return;
- }
- buff = smart_buffer_1.SmartBuffer.fromBuffer(this.receiveBuffer.get(dataNeeded).slice(4));
- remoteHost = {
- host: ip.fromLong(buff.readUInt32BE()),
- port: buff.readUInt16BE()
- };
- if (remoteHost.host === "0.0.0.0") {
- remoteHost.host = this.options.proxy.ipaddress;
+ onError(client, err);
+ }
+ client.emit("connectionError", client[kUrl], [client], err);
+ }
+ resume(client);
+ }
+ function emitDrain(client) {
+ client[kNeedDrain] = 0;
+ client.emit("drain", client[kUrl], [client]);
+ }
+ function resume(client, sync) {
+ if (client[kResuming] === 2) {
+ return;
+ }
+ client[kResuming] = 2;
+ _resume(client, sync);
+ client[kResuming] = 0;
+ if (client[kRunningIdx] > 256) {
+ client[kQueue].splice(0, client[kRunningIdx]);
+ client[kPendingIdx] -= client[kRunningIdx];
+ client[kRunningIdx] = 0;
+ }
+ }
+ function _resume(client, sync) {
+ while (true) {
+ if (client.destroyed) {
+ assert3(client[kPending] === 0);
+ return;
+ }
+ if (client[kClosedResolve] && !client[kSize]) {
+ client[kClosedResolve]();
+ client[kClosedResolve] = null;
+ return;
+ }
+ const socket = client[kSocket];
+ if (socket && !socket.destroyed && socket.alpnProtocol !== "h2") {
+ if (client[kSize] === 0) {
+ if (!socket[kNoRef] && socket.unref) {
+ socket.unref();
+ socket[kNoRef] = true;
}
- } else if (addressType === constants_1.Socks5HostType.Hostname) {
- const hostLength = header[4];
- const dataNeeded = constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks5ResponseHostname(hostLength);
- if (this.receiveBuffer.length < dataNeeded) {
- this.nextRequiredPacketBufferSize = dataNeeded;
- return;
+ } else if (socket[kNoRef] && socket.ref) {
+ socket.ref();
+ socket[kNoRef] = false;
+ }
+ if (client[kSize] === 0) {
+ if (socket[kParser].timeoutType !== TIMEOUT_IDLE) {
+ socket[kParser].setTimeout(client[kKeepAliveTimeoutValue], TIMEOUT_IDLE);
}
- buff = smart_buffer_1.SmartBuffer.fromBuffer(this.receiveBuffer.get(dataNeeded).slice(5));
- remoteHost = {
- host: buff.readString(hostLength),
- port: buff.readUInt16BE()
- };
- } else if (addressType === constants_1.Socks5HostType.IPv6) {
- const dataNeeded = constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks5ResponseIPv6;
- if (this.receiveBuffer.length < dataNeeded) {
- this.nextRequiredPacketBufferSize = dataNeeded;
- return;
+ } else if (client[kRunning] > 0 && socket[kParser].statusCode < 200) {
+ if (socket[kParser].timeoutType !== TIMEOUT_HEADERS) {
+ const request2 = client[kQueue][client[kRunningIdx]];
+ const headersTimeout = request2.headersTimeout != null ? request2.headersTimeout : client[kHeadersTimeout];
+ socket[kParser].setTimeout(headersTimeout, TIMEOUT_HEADERS);
}
- buff = smart_buffer_1.SmartBuffer.fromBuffer(this.receiveBuffer.get(dataNeeded).slice(4));
- remoteHost = {
- host: ip.toString(buff.readBuffer(16)),
- port: buff.readUInt16BE()
- };
}
- this.setState(constants_1.SocksClientState.Established);
- this.removeInternalSocketHandlers();
- this.emit("established", { remoteHost, socket: this.socket });
+ }
+ if (client[kBusy]) {
+ client[kNeedDrain] = 2;
+ } else if (client[kNeedDrain] === 2) {
+ if (sync) {
+ client[kNeedDrain] = 1;
+ process.nextTick(emitDrain, client);
+ } else {
+ emitDrain(client);
+ }
+ continue;
+ }
+ if (client[kPending] === 0) {
+ return;
+ }
+ if (client[kRunning] >= (client[kPipelining] || 1)) {
+ return;
+ }
+ const request = client[kQueue][client[kPendingIdx]];
+ if (client[kUrl].protocol === "https:" && client[kServerName] !== request.servername) {
+ if (client[kRunning] > 0) {
+ return;
+ }
+ client[kServerName] = request.servername;
+ if (socket && socket.servername !== request.servername) {
+ util.destroy(socket, new InformationalError("servername changed"));
+ return;
+ }
+ }
+ if (client[kConnecting]) {
+ return;
+ }
+ if (!socket && !client[kHTTP2Session]) {
+ connect(client);
+ return;
+ }
+ if (socket.destroyed || socket[kWriting] || socket[kReset] || socket[kBlocking]) {
+ return;
+ }
+ if (client[kRunning] > 0 && !request.idempotent) {
+ return;
+ }
+ if (client[kRunning] > 0 && (request.upgrade || request.method === "CONNECT")) {
+ return;
+ }
+ if (client[kRunning] > 0 && util.bodyLength(request.body) !== 0 && (util.isStream(request.body) || util.isAsyncIterable(request.body))) {
+ return;
+ }
+ if (!request.aborted && write(client, request)) {
+ client[kPendingIdx]++;
+ } else {
+ client[kQueue].splice(client[kPendingIdx], 1);
}
}
- get socksClientOptions() {
- return Object.assign({}, this.options);
+ }
+ function shouldSendContentLength(method) {
+ return method !== "GET" && method !== "HEAD" && method !== "OPTIONS" && method !== "TRACE" && method !== "CONNECT";
+ }
+ function write(client, request) {
+ if (client[kHTTPConnVersion] === "h2") {
+ writeH2(client, client[kHTTP2Session], request);
+ return;
}
- };
- exports.SocksClient = SocksClient;
- }
-});
-
-// .yarn/cache/socks-npm-2.7.1-17f2b53052-43f69dbc9f.zip/node_modules/socks/build/index.js
-var require_build = __commonJS({
- ".yarn/cache/socks-npm-2.7.1-17f2b53052-43f69dbc9f.zip/node_modules/socks/build/index.js"(exports) {
- "use strict";
- var __createBinding2 = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) {
- if (k2 === void 0)
- k2 = k;
- var desc = Object.getOwnPropertyDescriptor(m, k);
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
- desc = { enumerable: true, get: function() {
- return m[k];
- } };
+ const { body, method, path: path10, host, upgrade, headers, blocking, reset } = request;
+ const expectsPayload = method === "PUT" || method === "POST" || method === "PATCH";
+ if (body && typeof body.read === "function") {
+ body.read(0);
}
- Object.defineProperty(o, k2, desc);
- } : function(o, m, k, k2) {
- if (k2 === void 0)
- k2 = k;
- o[k2] = m[k];
- });
- var __exportStar2 = exports && exports.__exportStar || function(m, exports2) {
- for (var p in m)
- if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports2, p))
- __createBinding2(exports2, m, p);
- };
- Object.defineProperty(exports, "__esModule", { value: true });
- __exportStar2(require_socksclient(), exports);
- }
-});
-
-// .yarn/cache/socks-proxy-agent-npm-8.0.2-df165543cf-a842402fc9.zip/node_modules/socks-proxy-agent/dist/index.js
-var require_dist4 = __commonJS({
- ".yarn/cache/socks-proxy-agent-npm-8.0.2-df165543cf-a842402fc9.zip/node_modules/socks-proxy-agent/dist/index.js"(exports) {
- "use strict";
- var __createBinding2 = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) {
- if (k2 === void 0)
- k2 = k;
- var desc = Object.getOwnPropertyDescriptor(m, k);
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
- desc = { enumerable: true, get: function() {
- return m[k];
- } };
+ const bodyLength = util.bodyLength(body);
+ let contentLength = bodyLength;
+ if (contentLength === null) {
+ contentLength = request.contentLength;
}
- Object.defineProperty(o, k2, desc);
- } : function(o, m, k, k2) {
- if (k2 === void 0)
- k2 = k;
- o[k2] = m[k];
- });
- var __setModuleDefault2 = exports && exports.__setModuleDefault || (Object.create ? function(o, v) {
- Object.defineProperty(o, "default", { enumerable: true, value: v });
- } : function(o, v) {
- o["default"] = v;
- });
- var __importStar2 = exports && exports.__importStar || function(mod) {
- if (mod && mod.__esModule)
- return mod;
- var result = {};
- if (mod != null) {
- for (var k in mod)
- if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k))
- __createBinding2(result, mod, k);
+ if (contentLength === 0 && !expectsPayload) {
+ contentLength = null;
}
- __setModuleDefault2(result, mod);
- return result;
- };
- var __importDefault2 = exports && exports.__importDefault || function(mod) {
- return mod && mod.__esModule ? mod : { "default": mod };
- };
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.SocksProxyAgent = void 0;
- var socks_1 = require_build();
- var agent_base_1 = require_dist();
- var debug_1 = __importDefault2(require_src2());
- var dns = __importStar2(require("dns"));
- var net = __importStar2(require("net"));
- var tls = __importStar2(require("tls"));
- var url_1 = require("url");
- var debug2 = (0, debug_1.default)("socks-proxy-agent");
- function parseSocksURL(url) {
- let lookup = false;
- let type = 5;
- const host = url.hostname;
- const port = parseInt(url.port, 10) || 1080;
- switch (url.protocol.replace(":", "")) {
- case "socks4":
- lookup = true;
- type = 4;
- break;
- case "socks4a":
- type = 4;
- break;
- case "socks5":
- lookup = true;
- type = 5;
- break;
- case "socks":
- type = 5;
- break;
- case "socks5h":
- type = 5;
- break;
- default:
- throw new TypeError(`A "socks" protocol must be specified! Got: ${String(url.protocol)}`);
+ if (shouldSendContentLength(method) && contentLength > 0 && request.contentLength !== null && request.contentLength !== contentLength) {
+ if (client[kStrictContentLength]) {
+ errorRequest(client, request, new RequestContentLengthMismatchError());
+ return false;
+ }
+ process.emitWarning(new RequestContentLengthMismatchError());
}
- const proxy = {
- host,
- port,
- type
- };
- if (url.username) {
- Object.defineProperty(proxy, "userId", {
- value: decodeURIComponent(url.username),
- enumerable: false
+ const socket = client[kSocket];
+ try {
+ request.onConnect((err) => {
+ if (request.aborted || request.completed) {
+ return;
+ }
+ errorRequest(client, request, err || new RequestAbortedError());
+ util.destroy(socket, new InformationalError("aborted"));
});
+ } catch (err) {
+ errorRequest(client, request, err);
}
- if (url.password != null) {
- Object.defineProperty(proxy, "password", {
- value: decodeURIComponent(url.password),
- enumerable: false
- });
+ if (request.aborted) {
+ return false;
}
- return { lookup, proxy };
- }
- var SocksProxyAgent = class extends agent_base_1.Agent {
- constructor(uri, opts) {
- super(opts);
- const url = typeof uri === "string" ? new url_1.URL(uri) : uri;
- const { proxy, lookup } = parseSocksURL(url);
- this.shouldLookup = lookup;
- this.proxy = proxy;
- this.timeout = opts?.timeout ?? null;
+ if (method === "HEAD") {
+ socket[kReset] = true;
}
- /**
- * Initiates a SOCKS connection to the specified SOCKS proxy server,
- * which in turn connects to the specified remote host and port.
- */
- async connect(req, opts) {
- const { shouldLookup, proxy, timeout } = this;
- if (!opts.host) {
- throw new Error("No `host` defined!");
- }
- let { host } = opts;
- const { port, lookup: lookupFn = dns.lookup } = opts;
- if (shouldLookup) {
- host = await new Promise((resolve, reject) => {
- lookupFn(host, {}, (err, res) => {
- if (err) {
- reject(err);
- } else {
- resolve(res);
- }
- });
- });
- }
- const socksOpts = {
- proxy,
- destination: {
- host,
- port: typeof port === "number" ? port : parseInt(port, 10)
- },
- command: "connect",
- timeout: timeout ?? void 0
- };
- const cleanup = (tlsSocket) => {
- req.destroy();
- socket.destroy();
- if (tlsSocket)
- tlsSocket.destroy();
- };
- debug2("Creating socks proxy connection: %o", socksOpts);
- const { socket } = await socks_1.SocksClient.createConnection(socksOpts);
- debug2("Successfully created socks proxy connection");
- if (timeout !== null) {
- socket.setTimeout(timeout);
- socket.on("timeout", () => cleanup());
- }
- if (opts.secureEndpoint) {
- debug2("Upgrading socket connection to TLS");
- const servername = opts.servername || opts.host;
- const tlsSocket = tls.connect({
- ...omit(opts, "host", "path", "port"),
- socket,
- servername: net.isIP(servername) ? void 0 : servername
- });
- tlsSocket.once("error", (error) => {
- debug2("Socket TLS error", error.message);
- cleanup(tlsSocket);
- });
- return tlsSocket;
- }
- return socket;
+ if (upgrade || method === "CONNECT") {
+ socket[kReset] = true;
}
- };
- SocksProxyAgent.protocols = [
- "socks",
- "socks4",
- "socks4a",
- "socks5",
- "socks5h"
- ];
- exports.SocksProxyAgent = SocksProxyAgent;
- function omit(obj, ...keys) {
- const ret = {};
- let key;
- for (key in obj) {
- if (!keys.includes(key)) {
- ret[key] = obj[key];
- }
+ if (reset != null) {
+ socket[kReset] = reset;
}
- return ret;
- }
- }
-});
-
-// .yarn/cache/data-uri-to-buffer-npm-6.0.1-327e9c6acb-d8631b4be9.zip/node_modules/data-uri-to-buffer/dist/index.js
-var require_dist5 = __commonJS({
- ".yarn/cache/data-uri-to-buffer-npm-6.0.1-327e9c6acb-d8631b4be9.zip/node_modules/data-uri-to-buffer/dist/index.js"(exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.dataUriToBuffer = void 0;
- function base64ToArrayBuffer(base64) {
- const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
- const bytes = [];
- for (let i = 0; i < base64.length; i += 4) {
- const idx0 = chars.indexOf(base64.charAt(i));
- const idx1 = chars.indexOf(base64.charAt(i + 1));
- const idx2 = base64.charAt(i + 2) === "=" ? 0 : chars.indexOf(base64.charAt(i + 2));
- const idx3 = base64.charAt(i + 3) === "=" ? 0 : chars.indexOf(base64.charAt(i + 3));
- const bin0 = idx0 << 2 | idx1 >> 4;
- const bin1 = (idx1 & 15) << 4 | idx2 >> 2;
- const bin2 = (idx2 & 3) << 6 | idx3;
- bytes.push(bin0);
- if (base64.charAt(i + 2) !== "=")
- bytes.push(bin1);
- if (base64.charAt(i + 3) !== "=")
- bytes.push(bin2);
- }
- const buffer = new ArrayBuffer(bytes.length);
- const view = new Uint8Array(buffer);
- view.set(bytes);
- return buffer;
- }
- function stringToBuffer(str) {
- const buffer = new ArrayBuffer(str.length);
- const view = new Uint8Array(buffer);
- for (let i = 0; i < str.length; i++) {
- view[i] = str.charCodeAt(i);
- }
- return buffer;
- }
- function dataUriToBuffer(uri) {
- uri = String(uri);
- if (!/^data:/i.test(uri)) {
- throw new TypeError('`uri` does not appear to be a Data URI (must begin with "data:")');
- }
- uri = uri.replace(/\r?\n/g, "");
- const firstComma = uri.indexOf(",");
- if (firstComma === -1 || firstComma <= 4) {
- throw new TypeError("malformed data: URI");
- }
- const meta = uri.substring(5, firstComma).split(";");
- let charset = "";
- let base64 = false;
- const type = meta[0] || "text/plain";
- let typeFull = type;
- for (let i = 1; i < meta.length; i++) {
- if (meta[i] === "base64") {
- base64 = true;
- } else if (meta[i]) {
- typeFull += `;${meta[i]}`;
- if (meta[i].indexOf("charset=") === 0) {
- charset = meta[i].substring(8);
- }
- }
+ if (client[kMaxRequests] && socket[kCounter]++ >= client[kMaxRequests]) {
+ socket[kReset] = true;
}
- if (!meta[0] && !charset.length) {
- typeFull += ";charset=US-ASCII";
- charset = "US-ASCII";
+ if (blocking) {
+ socket[kBlocking] = true;
}
- const data = unescape(uri.substring(firstComma + 1));
- const buffer = base64 ? base64ToArrayBuffer(data) : stringToBuffer(data);
- return {
- type,
- typeFull,
- charset,
- buffer
- };
- }
- exports.dataUriToBuffer = dataUriToBuffer;
- }
-});
-
-// .yarn/cache/get-uri-npm-6.0.2-b89b919843-50ef3e0b76.zip/node_modules/get-uri/dist/notmodified.js
-var require_notmodified = __commonJS({
- ".yarn/cache/get-uri-npm-6.0.2-b89b919843-50ef3e0b76.zip/node_modules/get-uri/dist/notmodified.js"(exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var NotModifiedError = class extends Error {
- constructor(message) {
- super(message || 'Source has not been modified since the provied "cache", re-use previous results');
- this.code = "ENOTMODIFIED";
+ let header = `${method} ${path10} HTTP/1.1\r
+`;
+ if (typeof host === "string") {
+ header += `host: ${host}\r
+`;
+ } else {
+ header += client[kHostHeader];
}
- };
- exports.default = NotModifiedError;
- }
-});
-
-// .yarn/cache/get-uri-npm-6.0.2-b89b919843-50ef3e0b76.zip/node_modules/get-uri/dist/data.js
-var require_data = __commonJS({
- ".yarn/cache/get-uri-npm-6.0.2-b89b919843-50ef3e0b76.zip/node_modules/get-uri/dist/data.js"(exports) {
- "use strict";
- var __importDefault2 = exports && exports.__importDefault || function(mod) {
- return mod && mod.__esModule ? mod : { "default": mod };
- };
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.data = void 0;
- var debug_1 = __importDefault2(require_src2());
- var stream_1 = require("stream");
- var crypto_1 = require("crypto");
- var data_uri_to_buffer_1 = require_dist5();
- var notmodified_1 = __importDefault2(require_notmodified());
- var debug2 = (0, debug_1.default)("get-uri:data");
- var DataReadable = class extends stream_1.Readable {
- constructor(hash, buf) {
- super();
- this.push(buf);
- this.push(null);
- this.hash = hash;
- }
- };
- var data = async ({ href: uri }, { cache } = {}) => {
- const shasum = (0, crypto_1.createHash)("sha1");
- shasum.update(uri);
- const hash = shasum.digest("hex");
- debug2('generated SHA1 hash for "data:" URI: %o', hash);
- if (cache?.hash === hash) {
- debug2("got matching cache SHA1 hash: %o", hash);
- throw new notmodified_1.default();
+ if (upgrade) {
+ header += `connection: upgrade\r
+upgrade: ${upgrade}\r
+`;
+ } else if (client[kPipelining] && !socket[kReset]) {
+ header += "connection: keep-alive\r\n";
+ } else {
+ header += "connection: close\r\n";
+ }
+ if (headers) {
+ header += headers;
+ }
+ if (channels.sendHeaders.hasSubscribers) {
+ channels.sendHeaders.publish({ request, headers: header, socket });
+ }
+ if (!body || bodyLength === 0) {
+ if (contentLength === 0) {
+ socket.write(`${header}content-length: 0\r
+\r
+`, "latin1");
+ } else {
+ assert3(contentLength === null, "no body must not have content length");
+ socket.write(`${header}\r
+`, "latin1");
+ }
+ request.onRequestSent();
+ } else if (util.isBuffer(body)) {
+ assert3(contentLength === body.byteLength, "buffer body must have content length");
+ socket.cork();
+ socket.write(`${header}content-length: ${contentLength}\r
+\r
+`, "latin1");
+ socket.write(body);
+ socket.uncork();
+ request.onBodySent(body);
+ request.onRequestSent();
+ if (!expectsPayload) {
+ socket[kReset] = true;
+ }
+ } else if (util.isBlobLike(body)) {
+ if (typeof body.stream === "function") {
+ writeIterable({ body: body.stream(), client, request, socket, contentLength, header, expectsPayload });
+ } else {
+ writeBlob({ body, client, request, socket, contentLength, header, expectsPayload });
+ }
+ } else if (util.isStream(body)) {
+ writeStream({ body, client, request, socket, contentLength, header, expectsPayload });
+ } else if (util.isIterable(body)) {
+ writeIterable({ body, client, request, socket, contentLength, header, expectsPayload });
+ } else {
+ assert3(false);
+ }
+ return true;
+ }
+ function writeH2(client, session, request) {
+ const { body, method, path: path10, host, upgrade, expectContinue, signal, headers: reqHeaders } = request;
+ let headers;
+ if (typeof reqHeaders === "string")
+ headers = Request[kHTTP2CopyHeaders](reqHeaders.trim());
+ else
+ headers = reqHeaders;
+ if (upgrade) {
+ errorRequest(client, request, new Error("Upgrade not supported for H2"));
+ return false;
+ }
+ if (request.aborted) {
+ return false;
+ }
+ let stream;
+ const h2State = client[kHTTP2SessionState];
+ headers[HTTP2_HEADER_AUTHORITY] = host || client[kHost];
+ headers[HTTP2_HEADER_METHOD] = method;
+ try {
+ request.onConnect((err) => {
+ if (request.aborted || request.completed) {
+ return;
+ }
+ err = err || new RequestAbortedError();
+ if (stream != null) {
+ util.destroy(stream, err);
+ h2State.openStreams -= 1;
+ if (h2State.openStreams === 0) {
+ session.unref();
+ }
+ }
+ errorRequest(client, request, err);
+ });
+ } catch (err) {
+ errorRequest(client, request, err);
+ }
+ if (method === "CONNECT") {
+ session.ref();
+ stream = session.request(headers, { endStream: false, signal });
+ if (stream.id && !stream.pending) {
+ request.onUpgrade(null, null, stream);
+ ++h2State.openStreams;
+ } else {
+ stream.once("ready", () => {
+ request.onUpgrade(null, null, stream);
+ ++h2State.openStreams;
+ });
+ }
+ stream.once("close", () => {
+ h2State.openStreams -= 1;
+ if (h2State.openStreams === 0)
+ session.unref();
+ });
+ return true;
+ }
+ headers[HTTP2_HEADER_PATH] = path10;
+ headers[HTTP2_HEADER_SCHEME] = "https";
+ const expectsPayload = method === "PUT" || method === "POST" || method === "PATCH";
+ if (body && typeof body.read === "function") {
+ body.read(0);
+ }
+ let contentLength = util.bodyLength(body);
+ if (contentLength == null) {
+ contentLength = request.contentLength;
+ }
+ if (contentLength === 0 || !expectsPayload) {
+ contentLength = null;
+ }
+ if (shouldSendContentLength(method) && contentLength > 0 && request.contentLength != null && request.contentLength !== contentLength) {
+ if (client[kStrictContentLength]) {
+ errorRequest(client, request, new RequestContentLengthMismatchError());
+ return false;
+ }
+ process.emitWarning(new RequestContentLengthMismatchError());
+ }
+ if (contentLength != null) {
+ assert3(body, "no body must not have content length");
+ headers[HTTP2_HEADER_CONTENT_LENGTH] = `${contentLength}`;
+ }
+ session.ref();
+ const shouldEndStream = method === "GET" || method === "HEAD" || body === null;
+ if (expectContinue) {
+ headers[HTTP2_HEADER_EXPECT] = "100-continue";
+ stream = session.request(headers, { endStream: shouldEndStream, signal });
+ stream.once("continue", writeBodyH2);
} else {
- debug2('creating Readable stream from "data:" URI buffer');
- const { buffer } = (0, data_uri_to_buffer_1.dataUriToBuffer)(uri);
- return new DataReadable(hash, Buffer.from(buffer));
+ stream = session.request(headers, {
+ endStream: shouldEndStream,
+ signal
+ });
+ writeBodyH2();
+ }
+ ++h2State.openStreams;
+ stream.once("response", (headers2) => {
+ const { [HTTP2_HEADER_STATUS]: statusCode, ...realHeaders } = headers2;
+ request.onResponseStarted();
+ if (request.onHeaders(Number(statusCode), realHeaders, stream.resume.bind(stream), "") === false) {
+ stream.pause();
+ }
+ });
+ stream.once("end", () => {
+ request.onComplete([]);
+ });
+ stream.on("data", (chunk) => {
+ if (request.onData(chunk) === false) {
+ stream.pause();
+ }
+ });
+ stream.once("close", () => {
+ h2State.openStreams -= 1;
+ if (h2State.openStreams === 0) {
+ session.unref();
+ }
+ });
+ stream.once("error", function(err) {
+ if (client[kHTTP2Session] && !client[kHTTP2Session].destroyed && !this.closed && !this.destroyed) {
+ h2State.streams -= 1;
+ util.destroy(stream, err);
+ }
+ });
+ stream.once("frameError", (type, code) => {
+ const err = new InformationalError(`HTTP/2: "frameError" received - type ${type}, code ${code}`);
+ errorRequest(client, request, err);
+ if (client[kHTTP2Session] && !client[kHTTP2Session].destroyed && !this.closed && !this.destroyed) {
+ h2State.streams -= 1;
+ util.destroy(stream, err);
+ }
+ });
+ return true;
+ function writeBodyH2() {
+ if (!body) {
+ request.onRequestSent();
+ } else if (util.isBuffer(body)) {
+ assert3(contentLength === body.byteLength, "buffer body must have content length");
+ stream.cork();
+ stream.write(body);
+ stream.uncork();
+ stream.end();
+ request.onBodySent(body);
+ request.onRequestSent();
+ } else if (util.isBlobLike(body)) {
+ if (typeof body.stream === "function") {
+ writeIterable({
+ client,
+ request,
+ contentLength,
+ h2stream: stream,
+ expectsPayload,
+ body: body.stream(),
+ socket: client[kSocket],
+ header: ""
+ });
+ } else {
+ writeBlob({
+ body,
+ client,
+ request,
+ contentLength,
+ expectsPayload,
+ h2stream: stream,
+ header: "",
+ socket: client[kSocket]
+ });
+ }
+ } else if (util.isStream(body)) {
+ writeStream({
+ body,
+ client,
+ request,
+ contentLength,
+ expectsPayload,
+ socket: client[kSocket],
+ h2stream: stream,
+ header: ""
+ });
+ } else if (util.isIterable(body)) {
+ writeIterable({
+ body,
+ client,
+ request,
+ contentLength,
+ expectsPayload,
+ header: "",
+ h2stream: stream,
+ socket: client[kSocket]
+ });
+ } else {
+ assert3(false);
+ }
+ }
+ }
+ function writeStream({ h2stream, body, client, request, socket, contentLength, header, expectsPayload }) {
+ assert3(contentLength !== 0 || client[kRunning] === 0, "stream body cannot be pipelined");
+ if (client[kHTTPConnVersion] === "h2") {
+ let onPipeData = function(chunk) {
+ request.onBodySent(chunk);
+ };
+ const pipe = pipeline(
+ body,
+ h2stream,
+ (err) => {
+ if (err) {
+ util.destroy(body, err);
+ util.destroy(h2stream, err);
+ } else {
+ request.onRequestSent();
+ }
+ }
+ );
+ pipe.on("data", onPipeData);
+ pipe.once("end", () => {
+ pipe.removeListener("data", onPipeData);
+ util.destroy(pipe);
+ });
+ return;
+ }
+ let finished = false;
+ const writer = new AsyncWriter({ socket, request, contentLength, client, expectsPayload, header });
+ const onData = function(chunk) {
+ if (finished) {
+ return;
+ }
+ try {
+ if (!writer.write(chunk) && this.pause) {
+ this.pause();
+ }
+ } catch (err) {
+ util.destroy(this, err);
+ }
+ };
+ const onDrain = function() {
+ if (finished) {
+ return;
+ }
+ if (body.resume) {
+ body.resume();
+ }
+ };
+ const onClose = function() {
+ queueMicrotask(() => {
+ body.removeListener("error", onFinished);
+ });
+ if (!finished) {
+ const err = new RequestAbortedError();
+ queueMicrotask(() => onFinished(err));
+ }
+ };
+ const onFinished = function(err) {
+ if (finished) {
+ return;
+ }
+ finished = true;
+ assert3(socket.destroyed || socket[kWriting] && client[kRunning] <= 1);
+ socket.off("drain", onDrain).off("error", onFinished);
+ body.removeListener("data", onData).removeListener("end", onFinished).removeListener("close", onClose);
+ if (!err) {
+ try {
+ writer.end();
+ } catch (er) {
+ err = er;
+ }
+ }
+ writer.destroy(err);
+ if (err && (err.code !== "UND_ERR_INFO" || err.message !== "reset")) {
+ util.destroy(body, err);
+ } else {
+ util.destroy(body);
+ }
+ };
+ body.on("data", onData).on("end", onFinished).on("error", onFinished).on("close", onClose);
+ if (body.resume) {
+ body.resume();
+ }
+ socket.on("drain", onDrain).on("error", onFinished);
+ }
+ async function writeBlob({ h2stream, body, client, request, socket, contentLength, header, expectsPayload }) {
+ assert3(contentLength === body.size, "blob body must have content length");
+ const isH2 = client[kHTTPConnVersion] === "h2";
+ try {
+ if (contentLength != null && contentLength !== body.size) {
+ throw new RequestContentLengthMismatchError();
+ }
+ const buffer = Buffer.from(await body.arrayBuffer());
+ if (isH2) {
+ h2stream.cork();
+ h2stream.write(buffer);
+ h2stream.uncork();
+ } else {
+ socket.cork();
+ socket.write(`${header}content-length: ${contentLength}\r
+\r
+`, "latin1");
+ socket.write(buffer);
+ socket.uncork();
+ }
+ request.onBodySent(buffer);
+ request.onRequestSent();
+ if (!expectsPayload) {
+ socket[kReset] = true;
+ }
+ resume(client);
+ } catch (err) {
+ util.destroy(isH2 ? h2stream : socket, err);
+ }
+ }
+ async function writeIterable({ h2stream, body, client, request, socket, contentLength, header, expectsPayload }) {
+ assert3(contentLength !== 0 || client[kRunning] === 0, "iterator body cannot be pipelined");
+ let callback = null;
+ function onDrain() {
+ if (callback) {
+ const cb = callback;
+ callback = null;
+ cb();
+ }
+ }
+ const waitForDrain = () => new Promise((resolve, reject) => {
+ assert3(callback === null);
+ if (socket[kError]) {
+ reject(socket[kError]);
+ } else {
+ callback = resolve;
+ }
+ });
+ if (client[kHTTPConnVersion] === "h2") {
+ h2stream.on("close", onDrain).on("drain", onDrain);
+ try {
+ for await (const chunk of body) {
+ if (socket[kError]) {
+ throw socket[kError];
+ }
+ const res = h2stream.write(chunk);
+ request.onBodySent(chunk);
+ if (!res) {
+ await waitForDrain();
+ }
+ }
+ } catch (err) {
+ h2stream.destroy(err);
+ } finally {
+ request.onRequestSent();
+ h2stream.end();
+ h2stream.off("close", onDrain).off("drain", onDrain);
+ }
+ return;
+ }
+ socket.on("close", onDrain).on("drain", onDrain);
+ const writer = new AsyncWriter({ socket, request, contentLength, client, expectsPayload, header });
+ try {
+ for await (const chunk of body) {
+ if (socket[kError]) {
+ throw socket[kError];
+ }
+ if (!writer.write(chunk)) {
+ await waitForDrain();
+ }
+ }
+ writer.end();
+ } catch (err) {
+ writer.destroy(err);
+ } finally {
+ socket.off("close", onDrain).off("drain", onDrain);
+ }
+ }
+ var AsyncWriter = class {
+ constructor({ socket, request, contentLength, client, expectsPayload, header }) {
+ this.socket = socket;
+ this.request = request;
+ this.contentLength = contentLength;
+ this.client = client;
+ this.bytesWritten = 0;
+ this.expectsPayload = expectsPayload;
+ this.header = header;
+ socket[kWriting] = true;
+ }
+ write(chunk) {
+ const { socket, request, contentLength, client, bytesWritten, expectsPayload, header } = this;
+ if (socket[kError]) {
+ throw socket[kError];
+ }
+ if (socket.destroyed) {
+ return false;
+ }
+ const len = Buffer.byteLength(chunk);
+ if (!len) {
+ return true;
+ }
+ if (contentLength !== null && bytesWritten + len > contentLength) {
+ if (client[kStrictContentLength]) {
+ throw new RequestContentLengthMismatchError();
+ }
+ process.emitWarning(new RequestContentLengthMismatchError());
+ }
+ socket.cork();
+ if (bytesWritten === 0) {
+ if (!expectsPayload) {
+ socket[kReset] = true;
+ }
+ if (contentLength === null) {
+ socket.write(`${header}transfer-encoding: chunked\r
+`, "latin1");
+ } else {
+ socket.write(`${header}content-length: ${contentLength}\r
+\r
+`, "latin1");
+ }
+ }
+ if (contentLength === null) {
+ socket.write(`\r
+${len.toString(16)}\r
+`, "latin1");
+ }
+ this.bytesWritten += len;
+ const ret = socket.write(chunk);
+ socket.uncork();
+ request.onBodySent(chunk);
+ if (!ret) {
+ if (socket[kParser].timeout && socket[kParser].timeoutType === TIMEOUT_HEADERS) {
+ if (socket[kParser].timeout.refresh) {
+ socket[kParser].timeout.refresh();
+ }
+ }
+ }
+ return ret;
+ }
+ end() {
+ const { socket, contentLength, client, bytesWritten, expectsPayload, header, request } = this;
+ request.onRequestSent();
+ socket[kWriting] = false;
+ if (socket[kError]) {
+ throw socket[kError];
+ }
+ if (socket.destroyed) {
+ return;
+ }
+ if (bytesWritten === 0) {
+ if (expectsPayload) {
+ socket.write(`${header}content-length: 0\r
+\r
+`, "latin1");
+ } else {
+ socket.write(`${header}\r
+`, "latin1");
+ }
+ } else if (contentLength === null) {
+ socket.write("\r\n0\r\n\r\n", "latin1");
+ }
+ if (contentLength !== null && bytesWritten !== contentLength) {
+ if (client[kStrictContentLength]) {
+ throw new RequestContentLengthMismatchError();
+ } else {
+ process.emitWarning(new RequestContentLengthMismatchError());
+ }
+ }
+ if (socket[kParser].timeout && socket[kParser].timeoutType === TIMEOUT_HEADERS) {
+ if (socket[kParser].timeout.refresh) {
+ socket[kParser].timeout.refresh();
+ }
+ }
+ resume(client);
+ }
+ destroy(err) {
+ const { socket, client } = this;
+ socket[kWriting] = false;
+ if (err) {
+ assert3(client[kRunning] <= 1, "pipeline should only contain this request");
+ util.destroy(socket, err);
+ }
}
};
- exports.data = data;
+ function errorRequest(client, request, err) {
+ try {
+ request.onError(err);
+ assert3(request.aborted);
+ } catch (err2) {
+ client.emit("error", err2);
+ }
+ }
+ module2.exports = Client;
}
});
-// .yarn/cache/universalify-npm-0.1.2-9b22d31d2d-e70e0339f6.zip/node_modules/universalify/index.js
-var require_universalify = __commonJS({
- ".yarn/cache/universalify-npm-0.1.2-9b22d31d2d-e70e0339f6.zip/node_modules/universalify/index.js"(exports) {
+// .yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/pool.js
+var require_pool = __commonJS({
+ ".yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/pool.js"(exports, module2) {
"use strict";
- exports.fromCallback = function(fn2) {
- return Object.defineProperty(function() {
- if (typeof arguments[arguments.length - 1] === "function")
- fn2.apply(this, arguments);
- else {
- return new Promise((resolve, reject) => {
- arguments[arguments.length] = (err, res) => {
- if (err)
- return reject(err);
- resolve(res);
- };
- arguments.length++;
- fn2.apply(this, arguments);
+ var {
+ PoolBase,
+ kClients,
+ kNeedDrain,
+ kAddClient,
+ kGetDispatcher
+ } = require_pool_base();
+ var Client = require_client();
+ var {
+ InvalidArgumentError
+ } = require_errors();
+ var util = require_util();
+ var { kUrl, kInterceptors } = require_symbols();
+ var buildConnector = require_connect();
+ var kOptions = Symbol("options");
+ var kConnections = Symbol("connections");
+ var kFactory = Symbol("factory");
+ function defaultFactory(origin, opts) {
+ return new Client(origin, opts);
+ }
+ var Pool = class extends PoolBase {
+ constructor(origin, {
+ connections,
+ factory = defaultFactory,
+ connect,
+ connectTimeout,
+ tls,
+ maxCachedSessions,
+ socketPath,
+ autoSelectFamily,
+ autoSelectFamilyAttemptTimeout,
+ allowH2,
+ ...options
+ } = {}) {
+ super();
+ if (connections != null && (!Number.isFinite(connections) || connections < 0)) {
+ throw new InvalidArgumentError("invalid connections");
+ }
+ if (typeof factory !== "function") {
+ throw new InvalidArgumentError("factory must be a function.");
+ }
+ if (connect != null && typeof connect !== "function" && typeof connect !== "object") {
+ throw new InvalidArgumentError("connect must be a function or an object");
+ }
+ if (typeof connect !== "function") {
+ connect = buildConnector({
+ ...tls,
+ maxCachedSessions,
+ allowH2,
+ socketPath,
+ timeout: connectTimeout,
+ ...util.nodeHasAutoSelectFamily && autoSelectFamily ? { autoSelectFamily, autoSelectFamilyAttemptTimeout } : void 0,
+ ...connect
});
}
- }, "name", { value: fn2.name });
- };
- exports.fromPromise = function(fn2) {
- return Object.defineProperty(function() {
- const cb = arguments[arguments.length - 1];
- if (typeof cb !== "function")
- return fn2.apply(this, arguments);
- else
- fn2.apply(this, arguments).then((r) => cb(null, r), cb);
- }, "name", { value: fn2.name });
+ this[kInterceptors] = options.interceptors?.Pool && Array.isArray(options.interceptors.Pool) ? options.interceptors.Pool : [];
+ this[kConnections] = connections || null;
+ this[kUrl] = util.parseOrigin(origin);
+ this[kOptions] = { ...util.deepClone(options), connect, allowH2 };
+ this[kOptions].interceptors = options.interceptors ? { ...options.interceptors } : void 0;
+ this[kFactory] = factory;
+ }
+ [kGetDispatcher]() {
+ for (const client of this[kClients]) {
+ if (!client[kNeedDrain]) {
+ return client;
+ }
+ }
+ if (!this[kConnections] || this[kClients].length < this[kConnections]) {
+ const dispatcher = this[kFactory](this[kUrl], this[kOptions]);
+ this[kAddClient](dispatcher);
+ return dispatcher;
+ }
+ }
};
+ module2.exports = Pool;
}
});
-// .yarn/cache/graceful-fs-npm-4.2.11-24bb648a68-386d011a55.zip/node_modules/graceful-fs/polyfills.js
-var require_polyfills = __commonJS({
- ".yarn/cache/graceful-fs-npm-4.2.11-24bb648a68-386d011a55.zip/node_modules/graceful-fs/polyfills.js"(exports, module2) {
- var constants = require("constants");
- var origCwd = process.cwd;
- var cwd = null;
- var platform = 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(fs8) {
- if (constants.hasOwnProperty("O_SYMLINK") && process.version.match(/^v0\.6\.[0-2]|^v0\.5\./)) {
- patchLchmod(fs8);
- }
- if (!fs8.lutimes) {
- patchLutimes(fs8);
- }
- fs8.chown = chownFix(fs8.chown);
- fs8.fchown = chownFix(fs8.fchown);
- fs8.lchown = chownFix(fs8.lchown);
- fs8.chmod = chmodFix(fs8.chmod);
- fs8.fchmod = chmodFix(fs8.fchmod);
- fs8.lchmod = chmodFix(fs8.lchmod);
- fs8.chownSync = chownFixSync(fs8.chownSync);
- fs8.fchownSync = chownFixSync(fs8.fchownSync);
- fs8.lchownSync = chownFixSync(fs8.lchownSync);
- fs8.chmodSync = chmodFixSync(fs8.chmodSync);
- fs8.fchmodSync = chmodFixSync(fs8.fchmodSync);
- fs8.lchmodSync = chmodFixSync(fs8.lchmodSync);
- fs8.stat = statFix(fs8.stat);
- fs8.fstat = statFix(fs8.fstat);
- fs8.lstat = statFix(fs8.lstat);
- fs8.statSync = statFixSync(fs8.statSync);
- fs8.fstatSync = statFixSync(fs8.fstatSync);
- fs8.lstatSync = statFixSync(fs8.lstatSync);
- if (fs8.chmod && !fs8.lchmod) {
- fs8.lchmod = function(path10, mode, cb) {
- if (cb)
- process.nextTick(cb);
+// .yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/agent.js
+var require_agent = __commonJS({
+ ".yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/agent.js"(exports, module2) {
+ "use strict";
+ var { InvalidArgumentError } = require_errors();
+ var { kClients, kRunning, kClose, kDestroy, kDispatch, kInterceptors } = require_symbols();
+ var DispatcherBase = require_dispatcher_base();
+ var Pool = require_pool();
+ var Client = require_client();
+ var util = require_util();
+ var createRedirectInterceptor = require_redirectInterceptor();
+ var kOnConnect = Symbol("onConnect");
+ var kOnDisconnect = Symbol("onDisconnect");
+ var kOnConnectionError = Symbol("onConnectionError");
+ var kMaxRedirections = Symbol("maxRedirections");
+ var kOnDrain = Symbol("onDrain");
+ var kFactory = Symbol("factory");
+ var kOptions = Symbol("options");
+ function defaultFactory(origin, opts) {
+ return opts && opts.connections === 1 ? new Client(origin, opts) : new Pool(origin, opts);
+ }
+ var Agent = class extends DispatcherBase {
+ constructor({ factory = defaultFactory, maxRedirections = 0, connect, ...options } = {}) {
+ super();
+ if (typeof factory !== "function") {
+ throw new InvalidArgumentError("factory must be a function.");
+ }
+ if (connect != null && typeof connect !== "function" && typeof connect !== "object") {
+ throw new InvalidArgumentError("connect must be a function or an object");
+ }
+ if (!Number.isInteger(maxRedirections) || maxRedirections < 0) {
+ throw new InvalidArgumentError("maxRedirections must be a positive number");
+ }
+ if (connect && typeof connect !== "function") {
+ connect = { ...connect };
+ }
+ this[kInterceptors] = options.interceptors?.Agent && Array.isArray(options.interceptors.Agent) ? options.interceptors.Agent : [createRedirectInterceptor({ maxRedirections })];
+ this[kOptions] = { ...util.deepClone(options), connect };
+ this[kOptions].interceptors = options.interceptors ? { ...options.interceptors } : void 0;
+ this[kMaxRedirections] = maxRedirections;
+ this[kFactory] = factory;
+ this[kClients] = /* @__PURE__ */ new Map();
+ this[kOnDrain] = (origin, targets) => {
+ this.emit("drain", origin, [this, ...targets]);
};
- fs8.lchmodSync = function() {
+ this[kOnConnect] = (origin, targets) => {
+ this.emit("connect", origin, [this, ...targets]);
};
- }
- if (fs8.chown && !fs8.lchown) {
- fs8.lchown = function(path10, uid, gid, cb) {
- if (cb)
- process.nextTick(cb);
+ this[kOnDisconnect] = (origin, targets, err) => {
+ this.emit("disconnect", origin, [this, ...targets], err);
};
- fs8.lchownSync = function() {
+ this[kOnConnectionError] = (origin, targets, err) => {
+ this.emit("connectionError", origin, [this, ...targets], err);
};
}
- if (platform === "win32") {
- fs8.rename = typeof fs8.rename !== "function" ? fs8.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() {
- fs8.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;
- }(fs8.rename);
+ get [kRunning]() {
+ let ret = 0;
+ for (const client of this[kClients].values()) {
+ ret += client[kRunning];
+ }
+ return ret;
}
- fs8.read = typeof fs8.read !== "function" ? fs8.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(fs8, fd, buffer, offset, length, position, callback);
- }
- callback_.apply(this, arguments);
- };
- }
- return fs$read.call(fs8, fd, buffer, offset, length, position, callback);
+ [kDispatch](opts, handler) {
+ let key;
+ if (opts.origin && (typeof opts.origin === "string" || opts.origin instanceof URL)) {
+ key = String(opts.origin);
+ } else {
+ throw new InvalidArgumentError("opts.origin must be a non-empty string or URL.");
}
- if (Object.setPrototypeOf)
- Object.setPrototypeOf(read, fs$read);
- return read;
- }(fs8.read);
- fs8.readSync = typeof fs8.readSync !== "function" ? fs8.readSync : function(fs$readSync) {
- return function(fd, buffer, offset, length, position) {
- var eagCounter = 0;
- while (true) {
- try {
- return fs$readSync.call(fs8, fd, buffer, offset, length, position);
- } catch (er) {
- if (er.code === "EAGAIN" && eagCounter < 10) {
- eagCounter++;
- continue;
- }
- throw er;
+ let dispatcher = this[kClients].get(key);
+ if (!dispatcher) {
+ dispatcher = this[kFactory](opts.origin, this[kOptions]).on("drain", this[kOnDrain]).on("connect", this[kOnConnect]).on("disconnect", this[kOnDisconnect]).on("connectionError", this[kOnConnectionError]);
+ this[kClients].set(key, dispatcher);
+ }
+ return dispatcher.dispatch(opts, handler);
+ }
+ async [kClose]() {
+ const closePromises = [];
+ for (const client of this[kClients].values()) {
+ closePromises.push(client.close());
+ }
+ this[kClients].clear();
+ await Promise.all(closePromises);
+ }
+ async [kDestroy](err) {
+ const destroyPromises = [];
+ for (const client of this[kClients].values()) {
+ destroyPromises.push(client.destroy(err));
+ }
+ this[kClients].clear();
+ await Promise.all(destroyPromises);
+ }
+ };
+ module2.exports = Agent;
+ }
+});
+
+// .yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/proxy-agent.js
+var require_proxy_agent = __commonJS({
+ ".yarn/cache/undici-npm-6.6.2-a0bd6785a6-c8c8a43605.zip/node_modules/undici/lib/proxy-agent.js"(exports, module2) {
+ "use strict";
+ var { kProxy, kClose, kDestroy, kInterceptors } = require_symbols();
+ var { URL: URL2 } = require("node:url");
+ var Agent = require_agent();
+ var Pool = require_pool();
+ var DispatcherBase = require_dispatcher_base();
+ var { InvalidArgumentError, RequestAbortedError } = require_errors();
+ var buildConnector = require_connect();
+ var kAgent = Symbol("proxy agent");
+ var kClient = Symbol("proxy client");
+ var kProxyHeaders = Symbol("proxy headers");
+ var kRequestTls = Symbol("request tls settings");
+ var kProxyTls = Symbol("proxy tls settings");
+ var kConnectEndpoint = Symbol("connect endpoint function");
+ function defaultProtocolPort(protocol) {
+ return protocol === "https:" ? 443 : 80;
+ }
+ function buildProxyOptions(opts) {
+ if (typeof opts === "string") {
+ opts = { uri: opts };
+ }
+ if (!opts || !opts.uri) {
+ throw new InvalidArgumentError("Proxy opts.uri is mandatory");
+ }
+ return {
+ uri: opts.uri,
+ protocol: opts.protocol || "https"
+ };
+ }
+ function defaultFactory(origin, opts) {
+ return new Pool(origin, opts);
+ }
+ var ProxyAgent = class extends DispatcherBase {
+ constructor(opts) {
+ super(opts);
+ this[kProxy] = buildProxyOptions(opts);
+ this[kAgent] = new Agent(opts);
+ this[kInterceptors] = opts.interceptors?.ProxyAgent && Array.isArray(opts.interceptors.ProxyAgent) ? opts.interceptors.ProxyAgent : [];
+ if (typeof opts === "string") {
+ opts = { uri: opts };
+ }
+ if (!opts || !opts.uri) {
+ throw new InvalidArgumentError("Proxy opts.uri is mandatory");
+ }
+ const { clientFactory = defaultFactory } = opts;
+ if (typeof clientFactory !== "function") {
+ throw new InvalidArgumentError("Proxy opts.clientFactory must be a function.");
+ }
+ this[kRequestTls] = opts.requestTls;
+ this[kProxyTls] = opts.proxyTls;
+ this[kProxyHeaders] = opts.headers || {};
+ const resolvedUrl = new URL2(opts.uri);
+ const { origin, port, username, password } = resolvedUrl;
+ if (opts.auth && opts.token) {
+ throw new InvalidArgumentError("opts.auth cannot be used in combination with opts.token");
+ } else if (opts.auth) {
+ this[kProxyHeaders]["proxy-authorization"] = `Basic ${opts.auth}`;
+ } else if (opts.token) {
+ this[kProxyHeaders]["proxy-authorization"] = opts.token;
+ } else if (username && password) {
+ this[kProxyHeaders]["proxy-authorization"] = `Basic ${Buffer.from(`${decodeURIComponent(username)}:${decodeURIComponent(password)}`).toString("base64")}`;
+ }
+ const connect = buildConnector({ ...opts.proxyTls });
+ this[kConnectEndpoint] = buildConnector({ ...opts.requestTls });
+ this[kClient] = clientFactory(resolvedUrl, { connect });
+ this[kAgent] = new Agent({
+ ...opts,
+ connect: async (opts2, callback) => {
+ let requestedHost = opts2.host;
+ if (!opts2.port) {
+ requestedHost += `:${defaultProtocolPort(opts2.protocol)}`;
}
- }
- };
- }(fs8.readSync);
- function patchLchmod(fs9) {
- fs9.lchmod = function(path10, mode, callback) {
- fs9.open(
- path10,
- constants.O_WRONLY | constants.O_SYMLINK,
- mode,
- function(err, fd) {
- if (err) {
- if (callback)
- callback(err);
- return;
- }
- fs9.fchmod(fd, mode, function(err2) {
- fs9.close(fd, function(err22) {
- if (callback)
- callback(err2 || err22);
- });
+ try {
+ const { socket, statusCode } = await this[kClient].connect({
+ origin,
+ port,
+ path: requestedHost,
+ signal: opts2.signal,
+ headers: {
+ ...this[kProxyHeaders],
+ host: requestedHost
+ }
});
- }
- );
- };
- fs9.lchmodSync = function(path10, mode) {
- var fd = fs9.openSync(path10, constants.O_WRONLY | constants.O_SYMLINK, mode);
- var threw = true;
- var ret;
- try {
- ret = fs9.fchmodSync(fd, mode);
- threw = false;
- } finally {
- if (threw) {
- try {
- fs9.closeSync(fd);
- } catch (er) {
+ if (statusCode !== 200) {
+ socket.on("error", () => {
+ }).destroy();
+ callback(new RequestAbortedError(`Proxy response (${statusCode}) !== 200 when HTTP Tunneling`));
}
- } else {
- fs9.closeSync(fd);
- }
- }
- return ret;
- };
- }
- function patchLutimes(fs9) {
- if (constants.hasOwnProperty("O_SYMLINK") && fs9.futimes) {
- fs9.lutimes = function(path10, at, mt, cb) {
- fs9.open(path10, constants.O_SYMLINK, function(er, fd) {
- if (er) {
- if (cb)
- cb(er);
+ if (opts2.protocol !== "https:") {
+ callback(null, socket);
return;
}
- fs9.futimes(fd, at, mt, function(er2) {
- fs9.close(fd, function(er22) {
- if (cb)
- cb(er2 || er22);
- });
- });
- });
- };
- fs9.lutimesSync = function(path10, at, mt) {
- var fd = fs9.openSync(path10, constants.O_SYMLINK);
- var ret;
- var threw = true;
- try {
- ret = fs9.futimesSync(fd, at, mt);
- threw = false;
- } finally {
- if (threw) {
- try {
- fs9.closeSync(fd);
- } catch (er) {
- }
+ let servername;
+ if (this[kRequestTls]) {
+ servername = this[kRequestTls].servername;
} else {
- fs9.closeSync(fd);
+ servername = opts2.servername;
}
+ this[kConnectEndpoint]({ ...opts2, servername, httpSocket: socket }, callback);
+ } catch (err) {
+ callback(err);
}
- return ret;
- };
- } else if (fs9.futimes) {
- fs9.lutimes = function(_a, _b, _c, cb) {
- if (cb)
- process.nextTick(cb);
- };
- fs9.lutimesSync = function() {
- };
- }
- }
- function chmodFix(orig) {
- if (!orig)
- return orig;
- return function(target, mode, cb) {
- return orig.call(fs8, 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(fs8, 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(fs8, 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(fs8, 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;
+ dispatch(opts, handler) {
+ const { host } = new URL2(opts.origin);
+ const headers = buildHeaders(opts.headers);
+ throwIfProxyAuthIsSent(headers);
+ return this[kAgent].dispatch(
+ {
+ ...opts,
+ headers: {
+ ...headers,
+ host
}
- if (cb)
- cb.apply(this, arguments);
- }
- return options ? orig.call(fs8, target, options, callback) : orig.call(fs8, target, callback);
- };
+ },
+ handler
+ );
}
- function statFixSync(orig) {
- if (!orig)
- return orig;
- return function(target, options) {
- var stats = options ? orig.call(fs8, target, options) : orig.call(fs8, target);
- if (stats) {
- if (stats.uid < 0)
- stats.uid += 4294967296;
- if (stats.gid < 0)
- stats.gid += 4294967296;
- }
- return stats;
- };
+ async [kClose]() {
+ await this[kAgent].close();
+ await this[kClient].close();
}
- 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;
+ async [kDestroy]() {
+ await this[kAgent].destroy();
+ await this[kClient].destroy();
+ }
+ };
+ function buildHeaders(headers) {
+ if (Array.isArray(headers)) {
+ const headersPair = {};
+ for (let i = 0; i < headers.length; i += 2) {
+ headersPair[headers[i]] = headers[i + 1];
}
- return false;
+ return headersPair;
+ }
+ return headers;
+ }
+ function throwIfProxyAuthIsSent(headers) {
+ const existProxyAuth = headers && Object.keys(headers).find((key) => key.toLowerCase() === "proxy-authorization");
+ if (existProxyAuth) {
+ throw new InvalidArgumentError("Proxy-Authorization should be sent in ProxyAgent constructor");
}
}
+ module2.exports = ProxyAgent;
}
});
-// .yarn/cache/graceful-fs-npm-4.2.11-24bb648a68-386d011a55.zip/node_modules/graceful-fs/legacy-streams.js
-var require_legacy_streams = __commonJS({
- ".yarn/cache/graceful-fs-npm-4.2.11-24bb648a68-386d011a55.zip/node_modules/graceful-fs/legacy-streams.js"(exports, module2) {
- var Stream = require("stream").Stream;
- module2.exports = legacy;
- function legacy(fs8) {
- return {
- ReadStream,
- WriteStream
- };
- function ReadStream(path10, options) {
- if (!(this instanceof ReadStream))
- return new ReadStream(path10, options);
- Stream.call(this);
- var self2 = this;
- this.path = path10;
- 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;
- }
- fs8.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 WriteStream(path10, options) {
- if (!(this instanceof WriteStream))
- return new WriteStream(path10, options);
- Stream.call(this);
- this.path = path10;
- 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 = fs8.open;
- this._queue.push([this._open, this.path, this.flags, this.mode, void 0]);
- this.flush();
- }
- }
- }
+// .yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/high-level-opt.js
+var require_high_level_opt = __commonJS({
+ ".yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/high-level-opt.js"(exports, module2) {
+ "use strict";
+ var 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"]
+ ]);
+ module2.exports = (opt) => opt ? Object.keys(opt).map((k) => [
+ argmap.has(k) ? argmap.get(k) : k,
+ opt[k]
+ ]).reduce((set, kv) => (set[kv[0]] = kv[1], set), /* @__PURE__ */ Object.create(null)) : {};
}
});
-// .yarn/cache/graceful-fs-npm-4.2.11-24bb648a68-386d011a55.zip/node_modules/graceful-fs/clone.js
-var require_clone = __commonJS({
- ".yarn/cache/graceful-fs-npm-4.2.11-24bb648a68-386d011a55.zip/node_modules/graceful-fs/clone.js"(exports, module2) {
+// .yarn/cache/minipass-npm-5.0.0-c64fb63c92-a91d8043f6.zip/node_modules/minipass/index.js
+var require_minipass = __commonJS({
+ ".yarn/cache/minipass-npm-5.0.0-c64fb63c92-a91d8043f6.zip/node_modules/minipass/index.js"(exports) {
"use strict";
- module2.exports = clone;
- var getPrototypeOf = Object.getPrototypeOf || function(obj) {
- return obj.__proto__;
+ var proc = typeof process === "object" && process ? process : {
+ stdout: null,
+ stderr: null
};
- 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;
- }
- }
-});
-
-// .yarn/cache/graceful-fs-npm-4.2.11-24bb648a68-386d011a55.zip/node_modules/graceful-fs/graceful-fs.js
-var require_graceful_fs = __commonJS({
- ".yarn/cache/graceful-fs-npm-4.2.11-24bb648a68-386d011a55.zip/node_modules/graceful-fs/graceful-fs.js"(exports, module2) {
- var fs8 = 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 = Symbol.for("graceful-fs.queue");
- previousSymbol = Symbol.for("graceful-fs.previous");
- } else {
- gracefulQueue = "___graceful-fs.queue";
- previousSymbol = "___graceful-fs.previous";
- }
- function noop() {
- }
- function publishQueue(context, queue2) {
- Object.defineProperty(context, gracefulQueue, {
- get: function() {
- return queue2;
- }
- });
- }
- var debug2 = noop;
- if (util.debuglog)
- debug2 = util.debuglog("gfs4");
- else if (/\bgfs4\b/i.test(process.env.NODE_DEBUG || ""))
- debug2 = function() {
- var m = util.format.apply(util, arguments);
- m = "GFS4: " + m.split(/\n/).join("\nGFS4: ");
- console.error(m);
- };
- if (!fs8[gracefulQueue]) {
- queue = global[gracefulQueue] || [];
- publishQueue(fs8, queue);
- fs8.close = function(fs$close) {
- function close(fd, cb) {
- return fs$close.call(fs8, fd, function(err) {
- if (!err) {
- resetQueue();
- }
- if (typeof cb === "function")
- cb.apply(this, arguments);
- });
- }
- Object.defineProperty(close, previousSymbol, {
- value: fs$close
- });
- return close;
- }(fs8.close);
- fs8.closeSync = function(fs$closeSync) {
- function closeSync(fd) {
- fs$closeSync.apply(fs8, arguments);
- resetQueue();
- }
- Object.defineProperty(closeSync, previousSymbol, {
- value: fs$closeSync
- });
- return closeSync;
- }(fs8.closeSync);
- if (/\bgfs4\b/i.test(process.env.NODE_DEBUG || "")) {
- process.on("exit", function() {
- debug2(fs8[gracefulQueue]);
- require("assert").equal(fs8[gracefulQueue].length, 0);
- });
+ var EE = require("events");
+ var Stream = require("stream");
+ var stringdecoder = require("string_decoder");
+ var SD = stringdecoder.StringDecoder;
+ var EOF = Symbol("EOF");
+ var MAYBE_EMIT_END = Symbol("maybeEmitEnd");
+ var EMITTED_END = Symbol("emittedEnd");
+ var EMITTING_END = Symbol("emittingEnd");
+ var EMITTED_ERROR = Symbol("emittedError");
+ var CLOSED = Symbol("closed");
+ var READ = Symbol("read");
+ var FLUSH = Symbol("flush");
+ var FLUSHCHUNK = Symbol("flushChunk");
+ var ENCODING = Symbol("encoding");
+ var DECODER = Symbol("decoder");
+ var FLOWING = Symbol("flowing");
+ var PAUSED = Symbol("paused");
+ var RESUME = Symbol("resume");
+ var BUFFER = Symbol("buffer");
+ var PIPES = Symbol("pipes");
+ var BUFFERLENGTH = Symbol("bufferLength");
+ var BUFFERPUSH = Symbol("bufferPush");
+ var BUFFERSHIFT = Symbol("bufferShift");
+ var OBJECTMODE = Symbol("objectMode");
+ var DESTROYED = Symbol("destroyed");
+ var ERROR = Symbol("error");
+ var EMITDATA = Symbol("emitData");
+ var EMITEND = Symbol("emitEnd");
+ var EMITEND2 = Symbol("emitEnd2");
+ var ASYNC = Symbol("async");
+ var ABORT = Symbol("abort");
+ var ABORTED = Symbol("aborted");
+ var SIGNAL = Symbol("signal");
+ var defer = (fn2) => Promise.resolve().then(fn2);
+ var doIter = global._MP_NO_ITERATOR_SYMBOLS_ !== "1";
+ var ASYNCITERATOR = doIter && Symbol.asyncIterator || Symbol("asyncIterator not implemented");
+ var ITERATOR = doIter && Symbol.iterator || Symbol("iterator not implemented");
+ var isEndish = (ev) => ev === "end" || ev === "finish" || ev === "prefinish";
+ var isArrayBuffer = (b) => b instanceof ArrayBuffer || typeof b === "object" && b.constructor && b.constructor.name === "ArrayBuffer" && b.byteLength >= 0;
+ var isArrayBufferView = (b) => !Buffer.isBuffer(b) && ArrayBuffer.isView(b);
+ var Pipe = class {
+ constructor(src, dest, opts) {
+ this.src = src;
+ this.dest = dest;
+ this.opts = opts;
+ this.ondrain = () => src[RESUME]();
+ dest.on("drain", this.ondrain);
}
- }
- var queue;
- if (!global[gracefulQueue]) {
- publishQueue(global, fs8[gracefulQueue]);
- }
- module2.exports = patch(clone(fs8));
- if (process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH && !fs8.__patched) {
- module2.exports = patch(fs8);
- fs8.__patched = true;
- }
- function patch(fs9) {
- polyfills(fs9);
- fs9.gracefulify = patch;
- fs9.createReadStream = createReadStream;
- fs9.createWriteStream = createWriteStream;
- var fs$readFile = fs9.readFile;
- fs9.readFile = readFile;
- function readFile(path10, options, cb) {
- if (typeof options === "function")
- cb = options, options = null;
- return go$readFile(path10, options, cb);
- function go$readFile(path11, options2, cb2, startTime) {
- return fs$readFile(path11, options2, function(err) {
- if (err && (err.code === "EMFILE" || err.code === "ENFILE"))
- enqueue([go$readFile, [path11, options2, cb2], err, startTime || Date.now(), Date.now()]);
- else {
- if (typeof cb2 === "function")
- cb2.apply(this, arguments);
- }
- });
- }
+ unpipe() {
+ this.dest.removeListener("drain", this.ondrain);
}
- var fs$writeFile = fs9.writeFile;
- fs9.writeFile = writeFile;
- function writeFile(path10, data, options, cb) {
- if (typeof options === "function")
- cb = options, options = null;
- return go$writeFile(path10, data, options, cb);
- function go$writeFile(path11, data2, options2, cb2, startTime) {
- return fs$writeFile(path11, data2, options2, function(err) {
- if (err && (err.code === "EMFILE" || err.code === "ENFILE"))
- enqueue([go$writeFile, [path11, data2, options2, cb2], err, startTime || Date.now(), Date.now()]);
- else {
- if (typeof cb2 === "function")
- cb2.apply(this, arguments);
- }
- });
- }
+ // istanbul ignore next - only here for the prototype
+ proxyErrors() {
}
- var fs$appendFile = fs9.appendFile;
- if (fs$appendFile)
- fs9.appendFile = appendFile;
- function appendFile(path10, data, options, cb) {
- if (typeof options === "function")
- cb = options, options = null;
- return go$appendFile(path10, data, options, cb);
- function go$appendFile(path11, data2, options2, cb2, startTime) {
- return fs$appendFile(path11, data2, options2, function(err) {
- if (err && (err.code === "EMFILE" || err.code === "ENFILE"))
- enqueue([go$appendFile, [path11, data2, options2, cb2], err, startTime || Date.now(), Date.now()]);
- else {
- if (typeof cb2 === "function")
- cb2.apply(this, arguments);
- }
- });
- }
+ end() {
+ this.unpipe();
+ if (this.opts.end)
+ this.dest.end();
}
- var fs$copyFile = fs9.copyFile;
- if (fs$copyFile)
- fs9.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 PipeProxyErrors = class extends Pipe {
+ unpipe() {
+ this.src.removeListener("error", this.proxyErrors);
+ super.unpipe();
}
- var fs$readdir = fs9.readdir;
- fs9.readdir = readdir;
- var noReaddirOptionVersions = /^v[0-5]\./;
- function readdir(path10, options, cb) {
- if (typeof options === "function")
- cb = options, options = null;
- var go$readdir = noReaddirOptionVersions.test(process.version) ? function go$readdir2(path11, options2, cb2, startTime) {
- return fs$readdir(path11, fs$readdirCallback(
- path11,
- options2,
- cb2,
- startTime
- ));
- } : function go$readdir2(path11, options2, cb2, startTime) {
- return fs$readdir(path11, options2, fs$readdirCallback(
- path11,
- options2,
- cb2,
- startTime
- ));
- };
- return go$readdir(path10, options, cb);
- function fs$readdirCallback(path11, options2, cb2, startTime) {
- return function(err, files) {
- if (err && (err.code === "EMFILE" || err.code === "ENFILE"))
- enqueue([
- go$readdir,
- [path11, options2, cb2],
- err,
- startTime || Date.now(),
- Date.now()
- ]);
- else {
- if (files && files.sort)
- files.sort();
- if (typeof cb2 === "function")
- cb2.call(this, err, files);
- }
- };
+ constructor(src, dest, opts) {
+ super(src, dest, opts);
+ this.proxyErrors = (er) => dest.emit("error", er);
+ src.on("error", this.proxyErrors);
+ }
+ };
+ var Minipass = class _Minipass extends Stream {
+ constructor(options) {
+ super();
+ this[FLOWING] = false;
+ this[PAUSED] = false;
+ this[PIPES] = [];
+ this[BUFFER] = [];
+ this[OBJECTMODE] = options && options.objectMode || false;
+ if (this[OBJECTMODE])
+ this[ENCODING] = null;
+ else
+ this[ENCODING] = options && options.encoding || null;
+ if (this[ENCODING] === "buffer")
+ this[ENCODING] = null;
+ this[ASYNC] = options && !!options.async || false;
+ this[DECODER] = this[ENCODING] ? new SD(this[ENCODING]) : null;
+ this[EOF] = false;
+ this[EMITTED_END] = false;
+ this[EMITTING_END] = false;
+ this[CLOSED] = false;
+ this[EMITTED_ERROR] = null;
+ this.writable = true;
+ this.readable = true;
+ this[BUFFERLENGTH] = 0;
+ this[DESTROYED] = false;
+ if (options && options.debugExposeBuffer === true) {
+ Object.defineProperty(this, "buffer", { get: () => this[BUFFER] });
+ }
+ if (options && options.debugExposePipes === true) {
+ Object.defineProperty(this, "pipes", { get: () => this[PIPES] });
+ }
+ this[SIGNAL] = options && options.signal;
+ this[ABORTED] = false;
+ if (this[SIGNAL]) {
+ this[SIGNAL].addEventListener("abort", () => this[ABORT]());
+ if (this[SIGNAL].aborted) {
+ this[ABORT]();
+ }
}
}
- if (process.version.substr(0, 4) === "v0.8") {
- var legStreams = legacy(fs9);
- ReadStream = legStreams.ReadStream;
- WriteStream = legStreams.WriteStream;
+ get bufferLength() {
+ return this[BUFFERLENGTH];
}
- var fs$ReadStream = fs9.ReadStream;
- if (fs$ReadStream) {
- ReadStream.prototype = Object.create(fs$ReadStream.prototype);
- ReadStream.prototype.open = ReadStream$open;
+ get encoding() {
+ return this[ENCODING];
}
- var fs$WriteStream = fs9.WriteStream;
- if (fs$WriteStream) {
- WriteStream.prototype = Object.create(fs$WriteStream.prototype);
- WriteStream.prototype.open = WriteStream$open;
+ set encoding(enc) {
+ if (this[OBJECTMODE])
+ throw new Error("cannot set encoding in objectMode");
+ if (this[ENCODING] && enc !== this[ENCODING] && (this[DECODER] && this[DECODER].lastNeed || this[BUFFERLENGTH]))
+ throw new Error("cannot change encoding");
+ if (this[ENCODING] !== enc) {
+ this[DECODER] = enc ? new SD(enc) : null;
+ if (this[BUFFER].length)
+ this[BUFFER] = this[BUFFER].map((chunk) => this[DECODER].write(chunk));
+ }
+ this[ENCODING] = enc;
}
- Object.defineProperty(fs9, "ReadStream", {
- get: function() {
- return ReadStream;
- },
- set: function(val) {
- ReadStream = val;
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(fs9, "WriteStream", {
- get: function() {
- return WriteStream;
- },
- set: function(val) {
- WriteStream = val;
- },
- enumerable: true,
- configurable: true
- });
- var FileReadStream = ReadStream;
- Object.defineProperty(fs9, "FileReadStream", {
- get: function() {
- return FileReadStream;
- },
- set: function(val) {
- FileReadStream = val;
- },
- enumerable: true,
- configurable: true
- });
- var FileWriteStream = WriteStream;
- Object.defineProperty(fs9, "FileWriteStream", {
- get: function() {
- return FileWriteStream;
- },
- set: function(val) {
- FileWriteStream = val;
- },
- enumerable: true,
- configurable: true
- });
- function ReadStream(path10, options) {
- if (this instanceof ReadStream)
- return fs$ReadStream.apply(this, arguments), this;
- else
- return ReadStream.apply(Object.create(ReadStream.prototype), arguments);
+ setEncoding(enc) {
+ this.encoding = enc;
}
- 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();
- }
- });
+ get objectMode() {
+ return this[OBJECTMODE];
}
- function WriteStream(path10, options) {
- if (this instanceof WriteStream)
- return fs$WriteStream.apply(this, arguments), this;
- else
- return WriteStream.apply(Object.create(WriteStream.prototype), arguments);
+ set objectMode(om) {
+ this[OBJECTMODE] = this[OBJECTMODE] || !!om;
}
- 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);
- }
- });
+ get ["async"]() {
+ return this[ASYNC];
}
- function createReadStream(path10, options) {
- return new fs9.ReadStream(path10, options);
+ set ["async"](a) {
+ this[ASYNC] = this[ASYNC] || !!a;
}
- function createWriteStream(path10, options) {
- return new fs9.WriteStream(path10, options);
+ // drop everything and get out of the flow completely
+ [ABORT]() {
+ this[ABORTED] = true;
+ this.emit("abort", this[SIGNAL].reason);
+ this.destroy(this[SIGNAL].reason);
}
- var fs$open = fs9.open;
- fs9.open = open;
- function open(path10, flags, mode, cb) {
- if (typeof mode === "function")
- cb = mode, mode = null;
- return go$open(path10, flags, mode, cb);
- function go$open(path11, flags2, mode2, cb2, startTime) {
- return fs$open(path11, flags2, mode2, function(err, fd) {
- if (err && (err.code === "EMFILE" || err.code === "ENFILE"))
- enqueue([go$open, [path11, flags2, mode2, cb2], err, startTime || Date.now(), Date.now()]);
- else {
- if (typeof cb2 === "function")
- cb2.apply(this, arguments);
- }
- });
- }
+ get aborted() {
+ return this[ABORTED];
}
- return fs9;
- }
- function enqueue(elem) {
- debug2("ENQUEUE", elem[0].name, elem[1]);
- fs8[gracefulQueue].push(elem);
- retry();
- }
- var retryTimer;
- function resetQueue() {
- var now = Date.now();
- for (var i = 0; i < fs8[gracefulQueue].length; ++i) {
- if (fs8[gracefulQueue][i].length > 2) {
- fs8[gracefulQueue][i][3] = now;
- fs8[gracefulQueue][i][4] = now;
- }
+ set aborted(_) {
}
- retry();
- }
- function retry() {
- clearTimeout(retryTimer);
- retryTimer = void 0;
- if (fs8[gracefulQueue].length === 0)
- return;
- var elem = fs8[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) {
- debug2("RETRY", fn2.name, args);
- fn2.apply(null, args);
- } else if (Date.now() - startTime >= 6e4) {
- debug2("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) {
- debug2("RETRY", fn2.name, args);
- fn2.apply(null, args.concat([startTime]));
- } else {
- fs8[gracefulQueue].push(elem);
+ 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 (retryTimer === void 0) {
- retryTimer = setTimeout(retry, 0);
- }
- }
- }
-});
-
-// .yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/fs/index.js
-var require_fs = __commonJS({
- ".yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/fs/index.js"(exports) {
- "use strict";
- var u = require_universalify().fromCallback;
- var fs8 = require_graceful_fs();
- var api = [
- "access",
- "appendFile",
- "chmod",
- "chown",
- "close",
- "copyFile",
- "fchmod",
- "fchown",
- "fdatasync",
- "fstat",
- "fsync",
- "ftruncate",
- "futimes",
- "lchown",
- "lchmod",
- "link",
- "lstat",
- "mkdir",
- "mkdtemp",
- "open",
- "readFile",
- "readdir",
- "readlink",
- "realpath",
- "rename",
- "rmdir",
- "stat",
- "symlink",
- "truncate",
- "unlink",
- "utimes",
- "writeFile"
- ].filter((key) => {
- return typeof fs8[key] === "function";
- });
- Object.keys(fs8).forEach((key) => {
- if (key === "promises") {
- return;
- }
- exports[key] = fs8[key];
- });
- api.forEach((method) => {
- exports[method] = u(fs8[method]);
- });
- exports.exists = function(filename, callback) {
- if (typeof callback === "function") {
- return fs8.exists(filename, callback);
- }
- return new Promise((resolve) => {
- return fs8.exists(filename, resolve);
- });
- };
- exports.read = function(fd, buffer, offset, length, position, callback) {
- if (typeof callback === "function") {
- return fs8.read(fd, buffer, offset, length, position, callback);
- }
- return new Promise((resolve, reject) => {
- fs8.read(fd, buffer, offset, length, position, (err, bytesRead, buffer2) => {
- if (err)
- return reject(err);
- resolve({ bytesRead, buffer: buffer2 });
- });
- });
- };
- exports.write = function(fd, buffer, ...args) {
- if (typeof args[args.length - 1] === "function") {
- return fs8.write(fd, buffer, ...args);
- }
- return new Promise((resolve, reject) => {
- fs8.write(fd, buffer, ...args, (err, bytesWritten, buffer2) => {
- if (err)
- return reject(err);
- resolve({ bytesWritten, buffer: buffer2 });
- });
- });
- };
- if (typeof fs8.realpath.native === "function") {
- exports.realpath.native = u(fs8.realpath.native);
- }
- }
-});
-
-// .yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/mkdirs/win32.js
-var require_win32 = __commonJS({
- ".yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/mkdirs/win32.js"(exports, module2) {
- "use strict";
- var path10 = require("path");
- function getRootPath(p) {
- p = path10.normalize(path10.resolve(p)).split(path10.sep);
- if (p.length > 0)
- return p[0];
- return null;
- }
- var INVALID_PATH_CHARS = /[<>:"|?*]/;
- function invalidWin32Path(p) {
- const rp = getRootPath(p);
- p = p.replace(rp, "");
- return INVALID_PATH_CHARS.test(p);
- }
- module2.exports = {
- getRootPath,
- invalidWin32Path
- };
- }
-});
-
-// .yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/mkdirs/mkdirs.js
-var require_mkdirs = __commonJS({
- ".yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/mkdirs/mkdirs.js"(exports, module2) {
- "use strict";
- var fs8 = require_graceful_fs();
- var path10 = require("path");
- var invalidWin32Path = require_win32().invalidWin32Path;
- var o777 = parseInt("0777", 8);
- function mkdirs(p, opts, callback, made) {
- if (typeof opts === "function") {
- callback = opts;
- opts = {};
- } else if (!opts || typeof opts !== "object") {
- opts = { mode: opts };
- }
- if (process.platform === "win32" && invalidWin32Path(p)) {
- const errInval = new Error(p + " contains invalid WIN32 path characters.");
- errInval.code = "EINVAL";
- return callback(errInval);
- }
- let mode = opts.mode;
- const xfs = opts.fs || fs8;
- if (mode === void 0) {
- mode = o777 & ~process.umask();
- }
- if (!made)
- made = null;
- callback = callback || function() {
- };
- p = path10.resolve(p);
- xfs.mkdir(p, mode, (er) => {
- if (!er) {
- made = made || p;
- return callback(null, made);
- }
- switch (er.code) {
- case "ENOENT":
- if (path10.dirname(p) === p)
- return callback(er);
- mkdirs(path10.dirname(p), opts, (er2, made2) => {
- if (er2)
- callback(er2, made2);
- else
- mkdirs(p, opts, callback, made2);
- });
- break;
- default:
- xfs.stat(p, (er2, stat) => {
- if (er2 || !stat.isDirectory())
- callback(er, made);
- else
- callback(null, made);
- });
- break;
+ if (typeof encoding === "function")
+ cb = encoding, encoding = "utf8";
+ if (!encoding)
+ encoding = "utf8";
+ const fn2 = this[ASYNC] ? defer : (f) => f();
+ if (!this[OBJECTMODE] && !Buffer.isBuffer(chunk)) {
+ if (isArrayBufferView(chunk))
+ chunk = Buffer.from(chunk.buffer, chunk.byteOffset, chunk.byteLength);
+ else if (isArrayBuffer(chunk))
+ chunk = Buffer.from(chunk);
+ else if (typeof chunk !== "string")
+ this.objectMode = true;
}
- });
- }
- module2.exports = mkdirs;
- }
-});
-
-// .yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/mkdirs/mkdirs-sync.js
-var require_mkdirs_sync = __commonJS({
- ".yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/mkdirs/mkdirs-sync.js"(exports, module2) {
- "use strict";
- var fs8 = require_graceful_fs();
- var path10 = require("path");
- var invalidWin32Path = require_win32().invalidWin32Path;
- var o777 = parseInt("0777", 8);
- function mkdirsSync(p, opts, made) {
- if (!opts || typeof opts !== "object") {
- opts = { mode: opts };
- }
- let mode = opts.mode;
- const xfs = opts.fs || fs8;
- if (process.platform === "win32" && invalidWin32Path(p)) {
- const errInval = new Error(p + " contains invalid WIN32 path characters.");
- errInval.code = "EINVAL";
- throw errInval;
- }
- if (mode === void 0) {
- mode = o777 & ~process.umask();
- }
- if (!made)
- made = null;
- p = path10.resolve(p);
- try {
- xfs.mkdirSync(p, mode);
- made = made || p;
- } catch (err0) {
- if (err0.code === "ENOENT") {
- if (path10.dirname(p) === p)
- throw err0;
- made = mkdirsSync(path10.dirname(p), opts, made);
- mkdirsSync(p, opts, made);
- } else {
- let stat;
- try {
- stat = xfs.statSync(p);
- } catch (err1) {
- throw err0;
- }
- if (!stat.isDirectory())
- throw err0;
+ 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;
}
- }
- return made;
- }
- module2.exports = mkdirsSync;
- }
-});
-
-// .yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/mkdirs/index.js
-var require_mkdirs2 = __commonJS({
- ".yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/mkdirs/index.js"(exports, module2) {
- "use strict";
- var u = require_universalify().fromCallback;
- var mkdirs = u(require_mkdirs());
- var mkdirsSync = require_mkdirs_sync();
- module2.exports = {
- mkdirs,
- mkdirsSync,
- // alias
- mkdirp: mkdirs,
- mkdirpSync: mkdirsSync,
- ensureDir: mkdirs,
- ensureDirSync: mkdirsSync
- };
- }
-});
-
-// .yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/util/utimes.js
-var require_utimes = __commonJS({
- ".yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/util/utimes.js"(exports, module2) {
- "use strict";
- var fs8 = require_graceful_fs();
- var os3 = require("os");
- var path10 = require("path");
- function hasMillisResSync() {
- let tmpfile = path10.join("millis-test-sync" + Date.now().toString() + Math.random().toString().slice(2));
- tmpfile = path10.join(os3.tmpdir(), tmpfile);
- const d = /* @__PURE__ */ new Date(1435410243862);
- fs8.writeFileSync(tmpfile, "https://github.com/jprichardson/node-fs-extra/pull/141");
- const fd = fs8.openSync(tmpfile, "r+");
- fs8.futimesSync(fd, d, d);
- fs8.closeSync(fd);
- return fs8.statSync(tmpfile).mtime > 1435410243e3;
- }
- function hasMillisRes(callback) {
- let tmpfile = path10.join("millis-test" + Date.now().toString() + Math.random().toString().slice(2));
- tmpfile = path10.join(os3.tmpdir(), tmpfile);
- const d = /* @__PURE__ */ new Date(1435410243862);
- fs8.writeFile(tmpfile, "https://github.com/jprichardson/node-fs-extra/pull/141", (err) => {
- if (err)
- return callback(err);
- fs8.open(tmpfile, "r+", (err2, fd) => {
- if (err2)
- return callback(err2);
- fs8.futimes(fd, d, d, (err3) => {
- if (err3)
- return callback(err3);
- fs8.close(fd, (err4) => {
- if (err4)
- return callback(err4);
- fs8.stat(tmpfile, (err5, stats) => {
- if (err5)
- return callback(err5);
- callback(null, stats.mtime > 1435410243e3);
- });
- });
- });
- });
- });
- }
- function timeRemoveMillis(timestamp) {
- if (typeof timestamp === "number") {
- return Math.floor(timestamp / 1e3) * 1e3;
- } else if (timestamp instanceof Date) {
- return new Date(Math.floor(timestamp.getTime() / 1e3) * 1e3);
- } else {
- throw new Error("fs-extra: timeRemoveMillis() unknown parameter type");
- }
- }
- function utimesMillis(path11, atime, mtime, callback) {
- fs8.open(path11, "r+", (err, fd) => {
- if (err)
- return callback(err);
- fs8.futimes(fd, atime, mtime, (futimesErr) => {
- fs8.close(fd, (closeErr) => {
- if (callback)
- callback(futimesErr || closeErr);
- });
- });
- });
- }
- function utimesMillisSync(path11, atime, mtime) {
- const fd = fs8.openSync(path11, "r+");
- fs8.futimesSync(fd, atime, mtime);
- return fs8.closeSync(fd);
- }
- module2.exports = {
- hasMillisRes,
- hasMillisResSync,
- timeRemoveMillis,
- utimesMillis,
- utimesMillisSync
- };
- }
-});
-
-// .yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/util/stat.js
-var require_stat = __commonJS({
- ".yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/util/stat.js"(exports, module2) {
- "use strict";
- var fs8 = require_graceful_fs();
- var path10 = require("path");
- var NODE_VERSION_MAJOR_WITH_BIGINT = 10;
- var NODE_VERSION_MINOR_WITH_BIGINT = 5;
- var NODE_VERSION_PATCH_WITH_BIGINT = 0;
- var nodeVersion = process.versions.node.split(".");
- var nodeVersionMajor = Number.parseInt(nodeVersion[0], 10);
- var nodeVersionMinor = Number.parseInt(nodeVersion[1], 10);
- var nodeVersionPatch = Number.parseInt(nodeVersion[2], 10);
- function nodeSupportsBigInt() {
- if (nodeVersionMajor > NODE_VERSION_MAJOR_WITH_BIGINT) {
- return true;
- } else if (nodeVersionMajor === NODE_VERSION_MAJOR_WITH_BIGINT) {
- if (nodeVersionMinor > NODE_VERSION_MINOR_WITH_BIGINT) {
- return true;
- } else if (nodeVersionMinor === NODE_VERSION_MINOR_WITH_BIGINT) {
- if (nodeVersionPatch >= NODE_VERSION_PATCH_WITH_BIGINT) {
- return true;
- }
+ if (!chunk.length) {
+ if (this[BUFFERLENGTH] !== 0)
+ this.emit("readable");
+ if (cb)
+ fn2(cb);
+ return this.flowing;
}
- }
- return false;
- }
- function getStats(src, dest, cb) {
- if (nodeSupportsBigInt()) {
- fs8.stat(src, { bigint: true }, (err, srcStat) => {
- if (err)
- return cb(err);
- fs8.stat(dest, { bigint: true }, (err2, destStat) => {
- if (err2) {
- if (err2.code === "ENOENT")
- return cb(null, { srcStat, destStat: null });
- return cb(err2);
- }
- return cb(null, { srcStat, destStat });
- });
- });
- } else {
- fs8.stat(src, (err, srcStat) => {
- if (err)
- return cb(err);
- fs8.stat(dest, (err2, destStat) => {
- if (err2) {
- if (err2.code === "ENOENT")
- return cb(null, { srcStat, destStat: null });
- return cb(err2);
- }
- return cb(null, { srcStat, destStat });
- });
- });
- }
- }
- function getStatsSync(src, dest) {
- let srcStat, destStat;
- if (nodeSupportsBigInt()) {
- srcStat = fs8.statSync(src, { bigint: true });
- } else {
- srcStat = fs8.statSync(src);
- }
- try {
- if (nodeSupportsBigInt()) {
- destStat = fs8.statSync(dest, { bigint: true });
- } else {
- destStat = fs8.statSync(dest);
+ 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);
}
- } catch (err) {
- if (err.code === "ENOENT")
- return { srcStat, destStat: null };
- throw err;
+ 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;
}
- return { srcStat, destStat };
- }
- function checkPaths(src, dest, funcName, cb) {
- getStats(src, dest, (err, stats) => {
- if (err)
- return cb(err);
- const { srcStat, destStat } = stats;
- if (destStat && destStat.ino && destStat.dev && destStat.ino === srcStat.ino && destStat.dev === srcStat.dev) {
- return cb(new Error("Source and destination must not be the same."));
+ read(n) {
+ if (this[DESTROYED])
+ return null;
+ if (this[BUFFERLENGTH] === 0 || n === 0 || n > this[BUFFERLENGTH]) {
+ this[MAYBE_EMIT_END]();
+ return null;
}
- if (srcStat.isDirectory() && isSrcSubdir(src, dest)) {
- return cb(new Error(errMsg(src, dest, funcName)));
+ if (this[OBJECTMODE])
+ n = null;
+ if (this[BUFFER].length > 1 && !this[OBJECTMODE]) {
+ if (this.encoding)
+ this[BUFFER] = [this[BUFFER].join("")];
+ else
+ this[BUFFER] = [Buffer.concat(this[BUFFER], this[BUFFERLENGTH])];
}
- return cb(null, { srcStat, destStat });
- });
- }
- function checkPathsSync(src, dest, funcName) {
- const { srcStat, destStat } = getStatsSync(src, dest);
- if (destStat && destStat.ino && destStat.dev && destStat.ino === srcStat.ino && destStat.dev === srcStat.dev) {
- throw new Error("Source and destination must not be the same.");
- }
- if (srcStat.isDirectory() && isSrcSubdir(src, dest)) {
- throw new Error(errMsg(src, dest, funcName));
- }
- return { srcStat, destStat };
- }
- function checkParentPaths(src, srcStat, dest, funcName, cb) {
- const srcParent = path10.resolve(path10.dirname(src));
- const destParent = path10.resolve(path10.dirname(dest));
- if (destParent === srcParent || destParent === path10.parse(destParent).root)
- return cb();
- if (nodeSupportsBigInt()) {
- fs8.stat(destParent, { bigint: true }, (err, destStat) => {
- if (err) {
- if (err.code === "ENOENT")
- return cb();
- return cb(err);
- }
- if (destStat.ino && destStat.dev && destStat.ino === srcStat.ino && destStat.dev === srcStat.dev) {
- return cb(new Error(errMsg(src, dest, funcName)));
- }
- return checkParentPaths(src, srcStat, destParent, funcName, cb);
- });
- } else {
- fs8.stat(destParent, (err, destStat) => {
- if (err) {
- if (err.code === "ENOENT")
- return cb();
- return cb(err);
- }
- if (destStat.ino && destStat.dev && destStat.ino === srcStat.ino && destStat.dev === srcStat.dev) {
- return cb(new Error(errMsg(src, dest, funcName)));
- }
- return checkParentPaths(src, srcStat, destParent, funcName, cb);
- });
+ const ret = this[READ](n || null, this[BUFFER][0]);
+ this[MAYBE_EMIT_END]();
+ return ret;
}
- }
- function checkParentPathsSync(src, srcStat, dest, funcName) {
- const srcParent = path10.resolve(path10.dirname(src));
- const destParent = path10.resolve(path10.dirname(dest));
- if (destParent === srcParent || destParent === path10.parse(destParent).root)
- return;
- let destStat;
- try {
- if (nodeSupportsBigInt()) {
- destStat = fs8.statSync(destParent, { bigint: true });
- } else {
- destStat = fs8.statSync(destParent);
+ [READ](n, chunk) {
+ if (n === chunk.length || n === null)
+ this[BUFFERSHIFT]();
+ else {
+ this[BUFFER][0] = chunk.slice(n);
+ chunk = chunk.slice(0, n);
+ this[BUFFERLENGTH] -= n;
}
- } catch (err) {
- if (err.code === "ENOENT")
- return;
- throw err;
+ this.emit("data", chunk);
+ if (!this[BUFFER].length && !this[EOF])
+ this.emit("drain");
+ return chunk;
}
- if (destStat.ino && destStat.dev && destStat.ino === srcStat.ino && destStat.dev === srcStat.dev) {
- throw new Error(errMsg(src, dest, funcName));
+ end(chunk, encoding, cb) {
+ if (typeof chunk === "function")
+ cb = chunk, chunk = null;
+ if (typeof encoding === "function")
+ cb = encoding, encoding = "utf8";
+ if (chunk)
+ 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;
}
- return checkParentPathsSync(src, srcStat, destParent, funcName);
- }
- function isSrcSubdir(src, dest) {
- const srcArr = path10.resolve(src).split(path10.sep).filter((i) => i);
- const destArr = path10.resolve(dest).split(path10.sep).filter((i) => i);
- return srcArr.reduce((acc, cur, i) => acc && destArr[i] === cur, true);
- }
- function errMsg(src, dest, funcName) {
- return `Cannot ${funcName} '${src}' to a subdirectory of itself, '${dest}'.`;
- }
- module2.exports = {
- checkPaths,
- checkPathsSync,
- checkParentPaths,
- checkParentPathsSync,
- isSrcSubdir
- };
- }
-});
-
-// .yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/util/buffer.js
-var require_buffer = __commonJS({
- ".yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/util/buffer.js"(exports, module2) {
- "use strict";
- module2.exports = function(size) {
- if (typeof Buffer.allocUnsafe === "function") {
- try {
- return Buffer.allocUnsafe(size);
- } catch (e) {
- return new Buffer(size);
- }
- }
- return new Buffer(size);
- };
- }
-});
-
-// .yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/copy-sync/copy-sync.js
-var require_copy_sync = __commonJS({
- ".yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/copy-sync/copy-sync.js"(exports, module2) {
- "use strict";
- var fs8 = require_graceful_fs();
- var path10 = require("path");
- var mkdirpSync = require_mkdirs2().mkdirsSync;
- var utimesSync = require_utimes().utimesMillisSync;
- var stat = require_stat();
- function copySync(src, dest, opts) {
- if (typeof opts === "function") {
- opts = { filter: opts };
- }
- opts = opts || {};
- opts.clobber = "clobber" in opts ? !!opts.clobber : true;
- opts.overwrite = "overwrite" in opts ? !!opts.overwrite : opts.clobber;
- if (opts.preserveTimestamps && process.arch === "ia32") {
- console.warn(`fs-extra: Using the preserveTimestamps option in 32-bit node is not recommended;
-
- see https://github.com/jprichardson/node-fs-extra/issues/269`);
+ // don't let the internal resume be overwritten
+ [RESUME]() {
+ if (this[DESTROYED])
+ return;
+ 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");
}
- const { srcStat, destStat } = stat.checkPathsSync(src, dest, "copy");
- stat.checkParentPathsSync(src, srcStat, dest, "copy");
- return handleFilterAndCopy(destStat, src, dest, opts);
- }
- function handleFilterAndCopy(destStat, src, dest, opts) {
- if (opts.filter && !opts.filter(src, dest))
- return;
- const destParent = path10.dirname(dest);
- if (!fs8.existsSync(destParent))
- mkdirpSync(destParent);
- return startCopy(destStat, src, dest, opts);
- }
- function startCopy(destStat, src, dest, opts) {
- if (opts.filter && !opts.filter(src, dest))
- return;
- return getStats(destStat, src, dest, opts);
- }
- function getStats(destStat, src, dest, opts) {
- const statSync = opts.dereference ? fs8.statSync : fs8.lstatSync;
- const srcStat = statSync(src);
- if (srcStat.isDirectory())
- return onDir(srcStat, destStat, src, dest, opts);
- else if (srcStat.isFile() || srcStat.isCharacterDevice() || srcStat.isBlockDevice())
- return onFile(srcStat, destStat, src, dest, opts);
- else if (srcStat.isSymbolicLink())
- return onLink(destStat, src, dest, opts);
- }
- function onFile(srcStat, destStat, src, dest, opts) {
- if (!destStat)
- return copyFile(srcStat, src, dest, opts);
- return mayCopyFile(srcStat, src, dest, opts);
- }
- function mayCopyFile(srcStat, src, dest, opts) {
- if (opts.overwrite) {
- fs8.unlinkSync(dest);
- return copyFile(srcStat, src, dest, opts);
- } else if (opts.errorOnExist) {
- throw new Error(`'${dest}' already exists`);
- }
- }
- function copyFile(srcStat, src, dest, opts) {
- if (typeof fs8.copyFileSync === "function") {
- fs8.copyFileSync(src, dest);
- fs8.chmodSync(dest, srcStat.mode);
- if (opts.preserveTimestamps) {
- return utimesSync(dest, srcStat.atime, srcStat.mtime);
- }
- return;
+ resume() {
+ return this[RESUME]();
}
- return copyFileFallback(srcStat, src, dest, opts);
- }
- function copyFileFallback(srcStat, src, dest, opts) {
- const BUF_LENGTH = 64 * 1024;
- const _buff = require_buffer()(BUF_LENGTH);
- const fdr = fs8.openSync(src, "r");
- const fdw = fs8.openSync(dest, "w", srcStat.mode);
- let pos = 0;
- while (pos < srcStat.size) {
- const bytesRead = fs8.readSync(fdr, _buff, 0, BUF_LENGTH, pos);
- fs8.writeSync(fdw, _buff, 0, bytesRead);
- pos += bytesRead;
- }
- if (opts.preserveTimestamps)
- fs8.futimesSync(fdw, srcStat.atime, srcStat.mtime);
- fs8.closeSync(fdr);
- fs8.closeSync(fdw);
- }
- function onDir(srcStat, destStat, src, dest, opts) {
- if (!destStat)
- return mkDirAndCopy(srcStat, src, dest, opts);
- if (destStat && !destStat.isDirectory()) {
- throw new Error(`Cannot overwrite non-directory '${dest}' with directory '${src}'.`);
- }
- return copyDir(src, dest, opts);
- }
- function mkDirAndCopy(srcStat, src, dest, opts) {
- fs8.mkdirSync(dest);
- copyDir(src, dest, opts);
- return fs8.chmodSync(dest, srcStat.mode);
- }
- function copyDir(src, dest, opts) {
- fs8.readdirSync(src).forEach((item) => copyDirItem(item, src, dest, opts));
- }
- function copyDirItem(item, src, dest, opts) {
- const srcItem = path10.join(src, item);
- const destItem = path10.join(dest, item);
- const { destStat } = stat.checkPathsSync(srcItem, destItem, "copy");
- return startCopy(destStat, srcItem, destItem, opts);
- }
- function onLink(destStat, src, dest, opts) {
- let resolvedSrc = fs8.readlinkSync(src);
- if (opts.dereference) {
- resolvedSrc = path10.resolve(process.cwd(), resolvedSrc);
- }
- if (!destStat) {
- return fs8.symlinkSync(resolvedSrc, dest);
- } else {
- let resolvedDest;
- try {
- resolvedDest = fs8.readlinkSync(dest);
- } catch (err) {
- if (err.code === "EINVAL" || err.code === "UNKNOWN")
- return fs8.symlinkSync(resolvedSrc, dest);
- throw err;
- }
- if (opts.dereference) {
- resolvedDest = path10.resolve(process.cwd(), resolvedDest);
- }
- if (stat.isSrcSubdir(resolvedSrc, resolvedDest)) {
- throw new Error(`Cannot copy '${resolvedSrc}' to a subdirectory of itself, '${resolvedDest}'.`);
- }
- if (fs8.statSync(dest).isDirectory() && stat.isSrcSubdir(resolvedDest, resolvedSrc)) {
- throw new Error(`Cannot overwrite '${resolvedDest}' with '${resolvedSrc}'.`);
- }
- return copyLink(resolvedSrc, dest);
+ pause() {
+ this[FLOWING] = false;
+ this[PAUSED] = true;
}
- }
- function copyLink(resolvedSrc, dest) {
- fs8.unlinkSync(dest);
- return fs8.symlinkSync(resolvedSrc, dest);
- }
- module2.exports = copySync;
- }
-});
-
-// .yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/copy-sync/index.js
-var require_copy_sync2 = __commonJS({
- ".yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/copy-sync/index.js"(exports, module2) {
- "use strict";
- module2.exports = {
- copySync: require_copy_sync()
- };
- }
-});
-
-// .yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/path-exists/index.js
-var require_path_exists = __commonJS({
- ".yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/path-exists/index.js"(exports, module2) {
- "use strict";
- var u = require_universalify().fromPromise;
- var fs8 = require_fs();
- function pathExists(path10) {
- return fs8.access(path10).then(() => true).catch(() => false);
- }
- module2.exports = {
- pathExists: u(pathExists),
- pathExistsSync: fs8.existsSync
- };
- }
-});
-
-// .yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/copy/copy.js
-var require_copy = __commonJS({
- ".yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/copy/copy.js"(exports, module2) {
- "use strict";
- var fs8 = require_graceful_fs();
- var path10 = require("path");
- var mkdirp = require_mkdirs2().mkdirs;
- var pathExists = require_path_exists().pathExists;
- var utimes = require_utimes().utimesMillis;
- var stat = require_stat();
- function copy(src, dest, opts, cb) {
- if (typeof opts === "function" && !cb) {
- cb = opts;
- opts = {};
- } else if (typeof opts === "function") {
- opts = { filter: opts };
- }
- cb = cb || function() {
- };
- opts = opts || {};
- opts.clobber = "clobber" in opts ? !!opts.clobber : true;
- opts.overwrite = "overwrite" in opts ? !!opts.overwrite : opts.clobber;
- if (opts.preserveTimestamps && process.arch === "ia32") {
- console.warn(`fs-extra: Using the preserveTimestamps option in 32-bit node is not recommended;
-
- see https://github.com/jprichardson/node-fs-extra/issues/269`);
- }
- stat.checkPaths(src, dest, "copy", (err, stats) => {
- if (err)
- return cb(err);
- const { srcStat, destStat } = stats;
- stat.checkParentPaths(src, srcStat, dest, "copy", (err2) => {
- if (err2)
- return cb(err2);
- if (opts.filter)
- return handleFilter(checkParentDir, destStat, src, dest, opts, cb);
- return checkParentDir(destStat, src, dest, opts, cb);
- });
- });
- }
- function checkParentDir(destStat, src, dest, opts, cb) {
- const destParent = path10.dirname(dest);
- pathExists(destParent, (err, dirExists) => {
- if (err)
- return cb(err);
- if (dirExists)
- return startCopy(destStat, src, dest, opts, cb);
- mkdirp(destParent, (err2) => {
- if (err2)
- return cb(err2);
- return startCopy(destStat, src, dest, opts, cb);
- });
- });
- }
- function handleFilter(onInclude, destStat, src, dest, opts, cb) {
- Promise.resolve(opts.filter(src, dest)).then((include) => {
- if (include)
- return onInclude(destStat, src, dest, opts, cb);
- return cb();
- }, (error) => cb(error));
- }
- function startCopy(destStat, src, dest, opts, cb) {
- if (opts.filter)
- return handleFilter(getStats, destStat, src, dest, opts, cb);
- return getStats(destStat, src, dest, opts, cb);
- }
- function getStats(destStat, src, dest, opts, cb) {
- const stat2 = opts.dereference ? fs8.stat : fs8.lstat;
- stat2(src, (err, srcStat) => {
- if (err)
- return cb(err);
- if (srcStat.isDirectory())
- return onDir(srcStat, destStat, src, dest, opts, cb);
- else if (srcStat.isFile() || srcStat.isCharacterDevice() || srcStat.isBlockDevice())
- return onFile(srcStat, destStat, src, dest, opts, cb);
- else if (srcStat.isSymbolicLink())
- return onLink(destStat, src, dest, opts, cb);
- });
- }
- function onFile(srcStat, destStat, src, dest, opts, cb) {
- if (!destStat)
- return copyFile(srcStat, src, dest, opts, cb);
- return mayCopyFile(srcStat, src, dest, opts, cb);
- }
- function mayCopyFile(srcStat, src, dest, opts, cb) {
- if (opts.overwrite) {
- fs8.unlink(dest, (err) => {
- if (err)
- return cb(err);
- return copyFile(srcStat, src, dest, opts, cb);
- });
- } else if (opts.errorOnExist) {
- return cb(new Error(`'${dest}' already exists`));
- } else
- return cb();
- }
- function copyFile(srcStat, src, dest, opts, cb) {
- if (typeof fs8.copyFile === "function") {
- return fs8.copyFile(src, dest, (err) => {
- if (err)
- return cb(err);
- return setDestModeAndTimestamps(srcStat, dest, opts, cb);
- });
+ get destroyed() {
+ return this[DESTROYED];
}
- return copyFileFallback(srcStat, src, dest, opts, cb);
- }
- function copyFileFallback(srcStat, src, dest, opts, cb) {
- const rs = fs8.createReadStream(src);
- rs.on("error", (err) => cb(err)).once("open", () => {
- const ws = fs8.createWriteStream(dest, { mode: srcStat.mode });
- ws.on("error", (err) => cb(err)).on("open", () => rs.pipe(ws)).once("close", () => setDestModeAndTimestamps(srcStat, dest, opts, cb));
- });
- }
- function setDestModeAndTimestamps(srcStat, dest, opts, cb) {
- fs8.chmod(dest, srcStat.mode, (err) => {
- if (err)
- return cb(err);
- if (opts.preserveTimestamps) {
- return utimes(dest, srcStat.atime, srcStat.mtime, cb);
- }
- return cb();
- });
- }
- function onDir(srcStat, destStat, src, dest, opts, cb) {
- if (!destStat)
- return mkDirAndCopy(srcStat, src, dest, opts, cb);
- if (destStat && !destStat.isDirectory()) {
- return cb(new Error(`Cannot overwrite non-directory '${dest}' with directory '${src}'.`));
- }
- return copyDir(src, dest, opts, cb);
- }
- function mkDirAndCopy(srcStat, src, dest, opts, cb) {
- fs8.mkdir(dest, (err) => {
- if (err)
- return cb(err);
- copyDir(src, dest, opts, (err2) => {
- if (err2)
- return cb(err2);
- return fs8.chmod(dest, srcStat.mode, cb);
- });
- });
- }
- function copyDir(src, dest, opts, cb) {
- fs8.readdir(src, (err, items) => {
- if (err)
- return cb(err);
- return copyDirItems(items, src, dest, opts, cb);
- });
- }
- function copyDirItems(items, src, dest, opts, cb) {
- const item = items.pop();
- if (!item)
- return cb();
- return copyDirItem(items, item, src, dest, opts, cb);
- }
- function copyDirItem(items, item, src, dest, opts, cb) {
- const srcItem = path10.join(src, item);
- const destItem = path10.join(dest, item);
- stat.checkPaths(srcItem, destItem, "copy", (err, stats) => {
- if (err)
- return cb(err);
- const { destStat } = stats;
- startCopy(destStat, srcItem, destItem, opts, (err2) => {
- if (err2)
- return cb(err2);
- return copyDirItems(items, src, dest, opts, cb);
- });
- });
- }
- function onLink(destStat, src, dest, opts, cb) {
- fs8.readlink(src, (err, resolvedSrc) => {
- if (err)
- return cb(err);
- if (opts.dereference) {
- resolvedSrc = path10.resolve(process.cwd(), resolvedSrc);
- }
- if (!destStat) {
- return fs8.symlink(resolvedSrc, dest, cb);
- } else {
- fs8.readlink(dest, (err2, resolvedDest) => {
- if (err2) {
- if (err2.code === "EINVAL" || err2.code === "UNKNOWN")
- return fs8.symlink(resolvedSrc, dest, cb);
- return cb(err2);
- }
- if (opts.dereference) {
- resolvedDest = path10.resolve(process.cwd(), resolvedDest);
- }
- if (stat.isSrcSubdir(resolvedSrc, resolvedDest)) {
- return cb(new Error(`Cannot copy '${resolvedSrc}' to a subdirectory of itself, '${resolvedDest}'.`));
- }
- if (destStat.isDirectory() && stat.isSrcSubdir(resolvedDest, resolvedSrc)) {
- return cb(new Error(`Cannot overwrite '${resolvedDest}' with '${resolvedSrc}'.`));
- }
- return copyLink(resolvedSrc, dest, cb);
- });
- }
- });
- }
- function copyLink(resolvedSrc, dest, cb) {
- fs8.unlink(dest, (err) => {
- if (err)
- return cb(err);
- return fs8.symlink(resolvedSrc, dest, cb);
- });
- }
- module2.exports = copy;
- }
-});
-
-// .yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/copy/index.js
-var require_copy2 = __commonJS({
- ".yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/copy/index.js"(exports, module2) {
- "use strict";
- var u = require_universalify().fromCallback;
- module2.exports = {
- copy: u(require_copy())
- };
- }
-});
-
-// .yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/remove/rimraf.js
-var require_rimraf = __commonJS({
- ".yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/remove/rimraf.js"(exports, module2) {
- "use strict";
- var fs8 = require_graceful_fs();
- var path10 = require("path");
- var assert2 = require("assert");
- var isWindows = process.platform === "win32";
- function defaults(options) {
- const methods = [
- "unlink",
- "chmod",
- "stat",
- "lstat",
- "rmdir",
- "readdir"
- ];
- methods.forEach((m) => {
- options[m] = options[m] || fs8[m];
- m = m + "Sync";
- options[m] = options[m] || fs8[m];
- });
- options.maxBusyTries = options.maxBusyTries || 3;
- }
- function rimraf2(p, options, cb) {
- let busyTries = 0;
- if (typeof options === "function") {
- cb = options;
- options = {};
- }
- assert2(p, "rimraf: missing path");
- assert2.strictEqual(typeof p, "string", "rimraf: path should be a string");
- assert2.strictEqual(typeof cb, "function", "rimraf: callback function required");
- assert2(options, "rimraf: invalid options argument provided");
- assert2.strictEqual(typeof options, "object", "rimraf: options should be object");
- defaults(options);
- rimraf_(p, options, function CB(er) {
- if (er) {
- if ((er.code === "EBUSY" || er.code === "ENOTEMPTY" || er.code === "EPERM") && busyTries < options.maxBusyTries) {
- busyTries++;
- const time = busyTries * 100;
- return setTimeout(() => rimraf_(p, options, CB), time);
- }
- if (er.code === "ENOENT")
- er = null;
- }
- cb(er);
- });
- }
- function rimraf_(p, options, cb) {
- assert2(p);
- assert2(options);
- assert2(typeof cb === "function");
- options.lstat(p, (er, st) => {
- if (er && er.code === "ENOENT") {
- return cb(null);
- }
- if (er && er.code === "EPERM" && isWindows) {
- return fixWinEPERM(p, options, er, cb);
- }
- if (st && st.isDirectory()) {
- return rmdir(p, options, er, cb);
- }
- options.unlink(p, (er2) => {
- if (er2) {
- if (er2.code === "ENOENT") {
- return cb(null);
- }
- if (er2.code === "EPERM") {
- return isWindows ? fixWinEPERM(p, options, er2, cb) : rmdir(p, options, er2, cb);
- }
- if (er2.code === "EISDIR") {
- return rmdir(p, options, er2, cb);
- }
- }
- return cb(er2);
- });
- });
- }
- function fixWinEPERM(p, options, er, cb) {
- assert2(p);
- assert2(options);
- assert2(typeof cb === "function");
- if (er) {
- assert2(er instanceof Error);
+ get flowing() {
+ return this[FLOWING];
}
- options.chmod(p, 438, (er2) => {
- if (er2) {
- cb(er2.code === "ENOENT" ? null : er);
- } else {
- options.stat(p, (er3, stats) => {
- if (er3) {
- cb(er3.code === "ENOENT" ? null : er);
- } else if (stats.isDirectory()) {
- rmdir(p, options, er, cb);
- } else {
- options.unlink(p, cb);
- }
- });
- }
- });
- }
- function fixWinEPERMSync(p, options, er) {
- let stats;
- assert2(p);
- assert2(options);
- if (er) {
- assert2(er instanceof Error);
+ get paused() {
+ return this[PAUSED];
}
- try {
- options.chmodSync(p, 438);
- } catch (er2) {
- if (er2.code === "ENOENT") {
- return;
- } else {
- throw er;
- }
+ [BUFFERPUSH](chunk) {
+ if (this[OBJECTMODE])
+ this[BUFFERLENGTH] += 1;
+ else
+ this[BUFFERLENGTH] += chunk.length;
+ this[BUFFER].push(chunk);
}
- try {
- stats = options.statSync(p);
- } catch (er3) {
- if (er3.code === "ENOENT") {
- return;
- } else {
- throw er;
- }
+ [BUFFERSHIFT]() {
+ if (this[OBJECTMODE])
+ this[BUFFERLENGTH] -= 1;
+ else
+ this[BUFFERLENGTH] -= this[BUFFER][0].length;
+ return this[BUFFER].shift();
}
- if (stats.isDirectory()) {
- rmdirSync(p, options, er);
- } else {
- options.unlinkSync(p);
+ [FLUSH](noDrain) {
+ do {
+ } while (this[FLUSHCHUNK](this[BUFFERSHIFT]()) && this[BUFFER].length);
+ if (!noDrain && !this[BUFFER].length && !this[EOF])
+ this.emit("drain");
}
- }
- function rmdir(p, options, originalEr, cb) {
- assert2(p);
- assert2(options);
- if (originalEr) {
- assert2(originalEr instanceof Error);
+ [FLUSHCHUNK](chunk) {
+ this.emit("data", chunk);
+ return this.flowing;
}
- assert2(typeof cb === "function");
- options.rmdir(p, (er) => {
- if (er && (er.code === "ENOTEMPTY" || er.code === "EEXIST" || er.code === "EPERM")) {
- rmkids(p, options, cb);
- } else if (er && er.code === "ENOTDIR") {
- cb(originalEr);
- } else {
- cb(er);
- }
- });
- }
- function rmkids(p, options, cb) {
- assert2(p);
- assert2(options);
- assert2(typeof cb === "function");
- options.readdir(p, (er, files) => {
- if (er)
- return cb(er);
- let n = files.length;
- let errState;
- if (n === 0)
- return options.rmdir(p, cb);
- files.forEach((f) => {
- rimraf2(path10.join(p, f), options, (er2) => {
- if (errState) {
- return;
- }
- if (er2)
- return cb(errState = er2);
- if (--n === 0) {
- options.rmdir(p, cb);
- }
- });
- });
- });
- }
- function rimrafSync(p, options) {
- let st;
- options = options || {};
- defaults(options);
- assert2(p, "rimraf: missing path");
- assert2.strictEqual(typeof p, "string", "rimraf: path should be a string");
- assert2(options, "rimraf: missing options");
- assert2.strictEqual(typeof options, "object", "rimraf: options should be object");
- try {
- st = options.lstatSync(p);
- } catch (er) {
- if (er.code === "ENOENT") {
+ pipe(dest, opts) {
+ if (this[DESTROYED])
return;
- }
- if (er.code === "EPERM" && isWindows) {
- fixWinEPERMSync(p, options, er);
- }
- }
- try {
- if (st && st.isDirectory()) {
- rmdirSync(p, options, null);
+ 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 {
- options.unlinkSync(p);
- }
- } catch (er) {
- if (er.code === "ENOENT") {
- return;
- } else if (er.code === "EPERM") {
- return isWindows ? fixWinEPERMSync(p, options, er) : rmdirSync(p, options, er);
- } else if (er.code !== "EISDIR") {
- throw er;
+ this[PIPES].push(
+ !opts.proxyErrors ? new Pipe(this, dest, opts) : new PipeProxyErrors(this, dest, opts)
+ );
+ if (this[ASYNC])
+ defer(() => this[RESUME]());
+ else
+ this[RESUME]();
}
- rmdirSync(p, options, er);
- }
- }
- function rmdirSync(p, options, originalEr) {
- assert2(p);
- assert2(options);
- if (originalEr) {
- assert2(originalEr instanceof Error);
+ return dest;
}
- try {
- options.rmdirSync(p);
- } catch (er) {
- if (er.code === "ENOTDIR") {
- throw originalEr;
- } else if (er.code === "ENOTEMPTY" || er.code === "EEXIST" || er.code === "EPERM") {
- rmkidsSync(p, options);
- } else if (er.code !== "ENOENT") {
- throw er;
+ unpipe(dest) {
+ const p = this[PIPES].find((p2) => p2.dest === dest);
+ if (p) {
+ this[PIPES].splice(this[PIPES].indexOf(p), 1);
+ p.unpipe();
}
}
- }
- function rmkidsSync(p, options) {
- assert2(p);
- assert2(options);
- options.readdirSync(p).forEach((f) => rimrafSync(path10.join(p, f), options));
- if (isWindows) {
- const startTime = Date.now();
- do {
- try {
- const ret = options.rmdirSync(p, options);
- return ret;
- } catch (er) {
- }
- } while (Date.now() - startTime < 500);
- } else {
- const ret = options.rmdirSync(p, options);
- return ret;
+ addListener(ev, fn2) {
+ return this.on(ev, fn2);
}
- }
- module2.exports = rimraf2;
- rimraf2.sync = rimrafSync;
- }
-});
-
-// .yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/remove/index.js
-var require_remove = __commonJS({
- ".yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/remove/index.js"(exports, module2) {
- "use strict";
- var u = require_universalify().fromCallback;
- var rimraf2 = require_rimraf();
- module2.exports = {
- remove: u(rimraf2),
- removeSync: rimraf2.sync
- };
- }
-});
-
-// .yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/empty/index.js
-var require_empty = __commonJS({
- ".yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/empty/index.js"(exports, module2) {
- "use strict";
- var u = require_universalify().fromCallback;
- var fs8 = require_graceful_fs();
- var path10 = require("path");
- var mkdir4 = require_mkdirs2();
- var remove = require_remove();
- var emptyDir = u(function emptyDir2(dir, callback) {
- callback = callback || function() {
- };
- fs8.readdir(dir, (err, items) => {
- if (err)
- return mkdir4.mkdirs(dir, callback);
- items = items.map((item) => path10.join(dir, item));
- deleteItem();
- function deleteItem() {
- const item = items.pop();
- if (!item)
- return callback();
- remove.remove(item, (err2) => {
- if (err2)
- return callback(err2);
- deleteItem();
- });
+ on(ev, fn2) {
+ const ret = super.on(ev, fn2);
+ if (ev === "data" && !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]) {
+ if (this[ASYNC])
+ defer(() => fn2.call(this, this[EMITTED_ERROR]));
+ else
+ fn2.call(this, this[EMITTED_ERROR]);
}
- });
- });
- function emptyDirSync(dir) {
- let items;
- try {
- items = fs8.readdirSync(dir);
- } catch (err) {
- return mkdir4.mkdirsSync(dir);
+ return ret;
}
- items.forEach((item) => {
- item = path10.join(dir, item);
- remove.removeSync(item);
- });
- }
- module2.exports = {
- emptyDirSync,
- emptydirSync: emptyDirSync,
- emptyDir,
- emptydir: emptyDir
- };
- }
-});
-
-// .yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/ensure/file.js
-var require_file = __commonJS({
- ".yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/ensure/file.js"(exports, module2) {
- "use strict";
- var u = require_universalify().fromCallback;
- var path10 = require("path");
- var fs8 = require_graceful_fs();
- var mkdir4 = require_mkdirs2();
- var pathExists = require_path_exists().pathExists;
- function createFile(file, callback) {
- function makeFile() {
- fs8.writeFile(file, "", (err) => {
- if (err)
- return callback(err);
- callback();
- });
+ get emittedEnd() {
+ return this[EMITTED_END];
}
- fs8.stat(file, (err, stats) => {
- if (!err && stats.isFile())
- return callback();
- const dir = path10.dirname(file);
- pathExists(dir, (err2, dirExists) => {
- if (err2)
- return callback(err2);
- if (dirExists)
- return makeFile();
- mkdir4.mkdirs(dir, (err3) => {
- if (err3)
- return callback(err3);
- makeFile();
- });
- });
- });
- }
- function createFileSync(file) {
- let stats;
- try {
- stats = fs8.statSync(file);
- } catch (e) {
+ [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;
+ }
}
- if (stats && stats.isFile())
- return;
- const dir = path10.dirname(file);
- if (!fs8.existsSync(dir)) {
- mkdir4.mkdirsSync(dir);
+ emit(ev, data, ...extra) {
+ if (ev !== "error" && ev !== "close" && ev !== DESTROYED && this[DESTROYED])
+ return;
+ else if (ev === "data") {
+ return !this[OBJECTMODE] && !data ? false : this[ASYNC] ? defer(() => this[EMITDATA](data)) : this[EMITDATA](data);
+ } else if (ev === "end") {
+ return this[EMITEND]();
+ } else if (ev === "close") {
+ this[CLOSED] = true;
+ if (!this[EMITTED_END] && !this[DESTROYED])
+ return;
+ 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, data, ...extra);
+ this[MAYBE_EMIT_END]();
+ return ret;
}
- fs8.writeFileSync(file, "");
- }
- module2.exports = {
- createFile: u(createFile),
- createFileSync
- };
- }
-});
-
-// .yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/ensure/link.js
-var require_link = __commonJS({
- ".yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/ensure/link.js"(exports, module2) {
- "use strict";
- var u = require_universalify().fromCallback;
- var path10 = require("path");
- var fs8 = require_graceful_fs();
- var mkdir4 = require_mkdirs2();
- var pathExists = require_path_exists().pathExists;
- function createLink(srcpath, dstpath, callback) {
- function makeLink(srcpath2, dstpath2) {
- fs8.link(srcpath2, dstpath2, (err) => {
- if (err)
- return callback(err);
- callback(null);
- });
+ [EMITDATA](data) {
+ for (const p of this[PIPES]) {
+ if (p.dest.write(data) === false)
+ this.pause();
+ }
+ const ret = super.emit("data", data);
+ this[MAYBE_EMIT_END]();
+ return ret;
}
- pathExists(dstpath, (err, destinationExists) => {
- if (err)
- return callback(err);
- if (destinationExists)
- return callback(null);
- fs8.lstat(srcpath, (err2) => {
- if (err2) {
- err2.message = err2.message.replace("lstat", "ensureLink");
- return callback(err2);
- }
- const dir = path10.dirname(dstpath);
- pathExists(dir, (err3, dirExists) => {
- if (err3)
- return callback(err3);
- if (dirExists)
- return makeLink(srcpath, dstpath);
- mkdir4.mkdirs(dir, (err4) => {
- if (err4)
- return callback(err4);
- makeLink(srcpath, dstpath);
- });
- });
- });
- });
- }
- function createLinkSync(srcpath, dstpath) {
- const destinationExists = fs8.existsSync(dstpath);
- if (destinationExists)
- return void 0;
- try {
- fs8.lstatSync(srcpath);
- } catch (err) {
- err.message = err.message.replace("lstat", "ensureLink");
- throw err;
+ [EMITEND]() {
+ if (this[EMITTED_END])
+ return;
+ this[EMITTED_END] = true;
+ this.readable = false;
+ if (this[ASYNC])
+ defer(() => this[EMITEND2]());
+ else
+ this[EMITEND2]();
}
- const dir = path10.dirname(dstpath);
- const dirExists = fs8.existsSync(dir);
- if (dirExists)
- return fs8.linkSync(srcpath, dstpath);
- mkdir4.mkdirsSync(dir);
- return fs8.linkSync(srcpath, dstpath);
- }
- module2.exports = {
- createLink: u(createLink),
- createLinkSync
- };
- }
-});
-
-// .yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/ensure/symlink-paths.js
-var require_symlink_paths = __commonJS({
- ".yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/ensure/symlink-paths.js"(exports, module2) {
- "use strict";
- var path10 = require("path");
- var fs8 = require_graceful_fs();
- var pathExists = require_path_exists().pathExists;
- function symlinkPaths(srcpath, dstpath, callback) {
- if (path10.isAbsolute(srcpath)) {
- return fs8.lstat(srcpath, (err) => {
- if (err) {
- err.message = err.message.replace("lstat", "ensureSymlink");
- return callback(err);
+ [EMITEND2]() {
+ if (this[DECODER]) {
+ const data = this[DECODER].end();
+ if (data) {
+ for (const p of this[PIPES]) {
+ p.dest.write(data);
+ }
+ super.emit("data", data);
}
- return callback(null, {
- "toCwd": srcpath,
- "toDst": srcpath
- });
+ }
+ for (const p of this[PIPES]) {
+ p.end();
+ }
+ const ret = super.emit("end");
+ this.removeAllListeners("end");
+ return ret;
+ }
+ // const all = await stream.collect()
+ collect() {
+ const buf = [];
+ if (!this[OBJECTMODE])
+ buf.dataLength = 0;
+ const p = this.promise();
+ this.on("data", (c) => {
+ buf.push(c);
+ if (!this[OBJECTMODE])
+ buf.dataLength += c.length;
});
- } else {
- const dstdir = path10.dirname(dstpath);
- const relativeToDst = path10.join(dstdir, srcpath);
- return pathExists(relativeToDst, (err, exists) => {
- if (err)
- return callback(err);
- if (exists) {
- return callback(null, {
- "toCwd": relativeToDst,
- "toDst": srcpath
- });
- } else {
- return fs8.lstat(srcpath, (err2) => {
- if (err2) {
- err2.message = err2.message.replace("lstat", "ensureSymlink");
- return callback(err2);
- }
- return callback(null, {
- "toCwd": srcpath,
- "toDst": path10.relative(dstdir, srcpath)
- });
- });
- }
+ return p.then(() => buf);
+ }
+ // const data = await stream.concat()
+ concat() {
+ return this[OBJECTMODE] ? Promise.reject(new Error("cannot concat in objectMode")) : this.collect().then(
+ (buf) => this[OBJECTMODE] ? Promise.reject(new Error("cannot concat in objectMode")) : this[ENCODING] ? buf.join("") : Buffer.concat(buf, buf.dataLength)
+ );
+ }
+ // stream.promise().then(() => done, er => emitted error)
+ promise() {
+ return new Promise((resolve, reject) => {
+ this.on(DESTROYED, () => reject(new Error("stream destroyed")));
+ this.on("error", (er) => reject(er));
+ this.on("end", () => resolve());
});
}
- }
- function symlinkPathsSync(srcpath, dstpath) {
- let exists;
- if (path10.isAbsolute(srcpath)) {
- exists = fs8.existsSync(srcpath);
- if (!exists)
- throw new Error("absolute srcpath does not exist");
- return {
- "toCwd": srcpath,
- "toDst": srcpath
+ // for await (let chunk of stream)
+ [ASYNCITERATOR]() {
+ let stopped = false;
+ const stop = () => {
+ this.pause();
+ stopped = true;
+ return Promise.resolve({ done: true });
};
- } else {
- const dstdir = path10.dirname(dstpath);
- const relativeToDst = path10.join(dstdir, srcpath);
- exists = fs8.existsSync(relativeToDst);
- if (exists) {
- return {
- "toCwd": relativeToDst,
- "toDst": srcpath
+ 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 = null;
+ let reject = null;
+ const onerr = (er) => {
+ this.removeListener("data", ondata);
+ this.removeListener("end", onend);
+ this.removeListener(DESTROYED, ondestroy);
+ stop();
+ reject(er);
};
- } else {
- exists = fs8.existsSync(srcpath);
- if (!exists)
- throw new Error("relative srcpath does not exist");
- return {
- "toCwd": srcpath,
- "toDst": path10.relative(dstdir, srcpath)
+ const ondata = (value) => {
+ this.removeListener("error", onerr);
+ this.removeListener("end", onend);
+ this.removeListener(DESTROYED, ondestroy);
+ this.pause();
+ resolve({ value, done: !!this[EOF] });
};
- }
+ const onend = () => {
+ this.removeListener("error", onerr);
+ this.removeListener("data", ondata);
+ this.removeListener(DESTROYED, ondestroy);
+ stop();
+ resolve({ done: true });
+ };
+ 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,
+ [ASYNCITERATOR]() {
+ return this;
+ }
+ };
}
- }
- module2.exports = {
- symlinkPaths,
- symlinkPathsSync
- };
- }
-});
-
-// .yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/ensure/symlink-type.js
-var require_symlink_type = __commonJS({
- ".yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/ensure/symlink-type.js"(exports, module2) {
- "use strict";
- var fs8 = require_graceful_fs();
- function symlinkType(srcpath, type, callback) {
- callback = typeof type === "function" ? type : callback;
- type = typeof type === "function" ? false : type;
- if (type)
- return callback(null, type);
- fs8.lstat(srcpath, (err, stats) => {
- if (err)
- return callback(null, "file");
- type = stats && stats.isDirectory() ? "dir" : "file";
- callback(null, type);
- });
- }
- function symlinkTypeSync(srcpath, type) {
- let stats;
- if (type)
- return type;
- try {
- stats = fs8.lstatSync(srcpath);
- } catch (e) {
- return "file";
+ // for (let chunk of stream)
+ [ITERATOR]() {
+ let stopped = false;
+ const stop = () => {
+ this.pause();
+ this.removeListener(ERROR, stop);
+ this.removeListener(DESTROYED, stop);
+ this.removeListener("end", stop);
+ stopped = true;
+ return { done: true };
+ };
+ const next = () => {
+ if (stopped)
+ return stop();
+ const value = this.read();
+ return value === null ? stop() : { value };
+ };
+ this.once("end", stop);
+ this.once(ERROR, stop);
+ this.once(DESTROYED, stop);
+ return {
+ next,
+ throw: stop,
+ return: stop,
+ [ITERATOR]() {
+ return this;
+ }
+ };
+ }
+ destroy(er) {
+ if (this[DESTROYED]) {
+ if (er)
+ this.emit("error", er);
+ else
+ this.emit(DESTROYED);
+ return this;
+ }
+ this[DESTROYED] = true;
+ this[BUFFER].length = 0;
+ this[BUFFERLENGTH] = 0;
+ if (typeof this.close === "function" && !this[CLOSED])
+ this.close();
+ if (er)
+ this.emit("error", er);
+ else
+ this.emit(DESTROYED);
+ return this;
+ }
+ static isStream(s) {
+ return !!s && (s instanceof _Minipass || s instanceof Stream || s instanceof EE && // readable
+ (typeof s.pipe === "function" || // writable
+ typeof s.write === "function" && typeof s.end === "function"));
}
- return stats && stats.isDirectory() ? "dir" : "file";
- }
- module2.exports = {
- symlinkType,
- symlinkTypeSync
};
+ exports.Minipass = Minipass;
}
});
-// .yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/ensure/symlink.js
-var require_symlink = __commonJS({
- ".yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/ensure/symlink.js"(exports, module2) {
- "use strict";
- var u = require_universalify().fromCallback;
- var path10 = require("path");
- var fs8 = require_graceful_fs();
- var _mkdirs = require_mkdirs2();
- var mkdirs = _mkdirs.mkdirs;
- var mkdirsSync = _mkdirs.mkdirsSync;
- var _symlinkPaths = require_symlink_paths();
- var symlinkPaths = _symlinkPaths.symlinkPaths;
- var symlinkPathsSync = _symlinkPaths.symlinkPathsSync;
- var _symlinkType = require_symlink_type();
- var symlinkType = _symlinkType.symlinkType;
- var symlinkTypeSync = _symlinkType.symlinkTypeSync;
- var pathExists = require_path_exists().pathExists;
- function createSymlink(srcpath, dstpath, type, callback) {
- callback = typeof type === "function" ? type : callback;
- type = typeof type === "function" ? false : type;
- pathExists(dstpath, (err, destinationExists) => {
- if (err)
- return callback(err);
- if (destinationExists)
- return callback(null);
- symlinkPaths(srcpath, dstpath, (err2, relative) => {
- if (err2)
- return callback(err2);
- srcpath = relative.toDst;
- symlinkType(relative.toCwd, type, (err3, type2) => {
- if (err3)
- return callback(err3);
- const dir = path10.dirname(dstpath);
- pathExists(dir, (err4, dirExists) => {
- if (err4)
- return callback(err4);
- if (dirExists)
- return fs8.symlink(srcpath, dstpath, type2, callback);
- mkdirs(dir, (err5) => {
- if (err5)
- return callback(err5);
- fs8.symlink(srcpath, dstpath, type2, callback);
- });
- });
- });
- });
- });
- }
- function createSymlinkSync(srcpath, dstpath, type) {
- const destinationExists = fs8.existsSync(dstpath);
- if (destinationExists)
- return void 0;
- const relative = symlinkPathsSync(srcpath, dstpath);
- srcpath = relative.toDst;
- type = symlinkTypeSync(relative.toCwd, type);
- const dir = path10.dirname(dstpath);
- const exists = fs8.existsSync(dir);
- if (exists)
- return fs8.symlinkSync(srcpath, dstpath, type);
- mkdirsSync(dir);
- return fs8.symlinkSync(srcpath, dstpath, type);
- }
- module2.exports = {
- createSymlink: u(createSymlink),
- createSymlinkSync
- };
+// .yarn/cache/minizlib-npm-2.1.2-ea89cd0cfb-64fae024e1.zip/node_modules/minizlib/constants.js
+var require_constants5 = __commonJS({
+ ".yarn/cache/minizlib-npm-2.1.2-ea89cd0cfb-64fae024e1.zip/node_modules/minizlib/constants.js"(exports, module2) {
+ var realZlibConstants = require("zlib").constants || /* istanbul ignore next */
+ { ZLIB_VERNUM: 4736 };
+ module2.exports = 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));
}
});
-// .yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/ensure/index.js
-var require_ensure = __commonJS({
- ".yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/ensure/index.js"(exports, module2) {
+// .yarn/cache/minipass-npm-3.3.6-b8d93a945b-a114746943.zip/node_modules/minipass/index.js
+var require_minipass2 = __commonJS({
+ ".yarn/cache/minipass-npm-3.3.6-b8d93a945b-a114746943.zip/node_modules/minipass/index.js"(exports, module2) {
"use strict";
- var file = require_file();
- var link = require_link();
- var symlink = require_symlink();
- module2.exports = {
- // file
- createFile: file.createFile,
- createFileSync: file.createFileSync,
- ensureFile: file.createFile,
- ensureFileSync: file.createFileSync,
- // link
- createLink: link.createLink,
- createLinkSync: link.createLinkSync,
- ensureLink: link.createLink,
- ensureLinkSync: link.createLinkSync,
- // symlink
- createSymlink: symlink.createSymlink,
- createSymlinkSync: symlink.createSymlinkSync,
- ensureSymlink: symlink.createSymlink,
- ensureSymlinkSync: symlink.createSymlinkSync
+ var proc = typeof process === "object" && process ? process : {
+ stdout: null,
+ stderr: null
};
- }
-});
-
-// .yarn/cache/jsonfile-npm-4.0.0-10ce3aea15-7dc94b628d.zip/node_modules/jsonfile/index.js
-var require_jsonfile = __commonJS({
- ".yarn/cache/jsonfile-npm-4.0.0-10ce3aea15-7dc94b628d.zip/node_modules/jsonfile/index.js"(exports, module2) {
- var _fs;
- try {
- _fs = require_graceful_fs();
- } catch (_) {
- _fs = require("fs");
- }
- function readFile(file, options, callback) {
- if (callback == null) {
- callback = options;
- options = {};
+ var EE = require("events");
+ var Stream = require("stream");
+ var SD = require("string_decoder").StringDecoder;
+ var EOF = Symbol("EOF");
+ var MAYBE_EMIT_END = Symbol("maybeEmitEnd");
+ var EMITTED_END = Symbol("emittedEnd");
+ var EMITTING_END = Symbol("emittingEnd");
+ var EMITTED_ERROR = Symbol("emittedError");
+ var CLOSED = Symbol("closed");
+ var READ = Symbol("read");
+ var FLUSH = Symbol("flush");
+ var FLUSHCHUNK = Symbol("flushChunk");
+ var ENCODING = Symbol("encoding");
+ var DECODER = Symbol("decoder");
+ var FLOWING = Symbol("flowing");
+ var PAUSED = Symbol("paused");
+ var RESUME = Symbol("resume");
+ var BUFFERLENGTH = Symbol("bufferLength");
+ var BUFFERPUSH = Symbol("bufferPush");
+ var BUFFERSHIFT = Symbol("bufferShift");
+ var OBJECTMODE = Symbol("objectMode");
+ var DESTROYED = Symbol("destroyed");
+ var EMITDATA = Symbol("emitData");
+ var EMITEND = Symbol("emitEnd");
+ var EMITEND2 = Symbol("emitEnd2");
+ var ASYNC = Symbol("async");
+ var defer = (fn2) => Promise.resolve().then(fn2);
+ var doIter = global._MP_NO_ITERATOR_SYMBOLS_ !== "1";
+ var ASYNCITERATOR = doIter && Symbol.asyncIterator || Symbol("asyncIterator not implemented");
+ var ITERATOR = doIter && Symbol.iterator || Symbol("iterator not implemented");
+ var isEndish = (ev) => ev === "end" || ev === "finish" || ev === "prefinish";
+ var isArrayBuffer = (b) => b instanceof ArrayBuffer || typeof b === "object" && b.constructor && b.constructor.name === "ArrayBuffer" && b.byteLength >= 0;
+ var isArrayBufferView = (b) => !Buffer.isBuffer(b) && ArrayBuffer.isView(b);
+ var Pipe = class {
+ constructor(src, dest, opts) {
+ this.src = src;
+ this.dest = dest;
+ this.opts = opts;
+ this.ondrain = () => src[RESUME]();
+ dest.on("drain", this.ondrain);
}
- if (typeof options === "string") {
- options = { encoding: options };
+ unpipe() {
+ this.dest.removeListener("drain", this.ondrain);
}
- options = options || {};
- var fs8 = options.fs || _fs;
- var shouldThrow = true;
- if ("throws" in options) {
- shouldThrow = options.throws;
- }
- fs8.readFile(file, options, function(err, data) {
- if (err)
- return callback(err);
- data = stripBom(data);
- var obj;
- try {
- obj = JSON.parse(data, options ? options.reviver : null);
- } catch (err2) {
- if (shouldThrow) {
- err2.message = file + ": " + err2.message;
- return callback(err2);
- } else {
- return callback(null, null);
- }
- }
- callback(null, obj);
- });
- }
- function readFileSync(file, options) {
- options = options || {};
- if (typeof options === "string") {
- options = { encoding: options };
+ // istanbul ignore next - only here for the prototype
+ proxyErrors() {
}
- var fs8 = options.fs || _fs;
- var shouldThrow = true;
- if ("throws" in options) {
- shouldThrow = options.throws;
+ end() {
+ this.unpipe();
+ if (this.opts.end)
+ this.dest.end();
}
- try {
- var content = fs8.readFileSync(file, options);
- content = stripBom(content);
- return JSON.parse(content, options.reviver);
- } catch (err) {
- if (shouldThrow) {
- err.message = file + ": " + err.message;
- throw err;
- } else {
- return null;
- }
- }
- }
- function stringify(obj, options) {
- var spaces;
- var EOL = "\n";
- if (typeof options === "object" && options !== null) {
- if (options.spaces) {
- spaces = options.spaces;
- }
- if (options.EOL) {
- EOL = options.EOL;
- }
- }
- var str = JSON.stringify(obj, options ? options.replacer : null, spaces);
- return str.replace(/\n/g, EOL) + EOL;
- }
- function writeFile(file, obj, options, callback) {
- if (callback == null) {
- callback = options;
- options = {};
- }
- options = options || {};
- var fs8 = options.fs || _fs;
- var str = "";
- try {
- str = stringify(obj, options);
- } catch (err) {
- if (callback)
- callback(err, null);
- return;
- }
- fs8.writeFile(file, str, options, callback);
- }
- function writeFileSync(file, obj, options) {
- options = options || {};
- var fs8 = options.fs || _fs;
- var str = stringify(obj, options);
- return fs8.writeFileSync(file, str, options);
- }
- function stripBom(content) {
- if (Buffer.isBuffer(content))
- content = content.toString("utf8");
- content = content.replace(/^\uFEFF/, "");
- return content;
- }
- var jsonfile = {
- readFile,
- readFileSync,
- writeFile,
- writeFileSync
- };
- module2.exports = jsonfile;
- }
-});
-
-// .yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/json/jsonfile.js
-var require_jsonfile2 = __commonJS({
- ".yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/json/jsonfile.js"(exports, module2) {
- "use strict";
- var u = require_universalify().fromCallback;
- var jsonFile = require_jsonfile();
- module2.exports = {
- // jsonfile exports
- readJson: u(jsonFile.readFile),
- readJsonSync: jsonFile.readFileSync,
- writeJson: u(jsonFile.writeFile),
- writeJsonSync: jsonFile.writeFileSync
- };
- }
-});
-
-// .yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/json/output-json.js
-var require_output_json = __commonJS({
- ".yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/json/output-json.js"(exports, module2) {
- "use strict";
- var path10 = require("path");
- var mkdir4 = require_mkdirs2();
- var pathExists = require_path_exists().pathExists;
- var jsonFile = require_jsonfile2();
- function outputJson(file, data, options, callback) {
- if (typeof options === "function") {
- callback = options;
- options = {};
- }
- const dir = path10.dirname(file);
- pathExists(dir, (err, itDoes) => {
- if (err)
- return callback(err);
- if (itDoes)
- return jsonFile.writeJson(file, data, options, callback);
- mkdir4.mkdirs(dir, (err2) => {
- if (err2)
- return callback(err2);
- jsonFile.writeJson(file, data, options, callback);
- });
- });
- }
- module2.exports = outputJson;
- }
-});
-
-// .yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/json/output-json-sync.js
-var require_output_json_sync = __commonJS({
- ".yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/json/output-json-sync.js"(exports, module2) {
- "use strict";
- var fs8 = require_graceful_fs();
- var path10 = require("path");
- var mkdir4 = require_mkdirs2();
- var jsonFile = require_jsonfile2();
- function outputJsonSync(file, data, options) {
- const dir = path10.dirname(file);
- if (!fs8.existsSync(dir)) {
- mkdir4.mkdirsSync(dir);
- }
- jsonFile.writeJsonSync(file, data, options);
- }
- module2.exports = outputJsonSync;
- }
-});
-
-// .yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/json/index.js
-var require_json = __commonJS({
- ".yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/json/index.js"(exports, module2) {
- "use strict";
- var u = require_universalify().fromCallback;
- var jsonFile = require_jsonfile2();
- jsonFile.outputJson = u(require_output_json());
- jsonFile.outputJsonSync = require_output_json_sync();
- jsonFile.outputJSON = jsonFile.outputJson;
- jsonFile.outputJSONSync = jsonFile.outputJsonSync;
- jsonFile.writeJSON = jsonFile.writeJson;
- jsonFile.writeJSONSync = jsonFile.writeJsonSync;
- jsonFile.readJSON = jsonFile.readJson;
- jsonFile.readJSONSync = jsonFile.readJsonSync;
- module2.exports = jsonFile;
- }
-});
-
-// .yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/move-sync/move-sync.js
-var require_move_sync = __commonJS({
- ".yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/move-sync/move-sync.js"(exports, module2) {
- "use strict";
- var fs8 = require_graceful_fs();
- var path10 = require("path");
- var copySync = require_copy_sync2().copySync;
- var removeSync = require_remove().removeSync;
- var mkdirpSync = require_mkdirs2().mkdirpSync;
- var stat = require_stat();
- function moveSync(src, dest, opts) {
- opts = opts || {};
- const overwrite = opts.overwrite || opts.clobber || false;
- const { srcStat } = stat.checkPathsSync(src, dest, "move");
- stat.checkParentPathsSync(src, srcStat, dest, "move");
- mkdirpSync(path10.dirname(dest));
- return doRename(src, dest, overwrite);
- }
- function doRename(src, dest, overwrite) {
- if (overwrite) {
- removeSync(dest);
- return rename(src, dest, overwrite);
- }
- if (fs8.existsSync(dest))
- throw new Error("dest already exists.");
- return rename(src, dest, overwrite);
- }
- function rename(src, dest, overwrite) {
- try {
- fs8.renameSync(src, dest);
- } catch (err) {
- if (err.code !== "EXDEV")
- throw err;
- return moveAcrossDevice(src, dest, overwrite);
- }
- }
- function moveAcrossDevice(src, dest, overwrite) {
- const opts = {
- overwrite,
- errorOnExist: true
- };
- copySync(src, dest, opts);
- return removeSync(src);
- }
- module2.exports = moveSync;
- }
-});
-
-// .yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/move-sync/index.js
-var require_move_sync2 = __commonJS({
- ".yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/move-sync/index.js"(exports, module2) {
- "use strict";
- module2.exports = {
- moveSync: require_move_sync()
- };
- }
-});
-
-// .yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/move/move.js
-var require_move = __commonJS({
- ".yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/move/move.js"(exports, module2) {
- "use strict";
- var fs8 = require_graceful_fs();
- var path10 = require("path");
- var copy = require_copy2().copy;
- var remove = require_remove().remove;
- var mkdirp = require_mkdirs2().mkdirp;
- var pathExists = require_path_exists().pathExists;
- var stat = require_stat();
- function move(src, dest, opts, cb) {
- if (typeof opts === "function") {
- cb = opts;
- opts = {};
- }
- const overwrite = opts.overwrite || opts.clobber || false;
- stat.checkPaths(src, dest, "move", (err, stats) => {
- if (err)
- return cb(err);
- const { srcStat } = stats;
- stat.checkParentPaths(src, srcStat, dest, "move", (err2) => {
- if (err2)
- return cb(err2);
- mkdirp(path10.dirname(dest), (err3) => {
- if (err3)
- return cb(err3);
- return doRename(src, dest, overwrite, cb);
- });
- });
- });
- }
- function doRename(src, dest, overwrite, cb) {
- if (overwrite) {
- return remove(dest, (err) => {
- if (err)
- return cb(err);
- return rename(src, dest, overwrite, cb);
- });
- }
- pathExists(dest, (err, destExists) => {
- if (err)
- return cb(err);
- if (destExists)
- return cb(new Error("dest already exists."));
- return rename(src, dest, overwrite, cb);
- });
- }
- function rename(src, dest, overwrite, cb) {
- fs8.rename(src, dest, (err) => {
- if (!err)
- return cb();
- if (err.code !== "EXDEV")
- return cb(err);
- return moveAcrossDevice(src, dest, overwrite, cb);
- });
- }
- function moveAcrossDevice(src, dest, overwrite, cb) {
- const opts = {
- overwrite,
- errorOnExist: true
- };
- copy(src, dest, opts, (err) => {
- if (err)
- return cb(err);
- return remove(src, cb);
- });
- }
- module2.exports = move;
- }
-});
-
-// .yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/move/index.js
-var require_move2 = __commonJS({
- ".yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/move/index.js"(exports, module2) {
- "use strict";
- var u = require_universalify().fromCallback;
- module2.exports = {
- move: u(require_move())
- };
- }
-});
-
-// .yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/output/index.js
-var require_output = __commonJS({
- ".yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/output/index.js"(exports, module2) {
- "use strict";
- var u = require_universalify().fromCallback;
- var fs8 = require_graceful_fs();
- var path10 = require("path");
- var mkdir4 = require_mkdirs2();
- var pathExists = require_path_exists().pathExists;
- function outputFile(file, data, encoding, callback) {
- if (typeof encoding === "function") {
- callback = encoding;
- encoding = "utf8";
- }
- const dir = path10.dirname(file);
- pathExists(dir, (err, itDoes) => {
- if (err)
- return callback(err);
- if (itDoes)
- return fs8.writeFile(file, data, encoding, callback);
- mkdir4.mkdirs(dir, (err2) => {
- if (err2)
- return callback(err2);
- fs8.writeFile(file, data, encoding, callback);
- });
- });
- }
- function outputFileSync(file, ...args) {
- const dir = path10.dirname(file);
- if (fs8.existsSync(dir)) {
- return fs8.writeFileSync(file, ...args);
- }
- mkdir4.mkdirsSync(dir);
- fs8.writeFileSync(file, ...args);
- }
- module2.exports = {
- outputFile: u(outputFile),
- outputFileSync
};
- }
-});
-
-// .yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/index.js
-var require_lib = __commonJS({
- ".yarn/cache/fs-extra-npm-8.1.0-197473387f-259f7b814d.zip/node_modules/fs-extra/lib/index.js"(exports, module2) {
- "use strict";
- module2.exports = Object.assign(
- {},
- // Export promiseified graceful-fs:
- require_fs(),
- // Export extra methods:
- require_copy_sync2(),
- require_copy2(),
- require_empty(),
- require_ensure(),
- require_json(),
- require_mkdirs2(),
- require_move_sync2(),
- require_move2(),
- require_output(),
- require_path_exists(),
- require_remove()
- );
- var fs8 = require("fs");
- if (Object.getOwnPropertyDescriptor(fs8, "promises")) {
- Object.defineProperty(module2.exports, "promises", {
- get() {
- return fs8.promises;
- }
- });
- }
- }
-});
-
-// .yarn/cache/get-uri-npm-6.0.2-b89b919843-50ef3e0b76.zip/node_modules/get-uri/dist/notfound.js
-var require_notfound = __commonJS({
- ".yarn/cache/get-uri-npm-6.0.2-b89b919843-50ef3e0b76.zip/node_modules/get-uri/dist/notfound.js"(exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var NotFoundError = class extends Error {
- constructor(message) {
- super(message || "File does not exist at the specified endpoint");
- this.code = "ENOTFOUND";
+ var PipeProxyErrors = class extends Pipe {
+ unpipe() {
+ this.src.removeListener("error", this.proxyErrors);
+ super.unpipe();
}
- };
- exports.default = NotFoundError;
- }
-});
-
-// .yarn/cache/get-uri-npm-6.0.2-b89b919843-50ef3e0b76.zip/node_modules/get-uri/dist/file.js
-var require_file2 = __commonJS({
- ".yarn/cache/get-uri-npm-6.0.2-b89b919843-50ef3e0b76.zip/node_modules/get-uri/dist/file.js"(exports) {
- "use strict";
- var __importDefault2 = exports && exports.__importDefault || function(mod) {
- return mod && mod.__esModule ? mod : { "default": mod };
- };
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.file = void 0;
- var debug_1 = __importDefault2(require_src2());
- var fs_1 = require("fs");
- var fs_extra_1 = require_lib();
- var notfound_1 = __importDefault2(require_notfound());
- var notmodified_1 = __importDefault2(require_notmodified());
- var url_1 = require("url");
- var debug2 = (0, debug_1.default)("get-uri:file");
- var file = async ({ href: uri }, opts = {}) => {
- const {
- cache,
- flags = "r",
- mode = 438
- // =0666
- } = opts;
- try {
- const filepath = (0, url_1.fileURLToPath)(uri);
- debug2("Normalized pathname: %o", filepath);
- const fd = await (0, fs_extra_1.open)(filepath, flags, mode);
- const stat = await (0, fs_extra_1.fstat)(fd);
- if (cache && cache.stat && stat && isNotModified(cache.stat, stat)) {
- throw new notmodified_1.default();
- }
- const rs = (0, fs_1.createReadStream)(null, {
- autoClose: true,
- ...opts,
- fd
- });
- rs.stat = stat;
- return rs;
- } catch (err) {
- if (err.code === "ENOENT") {
- throw new notfound_1.default();
- }
- throw err;
+ constructor(src, dest, opts) {
+ super(src, dest, opts);
+ this.proxyErrors = (er) => dest.emit("error", er);
+ src.on("error", this.proxyErrors);
}
};
- exports.file = file;
- function isNotModified(prev, curr) {
- return +prev.mtime === +curr.mtime;
- }
- }
-});
-
-// .yarn/cache/basic-ftp-npm-5.0.4-5950651e19-0bd580652a.zip/node_modules/basic-ftp/dist/parseControlResponse.js
-var require_parseControlResponse = __commonJS({
- ".yarn/cache/basic-ftp-npm-5.0.4-5950651e19-0bd580652a.zip/node_modules/basic-ftp/dist/parseControlResponse.js"(exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.positiveIntermediate = exports.positiveCompletion = exports.isMultiline = exports.isSingleLine = exports.parseControlResponse = void 0;
- var LF = "\n";
- function parseControlResponse(text) {
- const lines = text.split(/\r?\n/).filter(isNotBlank);
- const messages = [];
- let startAt = 0;
- let tokenRegex;
- for (let i = 0; i < lines.length; i++) {
- const line = lines[i];
- if (!tokenRegex) {
- if (isMultiline(line)) {
- const token = line.substr(0, 3);
- tokenRegex = new RegExp(`^${token}(?:$| )`);
- startAt = i;
- } else if (isSingleLine(line)) {
- messages.push(line);
- }
- } else if (tokenRegex.test(line)) {
- tokenRegex = void 0;
- messages.push(lines.slice(startAt, i + 1).join(LF));
- }
- }
- const rest = tokenRegex ? lines.slice(startAt).join(LF) + LF : "";
- return { messages, rest };
- }
- exports.parseControlResponse = parseControlResponse;
- function isSingleLine(line) {
- return /^\d\d\d(?:$| )/.test(line);
- }
- exports.isSingleLine = isSingleLine;
- function isMultiline(line) {
- return /^\d\d\d-/.test(line);
- }
- exports.isMultiline = isMultiline;
- function positiveCompletion(code) {
- return code >= 200 && code < 300;
- }
- exports.positiveCompletion = positiveCompletion;
- function positiveIntermediate(code) {
- return code >= 300 && code < 400;
- }
- exports.positiveIntermediate = positiveIntermediate;
- function isNotBlank(str) {
- return str.trim() !== "";
- }
- }
-});
-
-// .yarn/cache/basic-ftp-npm-5.0.4-5950651e19-0bd580652a.zip/node_modules/basic-ftp/dist/FtpContext.js
-var require_FtpContext = __commonJS({
- ".yarn/cache/basic-ftp-npm-5.0.4-5950651e19-0bd580652a.zip/node_modules/basic-ftp/dist/FtpContext.js"(exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.FTPContext = exports.FTPError = void 0;
- var net_1 = require("net");
- var parseControlResponse_1 = require_parseControlResponse();
- var FTPError = class extends Error {
- constructor(res) {
- super(res.message);
- this.name = this.constructor.name;
- this.code = res.code;
+ module2.exports = class Minipass extends Stream {
+ constructor(options) {
+ super();
+ this[FLOWING] = false;
+ this[PAUSED] = false;
+ this.pipes = [];
+ this.buffer = [];
+ this[OBJECTMODE] = options && options.objectMode || false;
+ if (this[OBJECTMODE])
+ this[ENCODING] = null;
+ else
+ this[ENCODING] = options && options.encoding || null;
+ if (this[ENCODING] === "buffer")
+ this[ENCODING] = null;
+ this[ASYNC] = options && !!options.async || false;
+ this[DECODER] = this[ENCODING] ? new SD(this[ENCODING]) : null;
+ this[EOF] = false;
+ this[EMITTED_END] = false;
+ this[EMITTING_END] = false;
+ this[CLOSED] = false;
+ this[EMITTED_ERROR] = null;
+ this.writable = true;
+ this.readable = true;
+ this[BUFFERLENGTH] = 0;
+ this[DESTROYED] = false;
}
- };
- exports.FTPError = FTPError;
- function doNothing() {
- }
- var FTPContext = class {
- /**
- * Instantiate an FTP context.
- *
- * @param timeout - Timeout in milliseconds to apply to control and data connections. Use 0 for no timeout.
- * @param encoding - Encoding to use for control connection. UTF-8 by default. Use "latin1" for older servers.
- */
- constructor(timeout = 0, encoding = "utf8") {
- this.timeout = timeout;
- this.verbose = false;
- this.ipFamily = void 0;
- this.tlsOptions = {};
- this._partialResponse = "";
- this._encoding = encoding;
- this._socket = this.socket = this._newSocket();
- this._dataSocket = void 0;
+ get bufferLength() {
+ return this[BUFFERLENGTH];
}
- /**
- * Close the context.
- */
- close() {
- const message = this._task ? "User closed client during task" : "User closed client";
- const err = new Error(message);
- this.closeWithError(err);
+ get encoding() {
+ return this[ENCODING];
}
- /**
- * Close the context with an error.
- */
- closeWithError(err) {
- if (this._closingError) {
- return;
+ set encoding(enc) {
+ if (this[OBJECTMODE])
+ throw new Error("cannot set encoding in objectMode");
+ if (this[ENCODING] && enc !== this[ENCODING] && (this[DECODER] && this[DECODER].lastNeed || this[BUFFERLENGTH]))
+ throw new Error("cannot change encoding");
+ if (this[ENCODING] !== enc) {
+ this[DECODER] = enc ? new SD(enc) : null;
+ if (this.buffer.length)
+ this.buffer = this.buffer.map((chunk) => this[DECODER].write(chunk));
}
- this._closingError = err;
- this._closeControlSocket();
- this._closeSocket(this._dataSocket);
- this._passToHandler(err);
- this._stopTrackingTask();
+ this[ENCODING] = enc;
}
- /**
- * Returns true if this context has been closed or hasn't been connected yet. You can reopen it with `access`.
- */
- get closed() {
- return this.socket.remoteAddress === void 0 || this._closingError !== void 0;
+ setEncoding(enc) {
+ this.encoding = enc;
}
- /**
- * Reset this contex and all of its state.
- */
- reset() {
- this.socket = this._newSocket();
+ get objectMode() {
+ return this[OBJECTMODE];
}
- /**
- * Get the FTP control socket.
- */
- get socket() {
- return this._socket;
+ set objectMode(om) {
+ this[OBJECTMODE] = this[OBJECTMODE] || !!om;
}
- /**
- * Set the socket for the control connection. This will only close the current control socket
- * if the new one is not an upgrade to the current one.
- */
- set socket(socket) {
- this.dataSocket = void 0;
- this.tlsOptions = {};
- this._partialResponse = "";
- if (this._socket) {
- const newSocketUpgradesExisting = socket.localPort === this._socket.localPort;
- if (newSocketUpgradesExisting) {
- this._removeSocketListeners(this.socket);
- } else {
- this._closeControlSocket();
- }
- }
- if (socket) {
- this._closingError = void 0;
- socket.setTimeout(0);
- socket.setEncoding(this._encoding);
- socket.setKeepAlive(true);
- socket.on("data", (data) => this._onControlSocketData(data));
- socket.on("end", () => this.closeWithError(new Error("Server sent FIN packet unexpectedly, closing connection.")));
- socket.on("close", (hadError) => {
- if (!hadError)
- this.closeWithError(new Error("Server closed connection unexpectedly."));
- });
- this._setupDefaultErrorHandlers(socket, "control socket");
- }
- this._socket = socket;
+ get ["async"]() {
+ return this[ASYNC];
}
- /**
- * Get the current FTP data connection if present.
- */
- get dataSocket() {
- return this._dataSocket;
+ set ["async"](a) {
+ this[ASYNC] = this[ASYNC] || !!a;
}
- /**
- * Set the socket for the data connection. This will automatically close the former data socket.
- */
- set dataSocket(socket) {
- this._closeSocket(this._dataSocket);
- if (socket) {
- socket.setTimeout(0);
- this._setupDefaultErrorHandlers(socket, "data socket");
+ write(chunk, encoding, cb) {
+ 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;
}
- this._dataSocket = socket;
- }
- /**
- * Get the currently used encoding.
- */
- get encoding() {
- return this._encoding;
- }
- /**
- * Set the encoding used for the control socket.
- *
- * See https://nodejs.org/api/buffer.html#buffer_buffers_and_character_encodings for what encodings
- * are supported by Node.
- */
- set encoding(encoding) {
- this._encoding = encoding;
- if (this.socket) {
- this.socket.setEncoding(encoding);
+ if (typeof encoding === "function")
+ cb = encoding, encoding = "utf8";
+ if (!encoding)
+ encoding = "utf8";
+ const fn2 = this[ASYNC] ? defer : (f) => f();
+ if (!this[OBJECTMODE] && !Buffer.isBuffer(chunk)) {
+ if (isArrayBufferView(chunk))
+ chunk = Buffer.from(chunk.buffer, chunk.byteOffset, chunk.byteLength);
+ else if (isArrayBuffer(chunk))
+ chunk = Buffer.from(chunk);
+ else if (typeof chunk !== "string")
+ this.objectMode = true;
}
- }
- /**
- * Send an FTP command without waiting for or handling the result.
- */
- send(command) {
- const containsPassword = command.startsWith("PASS");
- const message = containsPassword ? "> PASS ###" : `> ${command}`;
- this.log(message);
- this._socket.write(command + "\r\n", this.encoding);
- }
- /**
- * Send an FTP command and handle the first response. Use this if you have a simple
- * request-response situation.
- */
- request(command) {
- return this.handle(command, (res, task) => {
- if (res instanceof Error) {
- task.reject(res);
- } else {
- task.resolve(res);
- }
- });
- }
- /**
- * Send an FTP command and handle any response until you resolve/reject. Use this if you expect multiple responses
- * to a request. This returns a Promise that will hold whatever the response handler passed on when resolving/rejecting its task.
- */
- handle(command, responseHandler) {
- if (this._task) {
- const err = new Error("User launched a task while another one is still running. Forgot to use 'await' or '.then()'?");
- err.stack += `
-Running task launched at: ${this._task.stack}`;
- this.closeWithError(err);
- }
- return new Promise((resolveTask, rejectTask) => {
- this._task = {
- stack: new Error().stack || "Unknown call stack",
- responseHandler,
- resolver: {
- resolve: (arg) => {
- this._stopTrackingTask();
- resolveTask(arg);
- },
- reject: (err) => {
- this._stopTrackingTask();
- rejectTask(err);
- }
- }
- };
- if (this._closingError) {
- const err = new Error(`Client is closed because ${this._closingError.message}`);
- err.stack += `
-Closing reason: ${this._closingError.stack}`;
- err.code = this._closingError.code !== void 0 ? this._closingError.code : "0";
- this._passToHandler(err);
- return;
- }
- this.socket.setTimeout(this.timeout);
- if (command) {
- this.send(command);
- }
- });
- }
- /**
- * Log message if set to be verbose.
- */
- log(message) {
- if (this.verbose) {
- console.log(message);
+ 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;
}
- }
- /**
- * Return true if the control socket is using TLS. This does not mean that a session
- * has already been negotiated.
- */
- get hasTLS() {
- return "encrypted" in this._socket;
- }
- /**
- * Removes reference to current task and handler. This won't resolve or reject the task.
- * @protected
- */
- _stopTrackingTask() {
- this.socket.setTimeout(0);
- this._task = void 0;
- }
- /**
- * Handle incoming data on the control socket. The chunk is going to be of type `string`
- * because we let `socket` handle encoding with `setEncoding`.
- * @protected
- */
- _onControlSocketData(chunk) {
- this.log(`< ${chunk}`);
- const completeResponse = this._partialResponse + chunk;
- const parsed = (0, parseControlResponse_1.parseControlResponse)(completeResponse);
- this._partialResponse = parsed.rest;
- for (const message of parsed.messages) {
- const code = parseInt(message.substr(0, 3), 10);
- const response = { code, message };
- const err = code >= 400 ? new FTPError(response) : void 0;
- this._passToHandler(err ? err : response);
+ if (!chunk.length) {
+ if (this[BUFFERLENGTH] !== 0)
+ this.emit("readable");
+ if (cb)
+ fn2(cb);
+ return this.flowing;
}
- }
- /**
- * Send the current handler a response. This is usually a control socket response
- * or a socket event, like an error or timeout.
- * @protected
- */
- _passToHandler(response) {
- if (this._task) {
- this._task.responseHandler(response, this._task.resolver);
+ 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;
}
- /**
- * Setup all error handlers for a socket.
- * @protected
- */
- _setupDefaultErrorHandlers(socket, identifier) {
- socket.once("error", (error) => {
- error.message += ` (${identifier})`;
- this.closeWithError(error);
- });
- socket.once("close", (hadError) => {
- if (hadError) {
- this.closeWithError(new Error(`Socket closed due to transmission error (${identifier})`));
- }
- });
- socket.once("timeout", () => {
- socket.destroy();
- this.closeWithError(new Error(`Timeout (${identifier})`));
- });
- }
- /**
- * Close the control socket. Sends QUIT, then FIN, and ignores any response or error.
- */
- _closeControlSocket() {
- this._removeSocketListeners(this._socket);
- this._socket.on("error", doNothing);
- this.send("QUIT");
- this._closeSocket(this._socket);
+ read(n) {
+ if (this[DESTROYED])
+ return null;
+ if (this[BUFFERLENGTH] === 0 || n === 0 || n > this[BUFFERLENGTH]) {
+ this[MAYBE_EMIT_END]();
+ return null;
+ }
+ if (this[OBJECTMODE])
+ n = null;
+ if (this.buffer.length > 1 && !this[OBJECTMODE]) {
+ if (this.encoding)
+ this.buffer = [this.buffer.join("")];
+ else
+ this.buffer = [Buffer.concat(this.buffer, this[BUFFERLENGTH])];
+ }
+ const ret = this[READ](n || null, this.buffer[0]);
+ this[MAYBE_EMIT_END]();
+ return ret;
}
- /**
- * Close a socket. Sends FIN and ignores any error.
- * @protected
- */
- _closeSocket(socket) {
- if (socket) {
- this._removeSocketListeners(socket);
- socket.on("error", doNothing);
- socket.on("timeout", () => socket.destroy());
- socket.setTimeout(this.timeout);
- socket.end();
+ [READ](n, chunk) {
+ if (n === chunk.length || n === null)
+ this[BUFFERSHIFT]();
+ else {
+ this.buffer[0] = chunk.slice(n);
+ chunk = chunk.slice(0, n);
+ this[BUFFERLENGTH] -= n;
}
+ this.emit("data", chunk);
+ if (!this.buffer.length && !this[EOF])
+ this.emit("drain");
+ return chunk;
}
- /**
- * Remove all default listeners for socket.
- * @protected
- */
- _removeSocketListeners(socket) {
- socket.removeAllListeners();
- socket.removeAllListeners("timeout");
- socket.removeAllListeners("data");
- socket.removeAllListeners("end");
- socket.removeAllListeners("error");
- socket.removeAllListeners("close");
- socket.removeAllListeners("connect");
+ end(chunk, encoding, cb) {
+ if (typeof chunk === "function")
+ cb = chunk, chunk = null;
+ if (typeof encoding === "function")
+ cb = encoding, encoding = "utf8";
+ if (chunk)
+ 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;
}
- /**
- * Provide a new socket instance.
- *
- * Internal use only, replaced for unit tests.
- */
- _newSocket() {
- return new net_1.Socket();
+ // don't let the internal resume be overwritten
+ [RESUME]() {
+ if (this[DESTROYED])
+ return;
+ 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");
}
- };
- exports.FTPContext = FTPContext;
- }
-});
-
-// .yarn/cache/basic-ftp-npm-5.0.4-5950651e19-0bd580652a.zip/node_modules/basic-ftp/dist/FileInfo.js
-var require_FileInfo = __commonJS({
- ".yarn/cache/basic-ftp-npm-5.0.4-5950651e19-0bd580652a.zip/node_modules/basic-ftp/dist/FileInfo.js"(exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.FileInfo = exports.FileType = void 0;
- var FileType;
- (function(FileType2) {
- FileType2[FileType2["Unknown"] = 0] = "Unknown";
- FileType2[FileType2["File"] = 1] = "File";
- FileType2[FileType2["Directory"] = 2] = "Directory";
- FileType2[FileType2["SymbolicLink"] = 3] = "SymbolicLink";
- })(FileType || (exports.FileType = FileType = {}));
- var FileInfo = class {
- constructor(name) {
- this.name = name;
- this.type = FileType.Unknown;
- this.size = 0;
- this.rawModifiedAt = "";
- this.modifiedAt = void 0;
- this.permissions = void 0;
- this.hardLinkCount = void 0;
- this.link = void 0;
- this.group = void 0;
- this.user = void 0;
- this.uniqueID = void 0;
- this.name = name;
- }
- get isDirectory() {
- return this.type === FileType.Directory;
- }
- get isSymbolicLink() {
- return this.type === FileType.SymbolicLink;
- }
- get isFile() {
- return this.type === FileType.File;
+ resume() {
+ return this[RESUME]();
}
- /**
- * Deprecated, legacy API. Use `rawModifiedAt` instead.
- * @deprecated
- */
- get date() {
- return this.rawModifiedAt;
+ pause() {
+ this[FLOWING] = false;
+ this[PAUSED] = true;
}
- set date(rawModifiedAt) {
- this.rawModifiedAt = rawModifiedAt;
+ get destroyed() {
+ return this[DESTROYED];
}
- };
- exports.FileInfo = FileInfo;
- FileInfo.UnixPermission = {
- Read: 4,
- Write: 2,
- Execute: 1
- };
- }
-});
-
-// .yarn/cache/basic-ftp-npm-5.0.4-5950651e19-0bd580652a.zip/node_modules/basic-ftp/dist/parseListDOS.js
-var require_parseListDOS = __commonJS({
- ".yarn/cache/basic-ftp-npm-5.0.4-5950651e19-0bd580652a.zip/node_modules/basic-ftp/dist/parseListDOS.js"(exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.transformList = exports.parseLine = exports.testLine = void 0;
- var FileInfo_1 = require_FileInfo();
- var RE_LINE = new RegExp(
- "(\\S+)\\s+(\\S+)\\s+(?:()|([0-9]+))\\s+(\\S.*)"
- // First non-space followed by rest of line (name)
- );
- function testLine(line) {
- return /^\d{2}/.test(line) && RE_LINE.test(line);
- }
- exports.testLine = testLine;
- function parseLine(line) {
- const groups = line.match(RE_LINE);
- if (groups === null) {
- return void 0;
+ get flowing() {
+ return this[FLOWING];
}
- const name = groups[5];
- if (name === "." || name === "..") {
- return void 0;
+ get paused() {
+ return this[PAUSED];
}
- const file = new FileInfo_1.FileInfo(name);
- const fileType = groups[3];
- if (fileType === "") {
- file.type = FileInfo_1.FileType.Directory;
- file.size = 0;
- } else {
- file.type = FileInfo_1.FileType.File;
- file.size = parseInt(groups[4], 10);
+ [BUFFERPUSH](chunk) {
+ if (this[OBJECTMODE])
+ this[BUFFERLENGTH] += 1;
+ else
+ this[BUFFERLENGTH] += chunk.length;
+ this.buffer.push(chunk);
}
- file.rawModifiedAt = groups[1] + " " + groups[2];
- return file;
- }
- exports.parseLine = parseLine;
- function transformList(files) {
- return files;
- }
- exports.transformList = transformList;
- }
-});
-
-// .yarn/cache/basic-ftp-npm-5.0.4-5950651e19-0bd580652a.zip/node_modules/basic-ftp/dist/parseListUnix.js
-var require_parseListUnix = __commonJS({
- ".yarn/cache/basic-ftp-npm-5.0.4-5950651e19-0bd580652a.zip/node_modules/basic-ftp/dist/parseListUnix.js"(exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.transformList = exports.parseLine = exports.testLine = void 0;
- var FileInfo_1 = require_FileInfo();
- var JA_MONTH = "\u6708";
- var JA_DAY = "\u65E5";
- var JA_YEAR = "\u5E74";
- var RE_LINE = new RegExp("([bcdelfmpSs-])(((r|-)(w|-)([xsStTL-]))((r|-)(w|-)([xsStTL-]))((r|-)(w|-)([xsStTL-]?)))\\+?\\s*(\\d+)\\s+(?:(\\S+(?:\\s\\S+)*?)\\s+)?(?:(\\S+(?:\\s\\S+)*)\\s+)?(\\d+(?:,\\s*\\d+)?)\\s+((?:\\d+[-/]\\d+[-/]\\d+)|(?:\\S{3}\\s+\\d{1,2})|(?:\\d{1,2}\\s+\\S{3})|(?:\\d{1,2}" + JA_MONTH + "\\s+\\d{1,2}" + JA_DAY + "))\\s+((?:\\d+(?::\\d+)?)|(?:\\d{4}" + JA_YEAR + "))\\s(.*)");
- function testLine(line) {
- return RE_LINE.test(line);
- }
- exports.testLine = testLine;
- function parseLine(line) {
- const groups = line.match(RE_LINE);
- if (groups === null) {
- return void 0;
+ [BUFFERSHIFT]() {
+ if (this.buffer.length) {
+ if (this[OBJECTMODE])
+ this[BUFFERLENGTH] -= 1;
+ else
+ this[BUFFERLENGTH] -= this.buffer[0].length;
+ }
+ return this.buffer.shift();
}
- const name = groups[21];
- if (name === "." || name === "..") {
- return void 0;
+ [FLUSH](noDrain) {
+ do {
+ } while (this[FLUSHCHUNK](this[BUFFERSHIFT]()));
+ if (!noDrain && !this.buffer.length && !this[EOF])
+ this.emit("drain");
}
- const file = new FileInfo_1.FileInfo(name);
- file.size = parseInt(groups[18], 10);
- file.user = groups[16];
- file.group = groups[17];
- file.hardLinkCount = parseInt(groups[15], 10);
- file.rawModifiedAt = groups[19] + " " + groups[20];
- file.permissions = {
- user: parseMode(groups[4], groups[5], groups[6]),
- group: parseMode(groups[8], groups[9], groups[10]),
- world: parseMode(groups[12], groups[13], groups[14])
- };
- switch (groups[1].charAt(0)) {
- case "d":
- file.type = FileInfo_1.FileType.Directory;
- break;
- case "e":
- file.type = FileInfo_1.FileType.SymbolicLink;
- break;
- case "l":
- file.type = FileInfo_1.FileType.SymbolicLink;
- break;
- case "b":
- case "c":
- file.type = FileInfo_1.FileType.File;
- break;
- case "f":
- case "-":
- file.type = FileInfo_1.FileType.File;
- break;
- default:
- file.type = FileInfo_1.FileType.Unknown;
+ [FLUSHCHUNK](chunk) {
+ return chunk ? (this.emit("data", chunk), this.flowing) : false;
}
- if (file.isSymbolicLink) {
- const end = name.indexOf(" -> ");
- if (end !== -1) {
- file.name = name.substring(0, end);
- file.link = name.substring(end + 4);
+ pipe(dest, opts) {
+ if (this[DESTROYED])
+ return;
+ 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;
}
- return file;
- }
- exports.parseLine = parseLine;
- function transformList(files) {
- return files;
- }
- exports.transformList = transformList;
- function parseMode(r, w, x) {
- let value = 0;
- if (r !== "-") {
- value += FileInfo_1.FileInfo.UnixPermission.Read;
+ unpipe(dest) {
+ const p = this.pipes.find((p2) => p2.dest === dest);
+ if (p) {
+ this.pipes.splice(this.pipes.indexOf(p), 1);
+ p.unpipe();
+ }
}
- if (w !== "-") {
- value += FileInfo_1.FileInfo.UnixPermission.Write;
+ addListener(ev, fn2) {
+ return this.on(ev, fn2);
}
- const execToken = x.charAt(0);
- if (execToken !== "-" && execToken.toUpperCase() !== execToken) {
- value += FileInfo_1.FileInfo.UnixPermission.Execute;
+ on(ev, fn2) {
+ const ret = super.on(ev, fn2);
+ if (ev === "data" && !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]) {
+ if (this[ASYNC])
+ defer(() => fn2.call(this, this[EMITTED_ERROR]));
+ else
+ fn2.call(this, this[EMITTED_ERROR]);
+ }
+ return ret;
}
- return value;
- }
- }
-});
-
-// .yarn/cache/basic-ftp-npm-5.0.4-5950651e19-0bd580652a.zip/node_modules/basic-ftp/dist/parseListMLSD.js
-var require_parseListMLSD = __commonJS({
- ".yarn/cache/basic-ftp-npm-5.0.4-5950651e19-0bd580652a.zip/node_modules/basic-ftp/dist/parseListMLSD.js"(exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.parseMLSxDate = exports.transformList = exports.parseLine = exports.testLine = void 0;
- var FileInfo_1 = require_FileInfo();
- function parseSize(value, info) {
- info.size = parseInt(value, 10);
- }
- var factHandlersByName = {
- "size": parseSize,
- // File size
- "sizd": parseSize,
- // Directory size
- "unique": (value, info) => {
- info.uniqueID = value;
- },
- "modify": (value, info) => {
- info.modifiedAt = parseMLSxDate(value);
- info.rawModifiedAt = info.modifiedAt.toISOString();
- },
- "type": (value, info) => {
- if (value.startsWith("OS.unix=slink")) {
- info.type = FileInfo_1.FileType.SymbolicLink;
- info.link = value.substr(value.indexOf(":") + 1);
- return 1;
- }
- switch (value) {
- case "file":
- info.type = FileInfo_1.FileType.File;
- break;
- case "dir":
- info.type = FileInfo_1.FileType.Directory;
- break;
- case "OS.unix=symlink":
- info.type = FileInfo_1.FileType.SymbolicLink;
- break;
- case "cdir":
- case "pdir":
- return 2;
- default:
- info.type = FileInfo_1.FileType.Unknown;
- }
- return 1;
- },
- "unix.mode": (value, info) => {
- const digits = value.substr(-3);
- info.permissions = {
- user: parseInt(digits[0], 10),
- group: parseInt(digits[1], 10),
- world: parseInt(digits[2], 10)
- };
- },
- "unix.ownername": (value, info) => {
- info.user = value;
- },
- "unix.owner": (value, info) => {
- if (info.user === void 0)
- info.user = value;
- },
- get "unix.uid"() {
- return this["unix.owner"];
- },
- "unix.groupname": (value, info) => {
- info.group = value;
- },
- "unix.group": (value, info) => {
- if (info.group === void 0)
- info.group = value;
- },
- get "unix.gid"() {
- return this["unix.group"];
- }
- // Regarding the fact "perm":
- // We don't handle permission information stored in "perm" because its information is conceptually
- // different from what users of FTP clients usually associate with "permissions". Those that have
- // some expectations (and probably want to edit them with a SITE command) often unknowingly expect
- // the Unix permission system. The information passed by "perm" describes what FTP commands can be
- // executed with a file/directory. But even this can be either incomplete or just meant as a "guide"
- // as the spec mentions. From https://tools.ietf.org/html/rfc3659#section-7.5.5: "The permissions are
- // described here as they apply to FTP commands. They may not map easily into particular permissions
- // available on the server's operating system." The parser by Apache Commons tries to translate these
- // to Unix permissions – this is misleading users and might not even be correct.
- };
- function splitStringOnce(str, delimiter) {
- const pos = str.indexOf(delimiter);
- const a = str.substr(0, pos);
- const b = str.substr(pos + delimiter.length);
- return [a, b];
- }
- function testLine(line) {
- return /^\S+=\S+;/.test(line) || line.startsWith(" ");
- }
- exports.testLine = testLine;
- function parseLine(line) {
- const [packedFacts, name] = splitStringOnce(line, " ");
- if (name === "" || name === "." || name === "..") {
- return void 0;
+ get emittedEnd() {
+ return this[EMITTED_END];
}
- const info = new FileInfo_1.FileInfo(name);
- const facts = packedFacts.split(";");
- for (const fact of facts) {
- const [factName, factValue] = splitStringOnce(fact, "=");
- if (!factValue) {
- continue;
- }
- const factHandler = factHandlersByName[factName.toLowerCase()];
- if (!factHandler) {
- continue;
+ [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;
}
- const result = factHandler(factValue, info);
- if (result === 2) {
- return void 0;
+ }
+ emit(ev, data, ...extra) {
+ if (ev !== "error" && ev !== "close" && ev !== DESTROYED && this[DESTROYED])
+ return;
+ else if (ev === "data") {
+ return !data ? false : this[ASYNC] ? defer(() => this[EMITDATA](data)) : this[EMITDATA](data);
+ } else if (ev === "end") {
+ return this[EMITEND]();
+ } else if (ev === "close") {
+ this[CLOSED] = true;
+ if (!this[EMITTED_END] && !this[DESTROYED])
+ return;
+ const ret2 = super.emit("close");
+ this.removeAllListeners("close");
+ return ret2;
+ } else if (ev === "error") {
+ this[EMITTED_ERROR] = data;
+ const ret2 = super.emit("error", data);
+ 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, data, ...extra);
+ this[MAYBE_EMIT_END]();
+ return ret;
}
- return info;
- }
- exports.parseLine = parseLine;
- function transformList(files) {
- const nonLinksByID = /* @__PURE__ */ new Map();
- for (const file of files) {
- if (!file.isSymbolicLink && file.uniqueID !== void 0) {
- nonLinksByID.set(file.uniqueID, file);
+ [EMITDATA](data) {
+ for (const p of this.pipes) {
+ if (p.dest.write(data) === false)
+ this.pause();
}
+ const ret = super.emit("data", data);
+ this[MAYBE_EMIT_END]();
+ return ret;
+ }
+ [EMITEND]() {
+ if (this[EMITTED_END])
+ return;
+ this[EMITTED_END] = true;
+ this.readable = false;
+ if (this[ASYNC])
+ defer(() => this[EMITEND2]());
+ else
+ this[EMITEND2]();
}
- const resolvedFiles = [];
- for (const file of files) {
- if (file.isSymbolicLink && file.uniqueID !== void 0 && file.link === void 0) {
- const target = nonLinksByID.get(file.uniqueID);
- if (target !== void 0) {
- file.link = target.name;
+ [EMITEND2]() {
+ if (this[DECODER]) {
+ const data = this[DECODER].end();
+ if (data) {
+ for (const p of this.pipes) {
+ p.dest.write(data);
+ }
+ super.emit("data", data);
}
}
- const isPartOfDirectory = !file.name.includes("/");
- if (isPartOfDirectory) {
- resolvedFiles.push(file);
+ for (const p of this.pipes) {
+ p.end();
}
+ const ret = super.emit("end");
+ this.removeAllListeners("end");
+ return ret;
}
- return resolvedFiles;
- }
- exports.transformList = transformList;
- function parseMLSxDate(fact) {
- return new Date(Date.UTC(
- +fact.slice(0, 4),
- // Year
- +fact.slice(4, 6) - 1,
- // Month
- +fact.slice(6, 8),
- // Date
- +fact.slice(8, 10),
- // Hours
- +fact.slice(10, 12),
- // Minutes
- +fact.slice(12, 14),
- // Seconds
- +fact.slice(15, 18)
- // Milliseconds
- ));
- }
- exports.parseMLSxDate = parseMLSxDate;
- }
-});
-
-// .yarn/cache/basic-ftp-npm-5.0.4-5950651e19-0bd580652a.zip/node_modules/basic-ftp/dist/parseList.js
-var require_parseList = __commonJS({
- ".yarn/cache/basic-ftp-npm-5.0.4-5950651e19-0bd580652a.zip/node_modules/basic-ftp/dist/parseList.js"(exports) {
- "use strict";
- var __createBinding2 = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) {
- if (k2 === void 0)
- k2 = k;
- var desc = Object.getOwnPropertyDescriptor(m, k);
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
- desc = { enumerable: true, get: function() {
- return m[k];
- } };
- }
- Object.defineProperty(o, k2, desc);
- } : function(o, m, k, k2) {
- if (k2 === void 0)
- k2 = k;
- o[k2] = m[k];
- });
- var __setModuleDefault2 = exports && exports.__setModuleDefault || (Object.create ? function(o, v) {
- Object.defineProperty(o, "default", { enumerable: true, value: v });
- } : function(o, v) {
- o["default"] = v;
- });
- var __importStar2 = exports && exports.__importStar || function(mod) {
- if (mod && mod.__esModule)
- return mod;
- var result = {};
- if (mod != null) {
- for (var k in mod)
- if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k))
- __createBinding2(result, mod, k);
- }
- __setModuleDefault2(result, mod);
- return result;
- };
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.parseList = void 0;
- var dosParser = __importStar2(require_parseListDOS());
- var unixParser = __importStar2(require_parseListUnix());
- var mlsdParser = __importStar2(require_parseListMLSD());
- var availableParsers = [
- dosParser,
- unixParser,
- mlsdParser
- // Keep MLSD last, may accept filename only
- ];
- function firstCompatibleParser(line, parsers) {
- return parsers.find((parser) => parser.testLine(line) === true);
- }
- function isNotBlank(str) {
- return str.trim() !== "";
- }
- function isNotMeta(str) {
- return !str.startsWith("total");
- }
- var REGEX_NEWLINE = /\r?\n/;
- function parseList(rawList) {
- const lines = rawList.split(REGEX_NEWLINE).filter(isNotBlank).filter(isNotMeta);
- if (lines.length === 0) {
- return [];
- }
- const testLine = lines[lines.length - 1];
- const parser = firstCompatibleParser(testLine, availableParsers);
- if (!parser) {
- throw new Error("This library only supports MLSD, Unix- or DOS-style directory listing. Your FTP server seems to be using another format. You can see the transmitted listing when setting `client.ftp.verbose = true`. You can then provide a custom parser to `client.parseList`, see the documentation for details.");
+ // const all = await stream.collect()
+ collect() {
+ const buf = [];
+ if (!this[OBJECTMODE])
+ buf.dataLength = 0;
+ const p = this.promise();
+ this.on("data", (c) => {
+ buf.push(c);
+ if (!this[OBJECTMODE])
+ buf.dataLength += c.length;
+ });
+ return p.then(() => buf);
}
- const files = lines.map(parser.parseLine).filter((info) => info !== void 0);
- return parser.transformList(files);
- }
- exports.parseList = parseList;
- }
-});
-
-// .yarn/cache/basic-ftp-npm-5.0.4-5950651e19-0bd580652a.zip/node_modules/basic-ftp/dist/ProgressTracker.js
-var require_ProgressTracker = __commonJS({
- ".yarn/cache/basic-ftp-npm-5.0.4-5950651e19-0bd580652a.zip/node_modules/basic-ftp/dist/ProgressTracker.js"(exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.ProgressTracker = void 0;
- var ProgressTracker = class {
- constructor() {
- this.bytesOverall = 0;
- this.intervalMs = 500;
- this.onStop = noop;
- this.onHandle = noop;
+ // const data = await stream.concat()
+ concat() {
+ return this[OBJECTMODE] ? Promise.reject(new Error("cannot concat in objectMode")) : this.collect().then((buf) => this[OBJECTMODE] ? Promise.reject(new Error("cannot concat in objectMode")) : this[ENCODING] ? buf.join("") : Buffer.concat(buf, buf.dataLength));
}
- /**
- * Register a new handler for progress info. Use `undefined` to disable reporting.
- */
- reportTo(onHandle = noop) {
- this.onHandle = onHandle;
+ // stream.promise().then(() => done, er => emitted error)
+ promise() {
+ return new Promise((resolve, reject) => {
+ this.on(DESTROYED, () => reject(new Error("stream destroyed")));
+ this.on("error", (er) => reject(er));
+ this.on("end", () => resolve());
+ });
}
- /**
- * Start tracking transfer progress of a socket.
- *
- * @param socket The socket to observe.
- * @param name A name associated with this progress tracking, e.g. a filename.
- * @param type The type of the transfer, typically "upload" or "download".
- */
- start(socket, name, type) {
- let lastBytes = 0;
- this.onStop = poll(this.intervalMs, () => {
- const bytes = socket.bytesRead + socket.bytesWritten;
- this.bytesOverall += bytes - lastBytes;
- lastBytes = bytes;
- this.onHandle({
- name,
- type,
- bytes,
- bytesOverall: this.bytesOverall
+ // for await (let chunk of stream)
+ [ASYNCITERATOR]() {
+ const next = () => {
+ const res = this.read();
+ if (res !== null)
+ return Promise.resolve({ done: false, value: res });
+ if (this[EOF])
+ return Promise.resolve({ done: true });
+ let resolve = null;
+ let reject = null;
+ const onerr = (er) => {
+ this.removeListener("data", ondata);
+ this.removeListener("end", onend);
+ reject(er);
+ };
+ const ondata = (value) => {
+ this.removeListener("error", onerr);
+ this.removeListener("end", onend);
+ this.pause();
+ resolve({ value, done: !!this[EOF] });
+ };
+ const onend = () => {
+ this.removeListener("error", onerr);
+ this.removeListener("data", ondata);
+ resolve({ done: true });
+ };
+ 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 };
}
- /**
- * Stop tracking transfer progress.
- */
- stop() {
- this.onStop(false);
+ // for (let chunk of stream)
+ [ITERATOR]() {
+ const next = () => {
+ const value = this.read();
+ const done = value === null;
+ return { value, done };
+ };
+ return { next };
}
- /**
- * Call the progress handler one more time, then stop tracking.
- */
- updateAndStop() {
- this.onStop(true);
+ destroy(er) {
+ if (this[DESTROYED]) {
+ if (er)
+ this.emit("error", er);
+ else
+ this.emit(DESTROYED);
+ return this;
+ }
+ this[DESTROYED] = true;
+ this.buffer.length = 0;
+ this[BUFFERLENGTH] = 0;
+ if (typeof this.close === "function" && !this[CLOSED])
+ this.close();
+ if (er)
+ this.emit("error", er);
+ else
+ this.emit(DESTROYED);
+ return this;
+ }
+ static isStream(s) {
+ return !!s && (s instanceof Minipass || s instanceof Stream || s instanceof EE && (typeof s.pipe === "function" || // readable
+ typeof s.write === "function" && typeof s.end === "function"));
}
};
- exports.ProgressTracker = ProgressTracker;
- function poll(intervalMs, updateFunc) {
- const id = setInterval(updateFunc, intervalMs);
- const stopFunc = (stopWithUpdate) => {
- clearInterval(id);
- if (stopWithUpdate) {
- updateFunc();
- }
- updateFunc = noop;
- };
- updateFunc();
- return stopFunc;
- }
- function noop() {
- }
}
});
-// .yarn/cache/basic-ftp-npm-5.0.4-5950651e19-0bd580652a.zip/node_modules/basic-ftp/dist/StringWriter.js
-var require_StringWriter = __commonJS({
- ".yarn/cache/basic-ftp-npm-5.0.4-5950651e19-0bd580652a.zip/node_modules/basic-ftp/dist/StringWriter.js"(exports) {
+// .yarn/cache/minizlib-npm-2.1.2-ea89cd0cfb-64fae024e1.zip/node_modules/minizlib/index.js
+var require_minizlib = __commonJS({
+ ".yarn/cache/minizlib-npm-2.1.2-ea89cd0cfb-64fae024e1.zip/node_modules/minizlib/index.js"(exports) {
"use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.StringWriter = void 0;
- var stream_1 = require("stream");
- var StringWriter = class extends stream_1.Writable {
- constructor() {
- super(...arguments);
- this.buf = Buffer.alloc(0);
- }
- _write(chunk, _, callback) {
- if (chunk instanceof Buffer) {
- this.buf = Buffer.concat([this.buf, chunk]);
- callback(null);
- } else {
- callback(new Error("StringWriter expects chunks of type 'Buffer'."));
- }
+ var assert3 = require("assert");
+ var Buffer2 = require("buffer").Buffer;
+ var realZlib = require("zlib");
+ var constants = exports.constants = require_constants5();
+ var Minipass = require_minipass2();
+ var OriginalBufferConcat = Buffer2.concat;
+ var _superWrite = Symbol("_superWrite");
+ var ZlibError = class extends Error {
+ constructor(err) {
+ super("zlib: " + err.message);
+ this.code = err.code;
+ this.errno = err.errno;
+ if (!this.code)
+ this.code = "ZLIB_ERROR";
+ this.message = "zlib: " + err.message;
+ Error.captureStackTrace(this, this.constructor);
}
- getText(encoding) {
- return this.buf.toString(encoding);
+ get name() {
+ return "ZlibError";
}
};
- exports.StringWriter = StringWriter;
- }
-});
-
-// .yarn/cache/basic-ftp-npm-5.0.4-5950651e19-0bd580652a.zip/node_modules/basic-ftp/dist/netUtils.js
-var require_netUtils = __commonJS({
- ".yarn/cache/basic-ftp-npm-5.0.4-5950651e19-0bd580652a.zip/node_modules/basic-ftp/dist/netUtils.js"(exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.ipIsPrivateV4Address = exports.upgradeSocket = exports.describeAddress = exports.describeTLS = void 0;
- var tls_1 = require("tls");
- function describeTLS(socket) {
- if (socket instanceof tls_1.TLSSocket) {
- const protocol = socket.getProtocol();
- return protocol ? protocol : "Server socket or disconnected client socket";
- }
- return "No encryption";
- }
- exports.describeTLS = describeTLS;
- function describeAddress(socket) {
- if (socket.remoteFamily === "IPv6") {
- return `[${socket.remoteAddress}]:${socket.remotePort}`;
- }
- return `${socket.remoteAddress}:${socket.remotePort}`;
- }
- exports.describeAddress = describeAddress;
- function upgradeSocket(socket, options) {
- return new Promise((resolve, reject) => {
- const tlsOptions = Object.assign({}, options, {
- socket
- });
- const tlsSocket = (0, tls_1.connect)(tlsOptions, () => {
- const expectCertificate = tlsOptions.rejectUnauthorized !== false;
- if (expectCertificate && !tlsSocket.authorized) {
- reject(tlsSocket.authorizationError);
- } else {
- tlsSocket.removeAllListeners("error");
- resolve(tlsSocket);
- }
- }).once("error", (error) => {
- reject(error);
- });
- });
- }
- exports.upgradeSocket = upgradeSocket;
- function ipIsPrivateV4Address(ip = "") {
- if (ip.startsWith("::ffff:")) {
- ip = ip.substr(7);
+ var _opts = Symbol("opts");
+ var _flushFlag = Symbol("flushFlag");
+ var _finishFlushFlag = Symbol("finishFlushFlag");
+ var _fullFlushFlag = Symbol("fullFlushFlag");
+ var _handle = Symbol("handle");
+ var _onError = Symbol("onError");
+ var _sawError = Symbol("sawError");
+ var _level = Symbol("level");
+ var _strategy = Symbol("strategy");
+ var _ended = Symbol("ended");
+ var _defaultFullFlush = Symbol("_defaultFullFlush");
+ var ZlibBase = class extends Minipass {
+ constructor(opts, mode) {
+ if (!opts || typeof opts !== "object")
+ throw new TypeError("invalid options for ZlibBase constructor");
+ super(opts);
+ this[_sawError] = false;
+ this[_ended] = false;
+ this[_opts] = opts;
+ this[_flushFlag] = opts.flush;
+ this[_finishFlushFlag] = opts.finishFlush;
+ try {
+ this[_handle] = new realZlib[mode](opts);
+ } catch (er) {
+ throw new ZlibError(er);
+ }
+ 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);
}
- const octets = ip.split(".").map((o) => parseInt(o, 10));
- return octets[0] === 10 || octets[0] === 172 && octets[1] >= 16 && octets[1] <= 31 || octets[0] === 192 && octets[1] === 168 || ip === "127.0.0.1";
- }
- exports.ipIsPrivateV4Address = ipIsPrivateV4Address;
- }
-});
-
-// .yarn/cache/basic-ftp-npm-5.0.4-5950651e19-0bd580652a.zip/node_modules/basic-ftp/dist/transfer.js
-var require_transfer = __commonJS({
- ".yarn/cache/basic-ftp-npm-5.0.4-5950651e19-0bd580652a.zip/node_modules/basic-ftp/dist/transfer.js"(exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.downloadTo = exports.uploadFrom = exports.connectForPassiveTransfer = exports.parsePasvResponse = exports.enterPassiveModeIPv4 = exports.parseEpsvResponse = exports.enterPassiveModeIPv6 = void 0;
- var netUtils_1 = require_netUtils();
- var stream_1 = require("stream");
- var tls_1 = require("tls");
- var parseControlResponse_1 = require_parseControlResponse();
- async function enterPassiveModeIPv6(ftp) {
- const res = await ftp.request("EPSV");
- const port = parseEpsvResponse(res.message);
- if (!port) {
- throw new Error("Can't parse EPSV response: " + res.message);
- }
- const controlHost = ftp.socket.remoteAddress;
- if (controlHost === void 0) {
- throw new Error("Control socket is disconnected, can't get remote address.");
- }
- await connectForPassiveTransfer(controlHost, port, ftp);
- return res;
- }
- exports.enterPassiveModeIPv6 = enterPassiveModeIPv6;
- function parseEpsvResponse(message) {
- const groups = message.match(/[|!]{3}(.+)[|!]/);
- if (groups === null || groups[1] === void 0) {
- throw new Error(`Can't parse response to 'EPSV': ${message}`);
+ close() {
+ if (this[_handle]) {
+ this[_handle].close();
+ this[_handle] = null;
+ this.emit("close");
+ }
}
- const port = parseInt(groups[1], 10);
- if (Number.isNaN(port)) {
- throw new Error(`Can't parse response to 'EPSV', port is not a number: ${message}`);
+ reset() {
+ if (!this[_sawError]) {
+ assert3(this[_handle], "zlib binding closed");
+ return this[_handle].reset();
+ }
}
- return port;
- }
- exports.parseEpsvResponse = parseEpsvResponse;
- async function enterPassiveModeIPv4(ftp) {
- const res = await ftp.request("PASV");
- const target = parsePasvResponse(res.message);
- if (!target) {
- throw new Error("Can't parse PASV response: " + res.message);
+ flush(flushFlag) {
+ if (this.ended)
+ return;
+ if (typeof flushFlag !== "number")
+ flushFlag = this[_fullFlushFlag];
+ this.write(Object.assign(Buffer2.alloc(0), { [_flushFlag]: flushFlag }));
}
- const controlHost = ftp.socket.remoteAddress;
- if ((0, netUtils_1.ipIsPrivateV4Address)(target.host) && controlHost && !(0, netUtils_1.ipIsPrivateV4Address)(controlHost)) {
- target.host = controlHost;
+ end(chunk, encoding, cb) {
+ if (chunk)
+ this.write(chunk, encoding);
+ this.flush(this[_finishFlushFlag]);
+ this[_ended] = true;
+ return super.end(null, null, cb);
}
- await connectForPassiveTransfer(target.host, target.port, ftp);
- return res;
- }
- exports.enterPassiveModeIPv4 = enterPassiveModeIPv4;
- function parsePasvResponse(message) {
- const groups = message.match(/([-\d]+,[-\d]+,[-\d]+,[-\d]+),([-\d]+),([-\d]+)/);
- if (groups === null || groups.length !== 4) {
- throw new Error(`Can't parse response to 'PASV': ${message}`);
+ get ended() {
+ return this[_ended];
}
- return {
- host: groups[1].replace(/,/g, "."),
- port: (parseInt(groups[2], 10) & 255) * 256 + (parseInt(groups[3], 10) & 255)
- };
- }
- exports.parsePasvResponse = parsePasvResponse;
- function connectForPassiveTransfer(host, port, ftp) {
- return new Promise((resolve, reject) => {
- let socket = ftp._newSocket();
- const handleConnErr = function(err) {
- err.message = "Can't open data connection in passive mode: " + err.message;
- reject(err);
+ write(chunk, encoding, cb) {
+ if (typeof encoding === "function")
+ cb = encoding, encoding = "utf8";
+ if (typeof chunk === "string")
+ chunk = Buffer2.from(chunk, encoding);
+ if (this[_sawError])
+ return;
+ assert3(this[_handle], "zlib binding closed");
+ const nativeHandle = this[_handle]._handle;
+ const originalNativeClose = nativeHandle.close;
+ nativeHandle.close = () => {
};
- const handleTimeout = function() {
- socket.destroy();
- reject(new Error(`Timeout when trying to open data connection to ${host}:${port}`));
+ const originalClose = this[_handle].close;
+ this[_handle].close = () => {
};
- socket.setTimeout(ftp.timeout);
- socket.on("error", handleConnErr);
- socket.on("timeout", handleTimeout);
- socket.connect({ port, host, family: ftp.ipFamily }, () => {
- if (ftp.socket instanceof tls_1.TLSSocket) {
- socket = (0, tls_1.connect)(Object.assign({}, ftp.tlsOptions, {
- socket,
- // Reuse the TLS session negotiated earlier when the control connection
- // was upgraded. Servers expect this because it provides additional
- // security: If a completely new session would be negotiated, a hacker
- // could guess the port and connect to the new data connection before we do
- // by just starting his/her own TLS session.
- session: ftp.socket.getSession()
- }));
- }
- socket.removeListener("error", handleConnErr);
- socket.removeListener("timeout", handleTimeout);
- ftp.dataSocket = socket;
- resolve();
- });
- });
- }
- exports.connectForPassiveTransfer = connectForPassiveTransfer;
- var TransferResolver = class {
- /**
- * Instantiate a TransferResolver
- */
- constructor(ftp, progress) {
- this.ftp = ftp;
- this.progress = progress;
- this.response = void 0;
- this.dataTransferDone = false;
- }
- /**
- * Mark the beginning of a transfer.
- *
- * @param name - Name of the transfer, usually the filename.
- * @param type - Type of transfer, usually "upload" or "download".
- */
- onDataStart(name, type) {
- if (this.ftp.dataSocket === void 0) {
- throw new Error("Data transfer should start but there is no data connection.");
+ Buffer2.concat = (args) => args;
+ let result;
+ try {
+ const flushFlag = typeof chunk[_flushFlag] === "number" ? chunk[_flushFlag] : this[_flushFlag];
+ result = this[_handle]._processChunk(chunk, flushFlag);
+ Buffer2.concat = OriginalBufferConcat;
+ } catch (err) {
+ Buffer2.concat = OriginalBufferConcat;
+ this[_onError](new ZlibError(err));
+ } finally {
+ if (this[_handle]) {
+ this[_handle]._handle = nativeHandle;
+ nativeHandle.close = originalNativeClose;
+ this[_handle].close = originalClose;
+ this[_handle].removeAllListeners("error");
+ }
}
- this.ftp.socket.setTimeout(0);
- this.ftp.dataSocket.setTimeout(this.ftp.timeout);
- this.progress.start(this.ftp.dataSocket, name, type);
- }
- /**
- * The data connection has finished the transfer.
- */
- onDataDone(task) {
- this.progress.updateAndStop();
- this.ftp.socket.setTimeout(this.ftp.timeout);
- if (this.ftp.dataSocket) {
- this.ftp.dataSocket.setTimeout(0);
+ if (this[_handle])
+ this[_handle].on("error", (er) => this[_onError](new ZlibError(er)));
+ let writeReturn;
+ if (result) {
+ if (Array.isArray(result) && result.length > 0) {
+ writeReturn = this[_superWrite](Buffer2.from(result[0]));
+ for (let i = 1; i < result.length; i++) {
+ writeReturn = this[_superWrite](result[i]);
+ }
+ } else {
+ writeReturn = this[_superWrite](Buffer2.from(result));
+ }
}
- this.dataTransferDone = true;
- this.tryResolve(task);
+ if (cb)
+ cb();
+ return writeReturn;
}
- /**
- * The control connection reports the transfer as finished.
- */
- onControlDone(task, response) {
- this.response = response;
- this.tryResolve(task);
+ [_superWrite](data) {
+ return super.write(data);
}
- /**
- * An error has been reported and the task should be rejected.
- */
- onError(task, err) {
- this.progress.updateAndStop();
- this.ftp.socket.setTimeout(this.ftp.timeout);
- this.ftp.dataSocket = void 0;
- task.reject(err);
+ };
+ var Zlib = class extends ZlibBase {
+ constructor(opts, mode) {
+ opts = opts || {};
+ opts.flush = opts.flush || constants.Z_NO_FLUSH;
+ opts.finishFlush = opts.finishFlush || constants.Z_FINISH;
+ super(opts, mode);
+ this[_fullFlushFlag] = constants.Z_FULL_FLUSH;
+ this[_level] = opts.level;
+ this[_strategy] = opts.strategy;
}
- /**
- * Control connection sent an unexpected request requiring a response from our part. We
- * can't provide that (because unknown) and have to close the contrext with an error because
- * the FTP server is now caught up in a state we can't resolve.
- */
- onUnexpectedRequest(response) {
- const err = new Error(`Unexpected FTP response is requesting an answer: ${response.message}`);
- this.ftp.closeWithError(err);
- }
- tryResolve(task) {
- const canResolve = this.dataTransferDone && this.response !== void 0;
- if (canResolve) {
- this.ftp.dataSocket = void 0;
- task.resolve(this.response);
- }
- }
- };
- function uploadFrom(source, config) {
- const resolver = new TransferResolver(config.ftp, config.tracker);
- const fullCommand = `${config.command} ${config.remotePath}`;
- return config.ftp.handle(fullCommand, (res, task) => {
- if (res instanceof Error) {
- resolver.onError(task, res);
- } else if (res.code === 150 || res.code === 125) {
- const dataSocket = config.ftp.dataSocket;
- if (!dataSocket) {
- resolver.onError(task, new Error("Upload should begin but no data connection is available."));
- return;
+ 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);
+ assert3(this[_handle], "zlib binding closed");
+ const origFlush = this[_handle].flush;
+ this[_handle].flush = (flushFlag, cb) => {
+ this.flush(flushFlag);
+ cb();
+ };
+ try {
+ this[_handle].params(level, strategy);
+ } finally {
+ this[_handle].flush = origFlush;
}
- const canUpload = "getCipher" in dataSocket ? dataSocket.getCipher() !== void 0 : true;
- onConditionOrEvent(canUpload, dataSocket, "secureConnect", () => {
- config.ftp.log(`Uploading to ${(0, netUtils_1.describeAddress)(dataSocket)} (${(0, netUtils_1.describeTLS)(dataSocket)})`);
- resolver.onDataStart(config.remotePath, config.type);
- (0, stream_1.pipeline)(source, dataSocket, (err) => {
- if (err) {
- resolver.onError(task, err);
- } else {
- resolver.onDataDone(task);
- }
- });
- });
- } else if ((0, parseControlResponse_1.positiveCompletion)(res.code)) {
- resolver.onControlDone(task, res);
- } else if ((0, parseControlResponse_1.positiveIntermediate)(res.code)) {
- resolver.onUnexpectedRequest(res);
- }
- });
- }
- exports.uploadFrom = uploadFrom;
- function downloadTo(destination, config) {
- if (!config.ftp.dataSocket) {
- throw new Error("Download will be initiated but no data connection is available.");
- }
- const resolver = new TransferResolver(config.ftp, config.tracker);
- return config.ftp.handle(config.command, (res, task) => {
- if (res instanceof Error) {
- resolver.onError(task, res);
- } else if (res.code === 150 || res.code === 125) {
- const dataSocket = config.ftp.dataSocket;
- if (!dataSocket) {
- resolver.onError(task, new Error("Download should begin but no data connection is available."));
- return;
+ if (this[_handle]) {
+ this[_level] = level;
+ this[_strategy] = strategy;
}
- config.ftp.log(`Downloading from ${(0, netUtils_1.describeAddress)(dataSocket)} (${(0, netUtils_1.describeTLS)(dataSocket)})`);
- resolver.onDataStart(config.remotePath, config.type);
- (0, stream_1.pipeline)(dataSocket, destination, (err) => {
- if (err) {
- resolver.onError(task, err);
- } else {
- resolver.onDataDone(task);
- }
- });
- } else if (res.code === 350) {
- config.ftp.send("RETR " + config.remotePath);
- } else if ((0, parseControlResponse_1.positiveCompletion)(res.code)) {
- resolver.onControlDone(task, res);
- } else if ((0, parseControlResponse_1.positiveIntermediate)(res.code)) {
- resolver.onUnexpectedRequest(res);
}
- });
- }
- exports.downloadTo = downloadTo;
- function onConditionOrEvent(condition, emitter, eventName, action) {
- if (condition === true) {
- action();
- } else {
- emitter.once(eventName, () => action());
}
- }
- }
-});
-
-// .yarn/cache/basic-ftp-npm-5.0.4-5950651e19-0bd580652a.zip/node_modules/basic-ftp/dist/Client.js
-var require_Client = __commonJS({
- ".yarn/cache/basic-ftp-npm-5.0.4-5950651e19-0bd580652a.zip/node_modules/basic-ftp/dist/Client.js"(exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.Client = void 0;
- var fs_1 = require("fs");
- var path_1 = require("path");
- var tls_1 = require("tls");
- var util_1 = require("util");
- var FtpContext_1 = require_FtpContext();
- var parseList_1 = require_parseList();
- var ProgressTracker_1 = require_ProgressTracker();
- var StringWriter_1 = require_StringWriter();
- var parseListMLSD_1 = require_parseListMLSD();
- var netUtils_1 = require_netUtils();
- var transfer_1 = require_transfer();
- var parseControlResponse_1 = require_parseControlResponse();
- var fsReadDir = (0, util_1.promisify)(fs_1.readdir);
- var fsMkDir = (0, util_1.promisify)(fs_1.mkdir);
- var fsStat = (0, util_1.promisify)(fs_1.stat);
- var fsOpen = (0, util_1.promisify)(fs_1.open);
- var fsClose = (0, util_1.promisify)(fs_1.close);
- var fsUnlink = (0, util_1.promisify)(fs_1.unlink);
- var LIST_COMMANDS_DEFAULT = ["LIST -a", "LIST"];
- var LIST_COMMANDS_MLSD = ["MLSD", "LIST -a", "LIST"];
- var Client = class {
- /**
- * Instantiate an FTP client.
- *
- * @param timeout Timeout in milliseconds, use 0 for no timeout. Optional, default is 30 seconds.
- */
- constructor(timeout = 3e4) {
- this.availableListCommands = LIST_COMMANDS_DEFAULT;
- this.ftp = new FtpContext_1.FTPContext(timeout);
- this.prepareTransfer = this._enterFirstCompatibleMode([transfer_1.enterPassiveModeIPv6, transfer_1.enterPassiveModeIPv4]);
- this.parseList = parseList_1.parseList;
- this._progressTracker = new ProgressTracker_1.ProgressTracker();
+ };
+ var Deflate = class extends Zlib {
+ constructor(opts) {
+ super(opts, "Deflate");
}
- /**
- * Close the client and all open socket connections.
- *
- * Close the client and all open socket connections. The client can’t be used anymore after calling this method,
- * you have to either reconnect with `access` or `connect` or instantiate a new instance to continue any work.
- * A client is also closed automatically if any timeout or connection error occurs.
- */
- close() {
- this.ftp.close();
- this._progressTracker.stop();
+ };
+ var Inflate = class extends Zlib {
+ constructor(opts) {
+ super(opts, "Inflate");
}
- /**
- * Returns true if the client is closed and can't be used anymore.
- */
- get closed() {
- return this.ftp.closed;
+ };
+ var _portable = Symbol("_portable");
+ var Gzip = class extends Zlib {
+ constructor(opts) {
+ super(opts, "Gzip");
+ this[_portable] = opts && !!opts.portable;
}
- /**
- * Connect (or reconnect) to an FTP server.
- *
- * This is an instance method and thus can be called multiple times during the lifecycle of a `Client`
- * instance. Whenever you do, the client is reset with a new control connection. This also implies that
- * you can reopen a `Client` instance that has been closed due to an error when reconnecting with this
- * method. In fact, reconnecting is the only way to continue using a closed `Client`.
- *
- * @param host Host the client should connect to. Optional, default is "localhost".
- * @param port Port the client should connect to. Optional, default is 21.
- */
- connect(host = "localhost", port = 21) {
- this.ftp.reset();
- this.ftp.socket.connect({
- host,
- port,
- family: this.ftp.ipFamily
- }, () => this.ftp.log(`Connected to ${(0, netUtils_1.describeAddress)(this.ftp.socket)} (${(0, netUtils_1.describeTLS)(this.ftp.socket)})`));
- return this._handleConnectResponse();
+ [_superWrite](data) {
+ if (!this[_portable])
+ return super[_superWrite](data);
+ this[_portable] = false;
+ data[9] = 255;
+ return super[_superWrite](data);
}
- /**
- * As `connect` but using implicit TLS. Implicit TLS is not an FTP standard and has been replaced by
- * explicit TLS. There are still FTP servers that support only implicit TLS, though.
- */
- connectImplicitTLS(host = "localhost", port = 21, tlsOptions = {}) {
- this.ftp.reset();
- this.ftp.socket = (0, tls_1.connect)(port, host, tlsOptions, () => this.ftp.log(`Connected to ${(0, netUtils_1.describeAddress)(this.ftp.socket)} (${(0, netUtils_1.describeTLS)(this.ftp.socket)})`));
- this.ftp.tlsOptions = tlsOptions;
- return this._handleConnectResponse();
- }
- /**
- * Handles the first reponse by an FTP server after the socket connection has been established.
- */
- _handleConnectResponse() {
- return this.ftp.handle(void 0, (res, task) => {
- if (res instanceof Error) {
- task.reject(res);
- } else if ((0, parseControlResponse_1.positiveCompletion)(res.code)) {
- task.resolve(res);
- } else {
- task.reject(new FtpContext_1.FTPError(res));
- }
- });
+ };
+ var Gunzip = class extends Zlib {
+ constructor(opts) {
+ super(opts, "Gunzip");
}
- /**
- * Send an FTP command and handle the first response.
- */
- send(command, ignoreErrorCodesDEPRECATED = false) {
- if (ignoreErrorCodesDEPRECATED) {
- this.ftp.log("Deprecated call using send(command, flag) with boolean flag to ignore errors. Use sendIgnoringError(command).");
- return this.sendIgnoringError(command);
- }
- return this.ftp.request(command);
+ };
+ var DeflateRaw = class extends Zlib {
+ constructor(opts) {
+ super(opts, "DeflateRaw");
}
- /**
- * Send an FTP command and ignore an FTP error response. Any other kind of error or timeout will still reject the Promise.
- *
- * @param command
- */
- sendIgnoringError(command) {
- return this.ftp.handle(command, (res, task) => {
- if (res instanceof FtpContext_1.FTPError) {
- task.resolve({ code: res.code, message: res.message });
- } else if (res instanceof Error) {
- task.reject(res);
- } else {
- task.resolve(res);
- }
- });
+ };
+ var InflateRaw = class extends Zlib {
+ constructor(opts) {
+ super(opts, "InflateRaw");
}
- /**
- * Upgrade the current socket connection to TLS.
- *
- * @param options TLS options as in `tls.connect(options)`, optional.
- * @param command Set the authentication command. Optional, default is "AUTH TLS".
- */
- async useTLS(options = {}, command = "AUTH TLS") {
- const ret = await this.send(command);
- this.ftp.socket = await (0, netUtils_1.upgradeSocket)(this.ftp.socket, options);
- this.ftp.tlsOptions = options;
- this.ftp.log(`Control socket is using: ${(0, netUtils_1.describeTLS)(this.ftp.socket)}`);
- return ret;
+ };
+ var Unzip = class extends Zlib {
+ constructor(opts) {
+ super(opts, "Unzip");
}
- /**
- * Login a user with a password.
- *
- * @param user Username to use for login. Optional, default is "anonymous".
- * @param password Password to use for login. Optional, default is "guest".
- */
- login(user = "anonymous", password = "guest") {
- this.ftp.log(`Login security: ${(0, netUtils_1.describeTLS)(this.ftp.socket)}`);
- return this.ftp.handle("USER " + user, (res, task) => {
- if (res instanceof Error) {
- task.reject(res);
- } else if ((0, parseControlResponse_1.positiveCompletion)(res.code)) {
- task.resolve(res);
- } else if (res.code === 331) {
- this.ftp.send("PASS " + password);
- } else {
- task.reject(new FtpContext_1.FTPError(res));
- }
- });
+ };
+ var 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;
+ super(opts, mode);
+ this[_fullFlushFlag] = constants.BROTLI_OPERATION_FLUSH;
}
- /**
- * Set the usual default settings.
- *
- * Settings used:
- * * Binary mode (TYPE I)
- * * File structure (STRU F)
- * * Additional settings for FTPS (PBSZ 0, PROT P)
- */
- async useDefaultSettings() {
- const features = await this.features();
- const supportsMLSD = features.has("MLST");
- this.availableListCommands = supportsMLSD ? LIST_COMMANDS_MLSD : LIST_COMMANDS_DEFAULT;
- await this.send("TYPE I");
- await this.sendIgnoringError("STRU F");
- await this.sendIgnoringError("OPTS UTF8 ON");
- if (supportsMLSD) {
- await this.sendIgnoringError("OPTS MLST type;size;modify;unique;unix.mode;unix.owner;unix.group;unix.ownername;unix.groupname;");
- }
- if (this.ftp.hasTLS) {
- await this.sendIgnoringError("PBSZ 0");
- await this.sendIgnoringError("PROT P");
- }
+ };
+ var BrotliCompress = class extends Brotli {
+ constructor(opts) {
+ super(opts, "BrotliCompress");
}
- /**
- * Convenience method that calls `connect`, `useTLS`, `login` and `useDefaultSettings`.
- *
- * This is an instance method and thus can be called multiple times during the lifecycle of a `Client`
- * instance. Whenever you do, the client is reset with a new control connection. This also implies that
- * you can reopen a `Client` instance that has been closed due to an error when reconnecting with this
- * method. In fact, reconnecting is the only way to continue using a closed `Client`.
- */
- async access(options = {}) {
- var _a, _b;
- const useExplicitTLS = options.secure === true;
- const useImplicitTLS = options.secure === "implicit";
- let welcome;
- if (useImplicitTLS) {
- welcome = await this.connectImplicitTLS(options.host, options.port, options.secureOptions);
- } else {
- welcome = await this.connect(options.host, options.port);
- }
- if (useExplicitTLS) {
- const secureOptions = (_a = options.secureOptions) !== null && _a !== void 0 ? _a : {};
- secureOptions.host = (_b = secureOptions.host) !== null && _b !== void 0 ? _b : options.host;
- await this.useTLS(secureOptions);
- }
- await this.sendIgnoringError("OPTS UTF8 ON");
- await this.login(options.user, options.password);
- await this.useDefaultSettings();
- return welcome;
+ };
+ var BrotliDecompress = class extends Brotli {
+ constructor(opts) {
+ super(opts, "BrotliDecompress");
}
- /**
- * Get the current working directory.
- */
- async pwd() {
- const res = await this.send("PWD");
- const parsed = res.message.match(/"(.+)"/);
- if (parsed === null || parsed[1] === void 0) {
- throw new Error(`Can't parse response to command 'PWD': ${res.message}`);
+ };
+ exports.Deflate = Deflate;
+ exports.Inflate = Inflate;
+ exports.Gzip = Gzip;
+ exports.Gunzip = Gunzip;
+ exports.DeflateRaw = DeflateRaw;
+ exports.InflateRaw = InflateRaw;
+ exports.Unzip = Unzip;
+ if (typeof realZlib.BrotliCompress === "function") {
+ exports.BrotliCompress = BrotliCompress;
+ exports.BrotliDecompress = BrotliDecompress;
+ } else {
+ exports.BrotliCompress = exports.BrotliDecompress = class {
+ constructor() {
+ throw new Error("Brotli is not supported in this version of Node.js");
}
- return parsed[1];
- }
- /**
- * Get a description of supported features.
- *
- * This sends the FEAT command and parses the result into a Map where keys correspond to available commands
- * and values hold further information. Be aware that your FTP servers might not support this
- * command in which case this method will not throw an exception but just return an empty Map.
- */
- async features() {
- const res = await this.sendIgnoringError("FEAT");
- const features = /* @__PURE__ */ new Map();
- if (res.code < 400 && (0, parseControlResponse_1.isMultiline)(res.message)) {
- res.message.split("\n").slice(1, -1).forEach((line) => {
- const entry = line.trim().split(" ");
- features.set(entry[0], entry[1] || "");
- });
+ };
+ }
+ }
+});
+
+// .yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/normalize-windows-path.js
+var require_normalize_windows_path = __commonJS({
+ ".yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/normalize-windows-path.js"(exports, module2) {
+ var platform = process.env.TESTING_TAR_FAKE_PLATFORM || process.platform;
+ module2.exports = platform !== "win32" ? (p) => p : (p) => p && p.replace(/\\/g, "/");
+ }
+});
+
+// .yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/read-entry.js
+var require_read_entry = __commonJS({
+ ".yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/read-entry.js"(exports, module2) {
+ "use strict";
+ var { Minipass } = require_minipass();
+ var normPath = require_normalize_windows_path();
+ var SLURP = Symbol("slurp");
+ module2.exports = class ReadEntry extends Minipass {
+ constructor(header, ex, gex) {
+ super();
+ this.pause();
+ this.extended = ex;
+ this.globalExtended = gex;
+ this.header = header;
+ this.startBlockSize = 512 * Math.ceil(header.size / 512);
+ this.blockRemain = this.startBlockSize;
+ this.remain = header.size;
+ this.type = header.type;
+ this.meta = false;
+ this.ignore = false;
+ 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;
+ default:
+ this.ignore = true;
}
- return features;
- }
- /**
- * Set the working directory.
- */
- async cd(path10) {
- const validPath = await this.protectWhitespace(path10);
- return this.send("CWD " + validPath);
- }
- /**
- * Switch to the parent directory of the working directory.
- */
- async cdup() {
- return this.send("CDUP");
- }
- /**
- * Get the last modified time of a file. This is not supported by every FTP server, in which case
- * calling this method will throw an exception.
- */
- async lastMod(path10) {
- const validPath = await this.protectWhitespace(path10);
- const res = await this.send(`MDTM ${validPath}`);
- const date = res.message.slice(4);
- return (0, parseListMLSD_1.parseMLSxDate)(date);
- }
- /**
- * Get the size of a file.
- */
- async size(path10) {
- const validPath = await this.protectWhitespace(path10);
- const command = `SIZE ${validPath}`;
- const res = await this.send(command);
- const size = parseInt(res.message.slice(4), 10);
- if (Number.isNaN(size)) {
- throw new Error(`Can't parse response to command '${command}' as a numerical value: ${res.message}`);
+ this.path = normPath(header.path);
+ this.mode = header.mode;
+ if (this.mode) {
+ this.mode = this.mode & 4095;
}
- return size;
- }
- /**
- * Rename a file.
- *
- * Depending on the FTP server this might also be used to move a file from one
- * directory to another by providing full paths.
- */
- async rename(srcPath, destPath) {
- const validSrc = await this.protectWhitespace(srcPath);
- const validDest = await this.protectWhitespace(destPath);
- await this.send("RNFR " + validSrc);
- return this.send("RNTO " + validDest);
- }
- /**
- * Remove a file from the current working directory.
- *
- * You can ignore FTP error return codes which won't throw an exception if e.g.
- * the file doesn't exist.
- */
- async remove(path10, ignoreErrorCodes = false) {
- const validPath = await this.protectWhitespace(path10);
- if (ignoreErrorCodes) {
- return this.sendIgnoringError(`DELE ${validPath}`);
+ this.uid = header.uid;
+ this.gid = header.gid;
+ this.uname = header.uname;
+ this.gname = header.gname;
+ this.size = header.size;
+ this.mtime = header.mtime;
+ this.atime = header.atime;
+ this.ctime = header.ctime;
+ this.linkpath = normPath(header.linkpath);
+ this.uname = header.uname;
+ this.gname = header.gname;
+ if (ex) {
+ this[SLURP](ex);
}
- return this.send(`DELE ${validPath}`);
- }
- /**
- * Report transfer progress for any upload or download to a given handler.
- *
- * This will also reset the overall transfer counter that can be used for multiple transfers. You can
- * also call the function without a handler to stop reporting to an earlier one.
- *
- * @param handler Handler function to call on transfer progress.
- */
- trackProgress(handler) {
- this._progressTracker.bytesOverall = 0;
- this._progressTracker.reportTo(handler);
- }
- /**
- * Upload data from a readable stream or a local file to a remote file.
- *
- * @param source Readable stream or path to a local file.
- * @param toRemotePath Path to a remote file to write to.
- */
- async uploadFrom(source, toRemotePath, options = {}) {
- return this._uploadWithCommand(source, toRemotePath, "STOR", options);
- }
- /**
- * Upload data from a readable stream or a local file by appending it to an existing file. If the file doesn't
- * exist the FTP server should create it.
- *
- * @param source Readable stream or path to a local file.
- * @param toRemotePath Path to a remote file to write to.
- */
- async appendFrom(source, toRemotePath, options = {}) {
- return this._uploadWithCommand(source, toRemotePath, "APPE", options);
- }
- /**
- * @protected
- */
- async _uploadWithCommand(source, remotePath, command, options) {
- if (typeof source === "string") {
- return this._uploadLocalFile(source, remotePath, command, options);
+ if (gex) {
+ this[SLURP](gex, true);
}
- return this._uploadFromStream(source, remotePath, command);
}
- /**
- * @protected
- */
- async _uploadLocalFile(localPath, remotePath, command, options) {
- const fd = await fsOpen(localPath, "r");
- const source = (0, fs_1.createReadStream)("", {
- fd,
- start: options.localStart,
- end: options.localEndInclusive,
- autoClose: false
- });
- try {
- return await this._uploadFromStream(source, remotePath, command);
- } finally {
- await ignoreError(() => fsClose(fd));
+ write(data) {
+ const writeLen = data.length;
+ if (writeLen > this.blockRemain) {
+ throw new Error("writing more to entry than is appropriate");
}
- }
- /**
- * @protected
- */
- async _uploadFromStream(source, remotePath, command) {
- const onError = (err) => this.ftp.closeWithError(err);
- source.once("error", onError);
- try {
- const validPath = await this.protectWhitespace(remotePath);
- await this.prepareTransfer(this.ftp);
- return await (0, transfer_1.uploadFrom)(source, {
- ftp: this.ftp,
- tracker: this._progressTracker,
- command,
- remotePath: validPath,
- type: "upload"
- });
- } finally {
- source.removeListener("error", onError);
+ 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;
}
- }
- /**
- * Download a remote file and pipe its data to a writable stream or to a local file.
- *
- * You can optionally define at which position of the remote file you'd like to start
- * downloading. If the destination you provide is a file, the offset will be applied
- * to it as well. For example: To resume a failed download, you'd request the size of
- * the local, partially downloaded file and use that as the offset. Assuming the size
- * is 23, you'd download the rest using `downloadTo("local.txt", "remote.txt", 23)`.
- *
- * @param destination Stream or path for a local file to write to.
- * @param fromRemotePath Path of the remote file to read from.
- * @param startAt Position within the remote file to start downloading at. If the destination is a file, this offset is also applied to it.
- */
- async downloadTo(destination, fromRemotePath, startAt = 0) {
- if (typeof destination === "string") {
- return this._downloadToFile(destination, fromRemotePath, startAt);
+ if (r >= writeLen) {
+ return super.write(data);
}
- return this._downloadToStream(destination, fromRemotePath, startAt);
+ return super.write(data.slice(0, r));
}
- /**
- * @protected
- */
- async _downloadToFile(localPath, remotePath, startAt) {
- const appendingToLocalFile = startAt > 0;
- const fileSystemFlags = appendingToLocalFile ? "r+" : "w";
- const fd = await fsOpen(localPath, fileSystemFlags);
- const destination = (0, fs_1.createWriteStream)("", {
- fd,
- start: startAt,
- autoClose: false
- });
- try {
- return await this._downloadToStream(destination, remotePath, startAt);
- } catch (err) {
- const localFileStats = await ignoreError(() => fsStat(localPath));
- const hasDownloadedData = localFileStats && localFileStats.size > 0;
- const shouldRemoveLocalFile = !appendingToLocalFile && !hasDownloadedData;
- if (shouldRemoveLocalFile) {
- await ignoreError(() => fsUnlink(localPath));
+ [SLURP](ex, global2) {
+ for (const k in ex) {
+ if (ex[k] !== null && ex[k] !== void 0 && !(global2 && k === "path")) {
+ this[k] = k === "path" || k === "linkpath" ? normPath(ex[k]) : ex[k];
}
- throw err;
- } finally {
- await ignoreError(() => fsClose(fd));
- }
- }
- /**
- * @protected
- */
- async _downloadToStream(destination, remotePath, startAt) {
- const onError = (err) => this.ftp.closeWithError(err);
- destination.once("error", onError);
- try {
- const validPath = await this.protectWhitespace(remotePath);
- await this.prepareTransfer(this.ftp);
- return await (0, transfer_1.downloadTo)(destination, {
- ftp: this.ftp,
- tracker: this._progressTracker,
- command: startAt > 0 ? `REST ${startAt}` : `RETR ${validPath}`,
- remotePath: validPath,
- type: "download"
- });
- } finally {
- destination.removeListener("error", onError);
- destination.end();
}
}
- /**
- * List files and directories in the current working directory, or from `path` if specified.
- *
- * @param [path] Path to remote file or directory.
- */
- async list(path10 = "") {
- const validPath = await this.protectWhitespace(path10);
- let lastError;
- for (const candidate of this.availableListCommands) {
- const command = validPath === "" ? candidate : `${candidate} ${validPath}`;
- await this.prepareTransfer(this.ftp);
- try {
- const parsedList = await this._requestListWithCommand(command);
- this.availableListCommands = [candidate];
- return parsedList;
- } catch (err) {
- const shouldTryNext = err instanceof FtpContext_1.FTPError;
- if (!shouldTryNext) {
- throw err;
- }
- lastError = err;
- }
- }
- throw lastError;
- }
- /**
- * @protected
- */
- async _requestListWithCommand(command) {
- const buffer = new StringWriter_1.StringWriter();
- await (0, transfer_1.downloadTo)(buffer, {
- ftp: this.ftp,
- tracker: this._progressTracker,
- command,
- remotePath: "",
- type: "list"
- });
- const text = buffer.getText(this.ftp.encoding);
- this.ftp.log(text);
- return this.parseList(text);
- }
- /**
- * Remove a directory and all of its content.
- *
- * @param remoteDirPath The path of the remote directory to delete.
- * @example client.removeDir("foo") // Remove directory 'foo' using a relative path.
- * @example client.removeDir("foo/bar") // Remove directory 'bar' using a relative path.
- * @example client.removeDir("/foo/bar") // Remove directory 'bar' using an absolute path.
- * @example client.removeDir("/") // Remove everything.
- */
- async removeDir(remoteDirPath) {
- return this._exitAtCurrentDirectory(async () => {
- await this.cd(remoteDirPath);
- const absoluteDirPath = await this.pwd();
- await this.clearWorkingDir();
- const dirIsRoot = absoluteDirPath === "/";
- if (!dirIsRoot) {
- await this.cdup();
- await this.removeEmptyDir(absoluteDirPath);
- }
- });
- }
- /**
- * Remove all files and directories in the working directory without removing
- * the working directory itself.
- */
- async clearWorkingDir() {
- for (const file of await this.list()) {
- if (file.isDirectory) {
- await this.cd(file.name);
- await this.clearWorkingDir();
- await this.cdup();
- await this.removeEmptyDir(file.name);
- } else {
- await this.remove(file.name);
- }
- }
- }
- /**
- * Upload the contents of a local directory to the remote working directory.
- *
- * This will overwrite existing files with the same names and reuse existing directories.
- * Unrelated files and directories will remain untouched. You can optionally provide a `remoteDirPath`
- * to put the contents inside a directory which will be created if necessary including all
- * intermediate directories. If you did provide a remoteDirPath the working directory will stay
- * the same as before calling this method.
- *
- * @param localDirPath Local path, e.g. "foo/bar" or "../test"
- * @param [remoteDirPath] Remote path of a directory to upload to. Working directory if undefined.
- */
- async uploadFromDir(localDirPath, remoteDirPath) {
- return this._exitAtCurrentDirectory(async () => {
- if (remoteDirPath) {
- await this.ensureDir(remoteDirPath);
- }
- return await this._uploadToWorkingDir(localDirPath);
- });
- }
- /**
- * @protected
- */
- async _uploadToWorkingDir(localDirPath) {
- const files = await fsReadDir(localDirPath);
- for (const file of files) {
- const fullPath = (0, path_1.join)(localDirPath, file);
- const stats = await fsStat(fullPath);
- if (stats.isFile()) {
- await this.uploadFrom(fullPath, file);
- } else if (stats.isDirectory()) {
- await this._openDir(file);
- await this._uploadToWorkingDir(fullPath);
- await this.cdup();
- }
- }
- }
- /**
- * Download all files and directories of the working directory to a local directory.
- *
- * @param localDirPath The local directory to download to.
- * @param remoteDirPath Remote directory to download. Current working directory if not specified.
- */
- async downloadToDir(localDirPath, remoteDirPath) {
- return this._exitAtCurrentDirectory(async () => {
- if (remoteDirPath) {
- await this.cd(remoteDirPath);
- }
- return await this._downloadFromWorkingDir(localDirPath);
- });
- }
- /**
- * @protected
- */
- async _downloadFromWorkingDir(localDirPath) {
- await ensureLocalDirectory(localDirPath);
- for (const file of await this.list()) {
- const localPath = (0, path_1.join)(localDirPath, file.name);
- if (file.isDirectory) {
- await this.cd(file.name);
- await this._downloadFromWorkingDir(localPath);
- await this.cdup();
- } else if (file.isFile) {
- await this.downloadTo(localPath, file.name);
- }
- }
- }
- /**
- * Make sure a given remote path exists, creating all directories as necessary.
- * This function also changes the current working directory to the given path.
- */
- async ensureDir(remoteDirPath) {
- if (remoteDirPath.startsWith("/")) {
- await this.cd("/");
- }
- const names = remoteDirPath.split("/").filter((name) => name !== "");
- for (const name of names) {
- await this._openDir(name);
- }
- }
- /**
- * Try to create a directory and enter it. This will not raise an exception if the directory
- * couldn't be created if for example it already exists.
- * @protected
- */
- async _openDir(dirName) {
- await this.sendIgnoringError("MKD " + dirName);
- await this.cd(dirName);
- }
- /**
- * Remove an empty directory, will fail if not empty.
- */
- async removeEmptyDir(path10) {
- const validPath = await this.protectWhitespace(path10);
- return this.send(`RMD ${validPath}`);
- }
- /**
- * FTP servers can't handle filenames that have leading whitespace. This method transforms
- * a given path to fix that issue for most cases.
- */
- async protectWhitespace(path10) {
- if (!path10.startsWith(" ")) {
- return path10;
- }
- const pwd = await this.pwd();
- const absolutePathPrefix = pwd.endsWith("/") ? pwd : pwd + "/";
- return absolutePathPrefix + path10;
- }
- async _exitAtCurrentDirectory(func) {
- const userDir = await this.pwd();
- try {
- return await func();
- } finally {
- if (!this.closed) {
- await ignoreError(() => this.cd(userDir));
- }
- }
- }
- /**
- * Try all available transfer strategies and pick the first one that works. Update `client` to
- * use the working strategy for all successive transfer requests.
- *
- * @returns a function that will try the provided strategies.
- */
- _enterFirstCompatibleMode(strategies) {
- return async (ftp) => {
- ftp.log("Trying to find optimal transfer strategy...");
- let lastError = void 0;
- for (const strategy of strategies) {
- try {
- const res = await strategy(ftp);
- ftp.log("Optimal transfer strategy found.");
- this.prepareTransfer = strategy;
- return res;
- } catch (err) {
- lastError = err;
- }
- }
- throw new Error(`None of the available transfer strategies work. Last error response was '${lastError}'.`);
- };
- }
- /**
- * DEPRECATED, use `uploadFrom`.
- * @deprecated
- */
- async upload(source, toRemotePath, options = {}) {
- this.ftp.log("Warning: upload() has been deprecated, use uploadFrom().");
- return this.uploadFrom(source, toRemotePath, options);
- }
- /**
- * DEPRECATED, use `appendFrom`.
- * @deprecated
- */
- async append(source, toRemotePath, options = {}) {
- this.ftp.log("Warning: append() has been deprecated, use appendFrom().");
- return this.appendFrom(source, toRemotePath, options);
- }
- /**
- * DEPRECATED, use `downloadTo`.
- * @deprecated
- */
- async download(destination, fromRemotePath, startAt = 0) {
- this.ftp.log("Warning: download() has been deprecated, use downloadTo().");
- return this.downloadTo(destination, fromRemotePath, startAt);
- }
- /**
- * DEPRECATED, use `uploadFromDir`.
- * @deprecated
- */
- async uploadDir(localDirPath, remoteDirPath) {
- this.ftp.log("Warning: uploadDir() has been deprecated, use uploadFromDir().");
- return this.uploadFromDir(localDirPath, remoteDirPath);
- }
- /**
- * DEPRECATED, use `downloadToDir`.
- * @deprecated
- */
- async downloadDir(localDirPath) {
- this.ftp.log("Warning: downloadDir() has been deprecated, use downloadToDir().");
- return this.downloadToDir(localDirPath);
- }
};
- exports.Client = Client;
- async function ensureLocalDirectory(path10) {
- try {
- await fsStat(path10);
- } catch (err) {
- await fsMkDir(path10, { recursive: true });
- }
- }
- async function ignoreError(func) {
- try {
- return await func();
- } catch (err) {
- return void 0;
- }
- }
}
});
-// .yarn/cache/basic-ftp-npm-5.0.4-5950651e19-0bd580652a.zip/node_modules/basic-ftp/dist/StringEncoding.js
-var require_StringEncoding = __commonJS({
- ".yarn/cache/basic-ftp-npm-5.0.4-5950651e19-0bd580652a.zip/node_modules/basic-ftp/dist/StringEncoding.js"(exports) {
+// .yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/types.js
+var require_types = __commonJS({
+ ".yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/types.js"(exports) {
"use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
+ exports.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"]
+ ]);
+ exports.code = new Map(Array.from(exports.name).map((kv) => [kv[1], kv[0]]));
}
});
-// .yarn/cache/basic-ftp-npm-5.0.4-5950651e19-0bd580652a.zip/node_modules/basic-ftp/dist/index.js
-var require_dist6 = __commonJS({
- ".yarn/cache/basic-ftp-npm-5.0.4-5950651e19-0bd580652a.zip/node_modules/basic-ftp/dist/index.js"(exports) {
+// .yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/large-numbers.js
+var require_large_numbers = __commonJS({
+ ".yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/large-numbers.js"(exports, module2) {
"use strict";
- var __createBinding2 = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) {
- if (k2 === void 0)
- k2 = k;
- var desc = Object.getOwnPropertyDescriptor(m, k);
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
- desc = { enumerable: true, get: function() {
- return m[k];
- } };
+ var 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);
}
- Object.defineProperty(o, k2, desc);
- } : function(o, m, k, k2) {
- if (k2 === void 0)
- k2 = k;
- o[k2] = m[k];
- });
- var __exportStar2 = exports && exports.__exportStar || function(m, exports2) {
- for (var p in m)
- if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports2, p))
- __createBinding2(exports2, m, p);
+ return buf;
};
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.enterPassiveModeIPv6 = exports.enterPassiveModeIPv4 = void 0;
- __exportStar2(require_Client(), exports);
- __exportStar2(require_FtpContext(), exports);
- __exportStar2(require_FileInfo(), exports);
- __exportStar2(require_parseList(), exports);
- __exportStar2(require_StringEncoding(), exports);
- var transfer_1 = require_transfer();
- Object.defineProperty(exports, "enterPassiveModeIPv4", { enumerable: true, get: function() {
- return transfer_1.enterPassiveModeIPv4;
- } });
- Object.defineProperty(exports, "enterPassiveModeIPv6", { enumerable: true, get: function() {
- return transfer_1.enterPassiveModeIPv6;
- } });
- }
-});
-
-// .yarn/cache/get-uri-npm-6.0.2-b89b919843-50ef3e0b76.zip/node_modules/get-uri/dist/ftp.js
-var require_ftp = __commonJS({
- ".yarn/cache/get-uri-npm-6.0.2-b89b919843-50ef3e0b76.zip/node_modules/get-uri/dist/ftp.js"(exports) {
- "use strict";
- var __importDefault2 = exports && exports.__importDefault || function(mod) {
- return mod && mod.__esModule ? mod : { "default": mod };
+ var encodePositive = (num, buf) => {
+ buf[0] = 128;
+ for (var i = buf.length; i > 1; i--) {
+ buf[i - 1] = num & 255;
+ num = Math.floor(num / 256);
+ }
};
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.ftp = void 0;
- var basic_ftp_1 = require_dist6();
- var stream_1 = require("stream");
- var path_1 = require("path");
- var debug_1 = __importDefault2(require_src2());
- var notfound_1 = __importDefault2(require_notfound());
- var notmodified_1 = __importDefault2(require_notmodified());
- var debug2 = (0, debug_1.default)("get-uri:ftp");
- var ftp = async (url, opts = {}) => {
- const { cache } = opts;
- const filepath = decodeURIComponent(url.pathname);
- let lastModified;
- if (!filepath) {
- throw new TypeError('No "pathname"!');
- }
- const client = new basic_ftp_1.Client();
- try {
- const host = url.hostname || url.host || "localhost";
- const port = parseInt(url.port || "0", 10) || 21;
- const user = url.username ? decodeURIComponent(url.username) : void 0;
- const password = url.password ? decodeURIComponent(url.password) : void 0;
- await client.access({
- host,
- port,
- user,
- password,
- ...opts
- });
- try {
- lastModified = await client.lastMod(filepath);
- } catch (err) {
- if (err.code === 550) {
- throw new notfound_1.default();
- }
- }
- if (!lastModified) {
- const list = await client.list((0, path_1.dirname)(filepath));
- const name = (0, path_1.basename)(filepath);
- const entry = list.find((e) => e.name === name);
- if (entry) {
- lastModified = entry.modifiedAt;
- }
+ var 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);
}
- if (lastModified) {
- if (isNotModified()) {
- throw new notmodified_1.default();
- }
+ }
+ };
+ var parse = (buf) => {
+ const pre = buf[0];
+ const value = pre === 128 ? pos(buf.slice(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;
+ };
+ var twos = (buf) => {
+ var len = buf.length;
+ var sum = 0;
+ var flipped = false;
+ for (var i = len - 1; i > -1; i--) {
+ var byte = buf[i];
+ var f;
+ if (flipped) {
+ f = onesComp(byte);
+ } else if (byte === 0) {
+ f = byte;
} else {
- throw new notfound_1.default();
+ flipped = true;
+ f = twosComp(byte);
+ }
+ if (f !== 0) {
+ sum -= f * Math.pow(256, len - i - 1);
}
- const stream = new stream_1.PassThrough();
- const rs = stream;
- client.downloadTo(stream, filepath).then((result) => {
- debug2(result.message);
- client.close();
- });
- rs.lastModified = lastModified;
- return rs;
- } catch (err) {
- client.close();
- throw err;
}
- function isNotModified() {
- if (cache?.lastModified && lastModified) {
- return +cache.lastModified === +lastModified;
+ return sum;
+ };
+ var pos = (buf) => {
+ var len = buf.length;
+ var sum = 0;
+ for (var i = len - 1; i > -1; i--) {
+ var byte = buf[i];
+ if (byte !== 0) {
+ sum += byte * Math.pow(256, len - i - 1);
}
- return false;
}
+ return sum;
+ };
+ var onesComp = (byte) => (255 ^ byte) & 255;
+ var twosComp = (byte) => (255 ^ byte) + 1 & 255;
+ module2.exports = {
+ encode,
+ parse
};
- exports.ftp = ftp;
}
});
-// .yarn/cache/get-uri-npm-6.0.2-b89b919843-50ef3e0b76.zip/node_modules/get-uri/dist/http-error.js
-var require_http_error = __commonJS({
- ".yarn/cache/get-uri-npm-6.0.2-b89b919843-50ef3e0b76.zip/node_modules/get-uri/dist/http-error.js"(exports) {
+// .yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/header.js
+var require_header = __commonJS({
+ ".yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/header.js"(exports, module2) {
"use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var http_1 = require("http");
- var HTTPError = class extends Error {
- constructor(statusCode, message = http_1.STATUS_CODES[statusCode]) {
- super(message);
- this.statusCode = statusCode;
- this.code = `E${String(message).toUpperCase().replace(/\s+/g, "")}`;
- }
- };
- exports.default = HTTPError;
- }
-});
-
-// .yarn/cache/get-uri-npm-6.0.2-b89b919843-50ef3e0b76.zip/node_modules/get-uri/dist/http.js
-var require_http = __commonJS({
- ".yarn/cache/get-uri-npm-6.0.2-b89b919843-50ef3e0b76.zip/node_modules/get-uri/dist/http.js"(exports) {
- "use strict";
- var __importDefault2 = exports && exports.__importDefault || function(mod) {
- return mod && mod.__esModule ? mod : { "default": mod };
- };
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.http = void 0;
- var http_1 = __importDefault2(require("http"));
- var https_1 = __importDefault2(require("https"));
- var events_1 = require("events");
- var debug_1 = __importDefault2(require_src2());
- var http_error_1 = __importDefault2(require_http_error());
- var notfound_1 = __importDefault2(require_notfound());
- var notmodified_1 = __importDefault2(require_notmodified());
- var debug2 = (0, debug_1.default)("get-uri:http");
- var http = async (url, opts = {}) => {
- debug2("GET %o", url.href);
- const cache = getCache(url, opts.cache);
- if (cache && isFresh(cache) && typeof cache.statusCode === "number") {
- const type2 = cache.statusCode / 100 | 0;
- if (type2 === 3 && cache.headers.location) {
- debug2("cached redirect");
- throw new Error("TODO: implement cached redirects!");
- }
- throw new notmodified_1.default();
- }
- const maxRedirects = typeof opts.maxRedirects === "number" ? opts.maxRedirects : 5;
- debug2("allowing %o max redirects", maxRedirects);
- let mod;
- if (opts.http) {
- mod = opts.http;
- debug2("using secure `https` core module");
- } else {
- mod = http_1.default;
- debug2("using `http` core module");
- }
- const options = { ...opts };
- if (cache) {
- if (!options.headers) {
- options.headers = {};
- }
- const lastModified = cache.headers["last-modified"];
- if (lastModified) {
- options.headers["If-Modified-Since"] = lastModified;
- debug2('added "If-Modified-Since" request header: %o', lastModified);
- }
- const etag = cache.headers.etag;
- if (etag) {
- options.headers["If-None-Match"] = etag;
- debug2('added "If-None-Match" request header: %o', etag);
- }
- }
- const req = mod.get(url, options);
- const [res] = await (0, events_1.once)(req, "response");
- const code = res.statusCode || 0;
- res.date = Date.now();
- res.parsed = url;
- debug2("got %o response status code", code);
- const type = code / 100 | 0;
- const location = res.headers.location;
- if (type === 3 && location) {
- if (!opts.redirects)
- opts.redirects = [];
- const redirects = opts.redirects;
- if (redirects.length < maxRedirects) {
- debug2('got a "redirect" status code with Location: %o', location);
- res.resume();
- redirects.push(res);
- const newUri = new URL(location, url.href);
- debug2("resolved redirect URL: %o", newUri.href);
- const left = maxRedirects - redirects.length;
- debug2("%o more redirects allowed after this one", left);
- if (newUri.protocol !== url.protocol) {
- opts.http = newUri.protocol === "https:" ? https_1.default : void 0;
- }
- return (0, exports.http)(newUri, opts);
- }
- }
- if (type !== 2) {
- res.resume();
- if (code === 304) {
- throw new notmodified_1.default();
- } else if (code === 404) {
- throw new notfound_1.default();
- }
- throw new http_error_1.default(code);
- }
- if (opts.redirects) {
- res.redirects = opts.redirects;
+ var types = require_types();
+ var pathModule = require("path").posix;
+ var large = require_large_numbers();
+ var SLURP = Symbol("slurp");
+ var TYPE = Symbol("type");
+ var Header = class {
+ constructor(data, off, ex, gex) {
+ this.cksumValid = false;
+ this.needPax = false;
+ this.nullBlock = false;
+ this.block = null;
+ this.path = null;
+ this.mode = null;
+ this.uid = null;
+ this.gid = null;
+ this.size = null;
+ this.mtime = null;
+ this.cksum = null;
+ this[TYPE] = "0";
+ this.linkpath = null;
+ this.uname = null;
+ this.gname = null;
+ this.devmaj = 0;
+ this.devmin = 0;
+ this.atime = null;
+ this.ctime = null;
+ if (Buffer.isBuffer(data)) {
+ this.decode(data, off || 0, ex, gex);
+ } else if (data) {
+ this.set(data);
+ }
}
- return res;
- };
- exports.http = http;
- function isFresh(cache) {
- let fresh = false;
- let expires = parseInt(cache.headers.expires || "", 10);
- const cacheControl = cache.headers["cache-control"];
- if (cacheControl) {
- debug2("Cache-Control: %o", cacheControl);
- const parts = cacheControl.split(/,\s*?\b/);
- for (let i = 0; i < parts.length; i++) {
- const part = parts[i];
- const subparts = part.split("=");
- const name = subparts[0];
- switch (name) {
- case "max-age":
- expires = (cache.date || 0) + parseInt(subparts[1], 10) * 1e3;
- fresh = Date.now() < expires;
- if (fresh) {
- debug2('cache is "fresh" due to previous %o Cache-Control param', part);
- }
- return fresh;
- case "must-revalidate":
- break;
- case "no-cache":
- case "no-store":
- debug2('cache is "stale" due to explicit %o Cache-Control param', name);
- return false;
- default:
- break;
- }
+ decode(buf, off, ex, gex) {
+ if (!off) {
+ off = 0;
}
- } else if (expires) {
- debug2("Expires: %o", expires);
- fresh = Date.now() < expires;
- if (fresh) {
- debug2('cache is "fresh" due to previous Expires response header');
+ if (!buf || !(buf.length >= off + 512)) {
+ throw new Error("need 512 bytes for header");
}
- return fresh;
- }
- return false;
- }
- function getCache(url, cache) {
- if (cache) {
- if (cache.parsed && cache.parsed.href === url.href) {
- return cache;
+ this.path = decString(buf, off, 100);
+ this.mode = decNumber(buf, off + 100, 8);
+ this.uid = decNumber(buf, off + 108, 8);
+ this.gid = decNumber(buf, off + 116, 8);
+ this.size = decNumber(buf, off + 124, 12);
+ this.mtime = decDate(buf, off + 136, 12);
+ this.cksum = decNumber(buf, off + 148, 12);
+ this[SLURP](ex);
+ this[SLURP](gex, true);
+ this[TYPE] = decString(buf, off + 156, 1);
+ if (this[TYPE] === "") {
+ this[TYPE] = "0";
}
- if (cache.redirects) {
- for (let i = 0; i < cache.redirects.length; i++) {
- const c = getCache(url, cache.redirects[i]);
- if (c) {
- return c;
- }
- }
+ if (this[TYPE] === "0" && this.path.slice(-1) === "/") {
+ this[TYPE] = "5";
}
- }
- return null;
- }
- }
-});
-
-// .yarn/cache/get-uri-npm-6.0.2-b89b919843-50ef3e0b76.zip/node_modules/get-uri/dist/https.js
-var require_https = __commonJS({
- ".yarn/cache/get-uri-npm-6.0.2-b89b919843-50ef3e0b76.zip/node_modules/get-uri/dist/https.js"(exports) {
- "use strict";
- var __importDefault2 = exports && exports.__importDefault || function(mod) {
- return mod && mod.__esModule ? mod : { "default": mod };
- };
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.https = void 0;
- var https_1 = __importDefault2(require("https"));
- var http_1 = require_http();
- var https = (url, opts) => {
- return (0, http_1.http)(url, { ...opts, http: https_1.default });
- };
- exports.https = https;
- }
-});
-
-// .yarn/cache/get-uri-npm-6.0.2-b89b919843-50ef3e0b76.zip/node_modules/get-uri/dist/index.js
-var require_dist7 = __commonJS({
- ".yarn/cache/get-uri-npm-6.0.2-b89b919843-50ef3e0b76.zip/node_modules/get-uri/dist/index.js"(exports) {
- "use strict";
- var __importDefault2 = exports && exports.__importDefault || function(mod) {
- return mod && mod.__esModule ? mod : { "default": mod };
- };
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.getUri = exports.isValidProtocol = exports.protocols = void 0;
- var debug_1 = __importDefault2(require_src2());
- var data_1 = require_data();
- var file_1 = require_file2();
- var ftp_1 = require_ftp();
- var http_1 = require_http();
- var https_1 = require_https();
- var debug2 = (0, debug_1.default)("get-uri");
- exports.protocols = {
- data: data_1.data,
- file: file_1.file,
- ftp: ftp_1.ftp,
- http: http_1.http,
- https: https_1.https
- };
- var VALID_PROTOCOLS = new Set(Object.keys(exports.protocols));
- function isValidProtocol(p) {
- return VALID_PROTOCOLS.has(p);
- }
- exports.isValidProtocol = isValidProtocol;
- async function getUri(uri, opts) {
- debug2("getUri(%o)", uri);
- if (!uri) {
- throw new TypeError('Must pass in a URI to "getUri()"');
- }
- const url = typeof uri === "string" ? new URL(uri) : uri;
- const protocol = url.protocol.replace(/:$/, "");
- if (!isValidProtocol(protocol)) {
- throw new TypeError(`Unsupported protocol "${protocol}" specified in URI: "${uri}"`);
- }
- const getter = exports.protocols[protocol];
- return getter(url, opts);
- }
- exports.getUri = getUri;
- }
-});
-
-// .yarn/cache/estraverse-npm-5.3.0-03284f8f63-1ff9447b96.zip/node_modules/estraverse/estraverse.js
-var require_estraverse = __commonJS({
- ".yarn/cache/estraverse-npm-5.3.0-03284f8f63-1ff9447b96.zip/node_modules/estraverse/estraverse.js"(exports) {
- (function clone(exports2) {
- "use strict";
- var Syntax, VisitorOption, VisitorKeys, BREAK, SKIP, REMOVE;
- function deepCopy(obj) {
- var ret = {}, key, val;
- for (key in obj) {
- if (obj.hasOwnProperty(key)) {
- val = obj[key];
- if (typeof val === "object" && val !== null) {
- ret[key] = deepCopy(val);
- } else {
- ret[key] = val;
+ if (this[TYPE] === "5") {
+ this.size = 0;
+ }
+ this.linkpath = decString(buf, off + 157, 100);
+ if (buf.slice(off + 257, off + 265).toString() === "ustar\x0000") {
+ this.uname = decString(buf, off + 265, 32);
+ this.gname = decString(buf, off + 297, 32);
+ this.devmaj = decNumber(buf, off + 329, 8);
+ this.devmin = decNumber(buf, off + 337, 8);
+ 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 = decDate(buf, off + 476, 12);
+ this.ctime = decDate(buf, off + 488, 12);
}
}
- return ret;
- }
- function upperBound(array, func) {
- var diff, len, i, current;
- len = array.length;
- i = 0;
- while (len) {
- diff = len >>> 1;
- current = i + diff;
- if (func(array[current])) {
- len = diff;
- } else {
- i = current + 1;
- len -= diff + 1;
- }
- }
- return i;
- }
- Syntax = {
- AssignmentExpression: "AssignmentExpression",
- AssignmentPattern: "AssignmentPattern",
- ArrayExpression: "ArrayExpression",
- ArrayPattern: "ArrayPattern",
- ArrowFunctionExpression: "ArrowFunctionExpression",
- AwaitExpression: "AwaitExpression",
- // CAUTION: It's deferred to ES7.
- BlockStatement: "BlockStatement",
- BinaryExpression: "BinaryExpression",
- BreakStatement: "BreakStatement",
- CallExpression: "CallExpression",
- CatchClause: "CatchClause",
- ChainExpression: "ChainExpression",
- ClassBody: "ClassBody",
- ClassDeclaration: "ClassDeclaration",
- ClassExpression: "ClassExpression",
- ComprehensionBlock: "ComprehensionBlock",
- // CAUTION: It's deferred to ES7.
- ComprehensionExpression: "ComprehensionExpression",
- // CAUTION: It's deferred to ES7.
- ConditionalExpression: "ConditionalExpression",
- ContinueStatement: "ContinueStatement",
- DebuggerStatement: "DebuggerStatement",
- DirectiveStatement: "DirectiveStatement",
- DoWhileStatement: "DoWhileStatement",
- EmptyStatement: "EmptyStatement",
- ExportAllDeclaration: "ExportAllDeclaration",
- ExportDefaultDeclaration: "ExportDefaultDeclaration",
- ExportNamedDeclaration: "ExportNamedDeclaration",
- ExportSpecifier: "ExportSpecifier",
- ExpressionStatement: "ExpressionStatement",
- ForStatement: "ForStatement",
- ForInStatement: "ForInStatement",
- ForOfStatement: "ForOfStatement",
- FunctionDeclaration: "FunctionDeclaration",
- FunctionExpression: "FunctionExpression",
- GeneratorExpression: "GeneratorExpression",
- // CAUTION: It's deferred to ES7.
- Identifier: "Identifier",
- IfStatement: "IfStatement",
- ImportExpression: "ImportExpression",
- ImportDeclaration: "ImportDeclaration",
- ImportDefaultSpecifier: "ImportDefaultSpecifier",
- ImportNamespaceSpecifier: "ImportNamespaceSpecifier",
- ImportSpecifier: "ImportSpecifier",
- Literal: "Literal",
- LabeledStatement: "LabeledStatement",
- LogicalExpression: "LogicalExpression",
- MemberExpression: "MemberExpression",
- MetaProperty: "MetaProperty",
- MethodDefinition: "MethodDefinition",
- ModuleSpecifier: "ModuleSpecifier",
- NewExpression: "NewExpression",
- ObjectExpression: "ObjectExpression",
- ObjectPattern: "ObjectPattern",
- PrivateIdentifier: "PrivateIdentifier",
- Program: "Program",
- Property: "Property",
- PropertyDefinition: "PropertyDefinition",
- RestElement: "RestElement",
- ReturnStatement: "ReturnStatement",
- SequenceExpression: "SequenceExpression",
- SpreadElement: "SpreadElement",
- Super: "Super",
- SwitchStatement: "SwitchStatement",
- SwitchCase: "SwitchCase",
- TaggedTemplateExpression: "TaggedTemplateExpression",
- TemplateElement: "TemplateElement",
- TemplateLiteral: "TemplateLiteral",
- ThisExpression: "ThisExpression",
- ThrowStatement: "ThrowStatement",
- TryStatement: "TryStatement",
- UnaryExpression: "UnaryExpression",
- UpdateExpression: "UpdateExpression",
- VariableDeclaration: "VariableDeclaration",
- VariableDeclarator: "VariableDeclarator",
- WhileStatement: "WhileStatement",
- WithStatement: "WithStatement",
- YieldExpression: "YieldExpression"
- };
- VisitorKeys = {
- AssignmentExpression: ["left", "right"],
- AssignmentPattern: ["left", "right"],
- ArrayExpression: ["elements"],
- ArrayPattern: ["elements"],
- ArrowFunctionExpression: ["params", "body"],
- AwaitExpression: ["argument"],
- // CAUTION: It's deferred to ES7.
- BlockStatement: ["body"],
- BinaryExpression: ["left", "right"],
- BreakStatement: ["label"],
- CallExpression: ["callee", "arguments"],
- CatchClause: ["param", "body"],
- ChainExpression: ["expression"],
- ClassBody: ["body"],
- ClassDeclaration: ["id", "superClass", "body"],
- ClassExpression: ["id", "superClass", "body"],
- ComprehensionBlock: ["left", "right"],
- // CAUTION: It's deferred to ES7.
- ComprehensionExpression: ["blocks", "filter", "body"],
- // CAUTION: It's deferred to ES7.
- ConditionalExpression: ["test", "consequent", "alternate"],
- ContinueStatement: ["label"],
- DebuggerStatement: [],
- DirectiveStatement: [],
- DoWhileStatement: ["body", "test"],
- EmptyStatement: [],
- ExportAllDeclaration: ["source"],
- ExportDefaultDeclaration: ["declaration"],
- ExportNamedDeclaration: ["declaration", "specifiers", "source"],
- ExportSpecifier: ["exported", "local"],
- ExpressionStatement: ["expression"],
- ForStatement: ["init", "test", "update", "body"],
- ForInStatement: ["left", "right", "body"],
- ForOfStatement: ["left", "right", "body"],
- FunctionDeclaration: ["id", "params", "body"],
- FunctionExpression: ["id", "params", "body"],
- GeneratorExpression: ["blocks", "filter", "body"],
- // CAUTION: It's deferred to ES7.
- Identifier: [],
- IfStatement: ["test", "consequent", "alternate"],
- ImportExpression: ["source"],
- ImportDeclaration: ["specifiers", "source"],
- ImportDefaultSpecifier: ["local"],
- ImportNamespaceSpecifier: ["local"],
- ImportSpecifier: ["imported", "local"],
- Literal: [],
- LabeledStatement: ["label", "body"],
- LogicalExpression: ["left", "right"],
- MemberExpression: ["object", "property"],
- MetaProperty: ["meta", "property"],
- MethodDefinition: ["key", "value"],
- ModuleSpecifier: [],
- NewExpression: ["callee", "arguments"],
- ObjectExpression: ["properties"],
- ObjectPattern: ["properties"],
- PrivateIdentifier: [],
- Program: ["body"],
- Property: ["key", "value"],
- PropertyDefinition: ["key", "value"],
- RestElement: ["argument"],
- ReturnStatement: ["argument"],
- SequenceExpression: ["expressions"],
- SpreadElement: ["argument"],
- Super: [],
- SwitchStatement: ["discriminant", "cases"],
- SwitchCase: ["test", "consequent"],
- TaggedTemplateExpression: ["tag", "quasi"],
- TemplateElement: [],
- TemplateLiteral: ["quasis", "expressions"],
- ThisExpression: [],
- ThrowStatement: ["argument"],
- TryStatement: ["block", "handler", "finalizer"],
- UnaryExpression: ["argument"],
- UpdateExpression: ["argument"],
- VariableDeclaration: ["declarations"],
- VariableDeclarator: ["id", "init"],
- WhileStatement: ["test", "body"],
- WithStatement: ["object", "body"],
- YieldExpression: ["argument"]
- };
- BREAK = {};
- SKIP = {};
- REMOVE = {};
- VisitorOption = {
- Break: BREAK,
- Skip: SKIP,
- Remove: REMOVE
- };
- function Reference(parent, key) {
- this.parent = parent;
- this.key = key;
- }
- Reference.prototype.replace = function replace2(node) {
- this.parent[this.key] = node;
- };
- Reference.prototype.remove = function remove() {
- if (Array.isArray(this.parent)) {
- this.parent.splice(this.key, 1);
- return true;
- } else {
- this.replace(null);
- return false;
+ 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 === null && sum === 8 * 32) {
+ this.nullBlock = true;
}
- };
- function Element(node, path10, wrap, ref) {
- this.node = node;
- this.path = path10;
- this.wrap = wrap;
- this.ref = ref;
- }
- function Controller() {
}
- Controller.prototype.path = function path10() {
- var i, iz, j, jz, result, element;
- function addToPath(result2, path11) {
- if (Array.isArray(path11)) {
- for (j = 0, jz = path11.length; j < jz; ++j) {
- result2.push(path11[j]);
- }
- } else {
- result2.push(path11);
+ [SLURP](ex, global2) {
+ for (const k in ex) {
+ if (ex[k] !== null && ex[k] !== void 0 && !(global2 && k === "path")) {
+ this[k] = ex[k];
}
}
- if (!this.__current.path) {
- return null;
+ }
+ encode(buf, off) {
+ if (!buf) {
+ buf = this.block = Buffer.alloc(512);
+ off = 0;
}
- result = [];
- for (i = 2, iz = this.__leavelist.length; i < iz; ++i) {
- element = this.__leavelist[i];
- addToPath(result, element.path);
+ if (!off) {
+ off = 0;
}
- addToPath(result, this.__current.path);
- return result;
- };
- Controller.prototype.type = function() {
- var node = this.current();
- return node.type || this.__current.wrap;
- };
- Controller.prototype.parents = function parents() {
- var i, iz, result;
- result = [];
- for (i = 1, iz = this.__leavelist.length; i < iz; ++i) {
- result.push(this.__leavelist[i].node);
+ if (!(buf.length >= off + 512)) {
+ throw new Error("need 512 bytes for header");
}
- return result;
- };
- Controller.prototype.current = function current() {
- return this.__current.node;
- };
- Controller.prototype.__execute = function __execute(callback, element) {
- var previous, result;
- result = void 0;
- previous = this.__current;
- this.__current = element;
- this.__state = null;
- if (callback) {
- result = callback.call(this, element.node, this.__leavelist[this.__leavelist.length - 1].node);
+ const prefixSize = this.ctime || this.atime ? 130 : 155;
+ const split = splitPrefix(this.path || "", prefixSize);
+ const path10 = split[0];
+ const prefix = split[1];
+ this.needPax = split[2];
+ this.needPax = encString(buf, off, 100, path10) || 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] = this[TYPE].charCodeAt(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;
}
- this.__current = previous;
- return result;
- };
- Controller.prototype.notify = function notify(flag) {
- this.__state = flag;
- };
- Controller.prototype.skip = function() {
- this.notify(SKIP);
- };
- Controller.prototype["break"] = function() {
- this.notify(BREAK);
- };
- Controller.prototype.remove = function() {
- this.notify(REMOVE);
- };
- Controller.prototype.__initialize = function(root, visitor) {
- this.visitor = visitor;
- this.root = root;
- this.__worklist = [];
- this.__leavelist = [];
- this.__current = null;
- this.__state = null;
- this.__fallback = null;
- if (visitor.fallback === "iteration") {
- this.__fallback = Object.keys;
- } else if (typeof visitor.fallback === "function") {
- this.__fallback = visitor.fallback;
- }
- this.__keys = VisitorKeys;
- if (visitor.keys) {
- this.__keys = Object.assign(Object.create(this.__keys), visitor.keys);
+ let sum = 8 * 32;
+ for (let i = off; i < off + 148; i++) {
+ sum += buf[i];
}
- };
- function isNode(node) {
- if (node == null) {
- return false;
+ for (let i = off + 156; i < off + 512; i++) {
+ sum += buf[i];
}
- return typeof node === "object" && typeof node.type === "string";
- }
- function isProperty(nodeType, key) {
- return (nodeType === Syntax.ObjectExpression || nodeType === Syntax.ObjectPattern) && "properties" === key;
+ this.cksum = sum;
+ encNumber(buf, off + 148, 8, this.cksum);
+ this.cksumValid = true;
+ return this.needPax;
}
- function candidateExistsInLeaveList(leavelist, candidate) {
- for (var i = leavelist.length - 1; i >= 0; --i) {
- if (leavelist[i].node === candidate) {
- return true;
+ set(data) {
+ for (const i in data) {
+ if (data[i] !== null && data[i] !== void 0) {
+ this[i] = data[i];
}
}
- return false;
}
- Controller.prototype.traverse = function traverse2(root, visitor) {
- var worklist, leavelist, element, node, nodeType, ret, key, current, current2, candidates, candidate, sentinel;
- this.__initialize(root, visitor);
- sentinel = {};
- worklist = this.__worklist;
- leavelist = this.__leavelist;
- worklist.push(new Element(root, null, null, null));
- leavelist.push(new Element(null, null, null, null));
- while (worklist.length) {
- element = worklist.pop();
- if (element === sentinel) {
- element = leavelist.pop();
- ret = this.__execute(visitor.leave, element);
- if (this.__state === BREAK || ret === BREAK) {
- return;
- }
- continue;
- }
- if (element.node) {
- ret = this.__execute(visitor.enter, element);
- if (this.__state === BREAK || ret === BREAK) {
- return;
- }
- worklist.push(sentinel);
- leavelist.push(element);
- if (this.__state === SKIP || ret === SKIP) {
- continue;
- }
- node = element.node;
- nodeType = node.type || element.wrap;
- candidates = this.__keys[nodeType];
- if (!candidates) {
- if (this.__fallback) {
- candidates = this.__fallback(node);
- } else {
- throw new Error("Unknown node type " + nodeType + ".");
- }
- }
- current = candidates.length;
- while ((current -= 1) >= 0) {
- key = candidates[current];
- candidate = node[key];
- if (!candidate) {
- continue;
- }
- if (Array.isArray(candidate)) {
- current2 = candidate.length;
- while ((current2 -= 1) >= 0) {
- if (!candidate[current2]) {
- continue;
- }
- if (candidateExistsInLeaveList(leavelist, candidate[current2])) {
- continue;
- }
- if (isProperty(nodeType, candidates[current])) {
- element = new Element(candidate[current2], [key, current2], "Property", null);
- } else if (isNode(candidate[current2])) {
- element = new Element(candidate[current2], [key, current2], null, null);
- } else {
- continue;
- }
- worklist.push(element);
- }
- } else if (isNode(candidate)) {
- if (candidateExistsInLeaveList(leavelist, candidate)) {
- continue;
- }
- worklist.push(new Element(candidate, key, null, null));
- }
- }
- }
- }
- };
- Controller.prototype.replace = function replace2(root, visitor) {
- var worklist, leavelist, node, nodeType, target, element, current, current2, candidates, candidate, sentinel, outer, key;
- function removeElem(element2) {
- var i, key2, nextElem, parent;
- if (element2.ref.remove()) {
- key2 = element2.ref.key;
- parent = element2.ref.parent;
- i = worklist.length;
- while (i--) {
- nextElem = worklist[i];
- if (nextElem.ref && nextElem.ref.parent === parent) {
- if (nextElem.ref.key < key2) {
- break;
- }
- --nextElem.ref.key;
- }
- }
- }
+ get type() {
+ return types.name.get(this[TYPE]) || this[TYPE];
+ }
+ get typeKey() {
+ return this[TYPE];
+ }
+ set type(type) {
+ if (types.code.has(type)) {
+ this[TYPE] = types.code.get(type);
+ } else {
+ this[TYPE] = type;
}
- this.__initialize(root, visitor);
- sentinel = {};
- worklist = this.__worklist;
- leavelist = this.__leavelist;
- outer = {
- root
- };
- element = new Element(root, null, null, new Reference(outer, "root"));
- worklist.push(element);
- leavelist.push(element);
- while (worklist.length) {
- element = worklist.pop();
- if (element === sentinel) {
- element = leavelist.pop();
- target = this.__execute(visitor.leave, element);
- if (target !== void 0 && target !== BREAK && target !== SKIP && target !== REMOVE) {
- element.ref.replace(target);
- }
- if (this.__state === REMOVE || target === REMOVE) {
- removeElem(element);
- }
- if (this.__state === BREAK || target === BREAK) {
- return outer.root;
- }
- continue;
- }
- target = this.__execute(visitor.enter, element);
- if (target !== void 0 && target !== BREAK && target !== SKIP && target !== REMOVE) {
- element.ref.replace(target);
- element.node = target;
- }
- if (this.__state === REMOVE || target === REMOVE) {
- removeElem(element);
- element.node = null;
- }
- if (this.__state === BREAK || target === BREAK) {
- return outer.root;
- }
- node = element.node;
- if (!node) {
- continue;
- }
- worklist.push(sentinel);
- leavelist.push(element);
- if (this.__state === SKIP || target === SKIP) {
- continue;
- }
- nodeType = node.type || element.wrap;
- candidates = this.__keys[nodeType];
- if (!candidates) {
- if (this.__fallback) {
- candidates = this.__fallback(node);
- } else {
- throw new Error("Unknown node type " + nodeType + ".");
- }
- }
- current = candidates.length;
- while ((current -= 1) >= 0) {
- key = candidates[current];
- candidate = node[key];
- if (!candidate) {
- continue;
- }
- if (Array.isArray(candidate)) {
- current2 = candidate.length;
- while ((current2 -= 1) >= 0) {
- if (!candidate[current2]) {
- continue;
- }
- if (isProperty(nodeType, candidates[current])) {
- element = new Element(candidate[current2], [key, current2], "Property", new Reference(candidate, current2));
- } else if (isNode(candidate[current2])) {
- element = new Element(candidate[current2], [key, current2], null, new Reference(candidate, current2));
- } else {
- continue;
- }
- worklist.push(element);
- }
- } else if (isNode(candidate)) {
- worklist.push(new Element(candidate, key, null, new Reference(node, key)));
- }
- }
- }
- return outer.root;
- };
- function traverse(root, visitor) {
- var controller = new Controller();
- return controller.traverse(root, visitor);
- }
- function replace(root, visitor) {
- var controller = new Controller();
- return controller.replace(root, visitor);
- }
- function extendCommentRange(comment, tokens) {
- var target;
- target = upperBound(tokens, function search(token) {
- return token.range[0] > comment.range[0];
- });
- comment.extendedRange = [comment.range[0], comment.range[1]];
- if (target !== tokens.length) {
- comment.extendedRange[1] = tokens[target].range[0];
- }
- target -= 1;
- if (target >= 0) {
- comment.extendedRange[0] = tokens[target].range[1];
- }
- return comment;
- }
- function attachComments(tree, providedComments, tokens) {
- var comments = [], comment, len, i, cursor;
- if (!tree.range) {
- throw new Error("attachComments needs range information");
- }
- if (!tokens.length) {
- if (providedComments.length) {
- for (i = 0, len = providedComments.length; i < len; i += 1) {
- comment = deepCopy(providedComments[i]);
- comment.extendedRange = [0, tree.range[0]];
- comments.push(comment);
- }
- tree.leadingComments = comments;
+ }
+ };
+ var splitPrefix = (p, prefixSize) => {
+ const pathSize = 100;
+ let pp = p;
+ let prefix = "";
+ let ret;
+ const root = pathModule.parse(p).root || ".";
+ if (Buffer.byteLength(pp) < pathSize) {
+ ret = [pp, prefix, false];
+ } else {
+ prefix = pathModule.dirname(pp);
+ pp = pathModule.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 = pathModule.join(pathModule.basename(prefix), pp);
+ prefix = pathModule.dirname(prefix);
}
- return tree;
- }
- for (i = 0, len = providedComments.length; i < len; i += 1) {
- comments.push(extendCommentRange(deepCopy(providedComments[i]), tokens));
+ } while (prefix !== root && !ret);
+ if (!ret) {
+ ret = [p.slice(0, pathSize - 1), "", true];
}
- cursor = 0;
- traverse(tree, {
- enter: function(node) {
- var comment2;
- while (cursor < comments.length) {
- comment2 = comments[cursor];
- if (comment2.extendedRange[1] > node.range[0]) {
- break;
- }
- if (comment2.extendedRange[1] === node.range[0]) {
- if (!node.leadingComments) {
- node.leadingComments = [];
- }
- node.leadingComments.push(comment2);
- comments.splice(cursor, 1);
- } else {
- cursor += 1;
- }
- }
- if (cursor === comments.length) {
- return VisitorOption.Break;
- }
- if (comments[cursor].extendedRange[0] > node.range[1]) {
- return VisitorOption.Skip;
- }
- }
- });
- cursor = 0;
- traverse(tree, {
- leave: function(node) {
- var comment2;
- while (cursor < comments.length) {
- comment2 = comments[cursor];
- if (node.range[1] < comment2.extendedRange[0]) {
- break;
- }
- if (node.range[1] === comment2.extendedRange[0]) {
- if (!node.trailingComments) {
- node.trailingComments = [];
- }
- node.trailingComments.push(comment2);
- comments.splice(cursor, 1);
- } else {
- cursor += 1;
- }
- }
- if (cursor === comments.length) {
- return VisitorOption.Break;
- }
- if (comments[cursor].extendedRange[0] > node.range[1]) {
- return VisitorOption.Skip;
- }
- }
- });
- return tree;
- }
- exports2.Syntax = Syntax;
- exports2.traverse = traverse;
- exports2.replace = replace;
- exports2.attachComments = attachComments;
- exports2.VisitorKeys = VisitorKeys;
- exports2.VisitorOption = VisitorOption;
- exports2.Controller = Controller;
- exports2.cloneEnvironment = function() {
- return clone({});
- };
- return exports2;
- })(exports);
+ }
+ return ret;
+ };
+ var decString = (buf, off, size) => buf.slice(off, off + size).toString("utf8").replace(/\0.*/, "");
+ var decDate = (buf, off, size) => numToDate(decNumber(buf, off, size));
+ var numToDate = (num) => num === null ? null : new Date(num * 1e3);
+ var decNumber = (buf, off, size) => buf[off] & 128 ? large.parse(buf.slice(off, off + size)) : decSmallNumber(buf, off, size);
+ var nanNull = (value) => isNaN(value) ? null : value;
+ var decSmallNumber = (buf, off, size) => nanNull(parseInt(
+ buf.slice(off, off + size).toString("utf8").replace(/\0.*$/, "").trim(),
+ 8
+ ));
+ var MAXNUM = {
+ 12: 8589934591,
+ 8: 2097151
+ };
+ var encNumber = (buf, off, size, number) => number === null ? false : number > MAXNUM[size] || number < 0 ? (large.encode(number, buf.slice(off, off + size)), true) : (encSmallNumber(buf, off, size, number), false);
+ var encSmallNumber = (buf, off, size, number) => buf.write(octalString(number, size), off, size, "ascii");
+ var octalString = (number, size) => padOctal(Math.floor(number).toString(8), size);
+ var padOctal = (string, size) => (string.length === size - 1 ? string : new Array(size - string.length - 1).join("0") + string + " ") + "\0";
+ var encDate = (buf, off, size, date) => date === null ? false : encNumber(buf, off, size, date.getTime() / 1e3);
+ var NULLS = new Array(156).join("\0");
+ var encString = (buf, off, size, string) => string === null ? false : (buf.write(string + NULLS, off, size, "utf8"), string.length !== Buffer.byteLength(string) || string.length > size);
+ module2.exports = Header;
}
});
-// .yarn/cache/esutils-npm-2.0.3-f865beafd5-9a2fe69a41.zip/node_modules/esutils/lib/ast.js
-var require_ast = __commonJS({
- ".yarn/cache/esutils-npm-2.0.3-f865beafd5-9a2fe69a41.zip/node_modules/esutils/lib/ast.js"(exports, module2) {
- (function() {
- "use strict";
- function isExpression(node) {
- if (node == null) {
- return false;
- }
- switch (node.type) {
- case "ArrayExpression":
- case "AssignmentExpression":
- case "BinaryExpression":
- case "CallExpression":
- case "ConditionalExpression":
- case "FunctionExpression":
- case "Identifier":
- case "Literal":
- case "LogicalExpression":
- case "MemberExpression":
- case "NewExpression":
- case "ObjectExpression":
- case "SequenceExpression":
- case "ThisExpression":
- case "UnaryExpression":
- case "UpdateExpression":
- return true;
- }
- return false;
+// .yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/pax.js
+var require_pax = __commonJS({
+ ".yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/pax.js"(exports, module2) {
+ "use strict";
+ var Header = require_header();
+ var path10 = require("path");
+ var Pax = class {
+ constructor(obj, global2) {
+ this.atime = obj.atime || null;
+ this.charset = obj.charset || null;
+ this.comment = obj.comment || null;
+ this.ctime = obj.ctime || null;
+ this.gid = obj.gid || null;
+ this.gname = obj.gname || null;
+ this.linkpath = obj.linkpath || null;
+ this.mtime = obj.mtime || null;
+ this.path = obj.path || null;
+ this.size = obj.size || null;
+ this.uid = obj.uid || null;
+ this.uname = obj.uname || null;
+ this.dev = obj.dev || null;
+ this.ino = obj.ino || null;
+ this.nlink = obj.nlink || null;
+ this.global = global2 || false;
}
- function isIterationStatement(node) {
- if (node == null) {
- return false;
- }
- switch (node.type) {
- case "DoWhileStatement":
- case "ForInStatement":
- case "ForStatement":
- case "WhileStatement":
- return true;
+ encode() {
+ const body = this.encodeBody();
+ if (body === "") {
+ return null;
}
- return false;
- }
- function isStatement(node) {
- if (node == null) {
- return false;
+ 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;
}
- switch (node.type) {
- case "BlockStatement":
- case "BreakStatement":
- case "ContinueStatement":
- case "DebuggerStatement":
- case "DoWhileStatement":
- case "EmptyStatement":
- case "ExpressionStatement":
- case "ForInStatement":
- case "ForStatement":
- case "IfStatement":
- case "LabeledStatement":
- case "ReturnStatement":
- case "SwitchStatement":
- case "ThrowStatement":
- case "TryStatement":
- case "VariableDeclaration":
- case "WhileStatement":
- case "WithStatement":
- return true;
+ new Header({
+ // XXX split the path
+ // then the path should be PaxHeader + basename, but less than 99,
+ // prepend with the dirname
+ path: ("PaxHeader/" + path10.basename(this.path)).slice(0, 99),
+ mode: this.mode || 420,
+ uid: this.uid || null,
+ gid: this.gid || null,
+ size: bodyLen,
+ mtime: this.mtime || null,
+ type: this.global ? "GlobalExtendedHeader" : "ExtendedHeader",
+ linkpath: "",
+ uname: this.uname || "",
+ gname: this.gname || "",
+ devmaj: 0,
+ devmin: 0,
+ atime: this.atime || null,
+ ctime: this.ctime || null
+ }).encode(buf);
+ buf.write(body, 512, bodyLen, "utf8");
+ for (let i = bodyLen + 512; i < buf.length; i++) {
+ buf[i] = 0;
}
- return false;
- }
- function isSourceElement(node) {
- return isStatement(node) || node != null && node.type === "FunctionDeclaration";
+ return buf;
}
- function trailingStatement(node) {
- switch (node.type) {
- case "IfStatement":
- if (node.alternate != null) {
- return node.alternate;
- }
- return node.consequent;
- case "LabeledStatement":
- case "ForStatement":
- case "ForInStatement":
- case "WhileStatement":
- case "WithStatement":
- return node.body;
- }
- return null;
+ 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");
}
- function isProblematicIfStatement(node) {
- var current;
- if (node.type !== "IfStatement") {
- return false;
+ encodeField(field) {
+ if (this[field] === null || this[field] === void 0) {
+ return "";
}
- if (node.alternate == null) {
- return false;
+ const v = this[field] instanceof Date ? this[field].getTime() / 1e3 : this[field];
+ 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;
}
- current = node.consequent;
- do {
- if (current.type === "IfStatement") {
- if (current.alternate == null) {
- return true;
- }
- }
- current = trailingStatement(current);
- } while (current);
- return false;
+ const len = digits + byteLen;
+ return len + s;
}
- module2.exports = {
- isExpression,
- isStatement,
- isIterationStatement,
- isSourceElement,
- isProblematicIfStatement,
- trailingStatement
- };
- })();
+ };
+ Pax.parse = (string, ex, g) => new Pax(merge(parseKV(string), ex), g);
+ var merge = (a, b) => b ? Object.keys(a).reduce((s, k) => (s[k] = a[k], s), b) : a;
+ var parseKV = (string) => string.replace(/\n$/, "").split("\n").reduce(parseKVLine, /* @__PURE__ */ Object.create(null));
+ var 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 k = kv.shift().replace(/^SCHILY\.(dev|ino|nlink)/, "$1");
+ if (!k) {
+ return set;
+ }
+ const v = kv.join("=");
+ set[k] = /^([A-Z]+\.)?([mac]|birth|creation)time$/.test(k) ? new Date(v * 1e3) : /^[0-9]+$/.test(v) ? +v : v;
+ return set;
+ };
+ module2.exports = Pax;
}
});
-// .yarn/cache/esutils-npm-2.0.3-f865beafd5-9a2fe69a41.zip/node_modules/esutils/lib/code.js
-var require_code = __commonJS({
- ".yarn/cache/esutils-npm-2.0.3-f865beafd5-9a2fe69a41.zip/node_modules/esutils/lib/code.js"(exports, module2) {
- (function() {
- "use strict";
- var ES6Regex, ES5Regex, NON_ASCII_WHITESPACES, IDENTIFIER_START, IDENTIFIER_PART, ch;
- ES5Regex = {
- // ECMAScript 5.1/Unicode v9.0.0 NonAsciiIdentifierStart:
- NonAsciiIdentifierStart: /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/,
- // ECMAScript 5.1/Unicode v9.0.0 NonAsciiIdentifierPart:
- NonAsciiIdentifierPart: /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B4\u08B6-\u08BD\u08D4-\u08E1\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D54-\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFB-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C5\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/
- };
- ES6Regex = {
- // ECMAScript 6/Unicode v9.0.0 NonAsciiIdentifierStart:
- NonAsciiIdentifierStart: /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309B-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F\uDFE0]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]/,
- // ECMAScript 6/Unicode v9.0.0 NonAsciiIdentifierPart:
- NonAsciiIdentifierPart: /[\xAA\xB5\xB7\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B4\u08B6-\u08BD\u08D4-\u08E1\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D54-\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1369-\u1371\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFB-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C5\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE3E\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC00-\uDC4A\uDC50-\uDC59\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC40\uDC50-\uDC59\uDC72-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F\uDFE0]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6\uDD00-\uDD4A\uDD50-\uDD59]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/
- };
- function isDecimalDigit(ch2) {
- return 48 <= ch2 && ch2 <= 57;
- }
- function isHexDigit(ch2) {
- return 48 <= ch2 && ch2 <= 57 || // 0..9
- 97 <= ch2 && ch2 <= 102 || // a..f
- 65 <= ch2 && ch2 <= 70;
- }
- function isOctalDigit(ch2) {
- return ch2 >= 48 && ch2 <= 55;
- }
- NON_ASCII_WHITESPACES = [
- 5760,
- 8192,
- 8193,
- 8194,
- 8195,
- 8196,
- 8197,
- 8198,
- 8199,
- 8200,
- 8201,
- 8202,
- 8239,
- 8287,
- 12288,
- 65279
- ];
- function isWhiteSpace(ch2) {
- return ch2 === 32 || ch2 === 9 || ch2 === 11 || ch2 === 12 || ch2 === 160 || ch2 >= 5760 && NON_ASCII_WHITESPACES.indexOf(ch2) >= 0;
- }
- function isLineTerminator(ch2) {
- return ch2 === 10 || ch2 === 13 || ch2 === 8232 || ch2 === 8233;
- }
- function fromCodePoint(cp) {
- if (cp <= 65535) {
- return String.fromCharCode(cp);
- }
- var cu1 = String.fromCharCode(Math.floor((cp - 65536) / 1024) + 55296);
- var cu2 = String.fromCharCode((cp - 65536) % 1024 + 56320);
- return cu1 + cu2;
- }
- IDENTIFIER_START = new Array(128);
- for (ch = 0; ch < 128; ++ch) {
- IDENTIFIER_START[ch] = ch >= 97 && ch <= 122 || // a..z
- ch >= 65 && ch <= 90 || // A..Z
- ch === 36 || ch === 95;
- }
- IDENTIFIER_PART = new Array(128);
- for (ch = 0; ch < 128; ++ch) {
- IDENTIFIER_PART[ch] = ch >= 97 && ch <= 122 || // a..z
- ch >= 65 && ch <= 90 || // A..Z
- ch >= 48 && ch <= 57 || // 0..9
- ch === 36 || ch === 95;
- }
- function isIdentifierStartES5(ch2) {
- return ch2 < 128 ? IDENTIFIER_START[ch2] : ES5Regex.NonAsciiIdentifierStart.test(fromCodePoint(ch2));
- }
- function isIdentifierPartES5(ch2) {
- return ch2 < 128 ? IDENTIFIER_PART[ch2] : ES5Regex.NonAsciiIdentifierPart.test(fromCodePoint(ch2));
- }
- function isIdentifierStartES6(ch2) {
- return ch2 < 128 ? IDENTIFIER_START[ch2] : ES6Regex.NonAsciiIdentifierStart.test(fromCodePoint(ch2));
- }
- function isIdentifierPartES6(ch2) {
- return ch2 < 128 ? IDENTIFIER_PART[ch2] : ES6Regex.NonAsciiIdentifierPart.test(fromCodePoint(ch2));
- }
- module2.exports = {
- isDecimalDigit,
- isHexDigit,
- isOctalDigit,
- isWhiteSpace,
- isLineTerminator,
- isIdentifierStartES5,
- isIdentifierPartES5,
- isIdentifierStartES6,
- isIdentifierPartES6
- };
- })();
+// .yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/strip-trailing-slashes.js
+var require_strip_trailing_slashes = __commonJS({
+ ".yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/strip-trailing-slashes.js"(exports, module2) {
+ module2.exports = (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);
+ };
}
});
-// .yarn/cache/esutils-npm-2.0.3-f865beafd5-9a2fe69a41.zip/node_modules/esutils/lib/keyword.js
-var require_keyword = __commonJS({
- ".yarn/cache/esutils-npm-2.0.3-f865beafd5-9a2fe69a41.zip/node_modules/esutils/lib/keyword.js"(exports, module2) {
- (function() {
- "use strict";
- var code = require_code();
- function isStrictModeReservedWordES6(id) {
- switch (id) {
- case "implements":
- case "interface":
- case "package":
- case "private":
- case "protected":
- case "public":
- case "static":
- case "let":
- return true;
- default:
- return false;
+// .yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/warn-mixin.js
+var require_warn_mixin = __commonJS({
+ ".yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/warn-mixin.js"(exports, module2) {
+ "use strict";
+ module2.exports = (Base) => class extends Base {
+ warn(code, message, data = {}) {
+ if (this.file) {
+ data.file = this.file;
}
- }
- function isKeywordES5(id, strict) {
- if (!strict && id === "yield") {
- return false;
+ if (this.cwd) {
+ data.cwd = this.cwd;
}
- return isKeywordES6(id, strict);
- }
- function isKeywordES6(id, strict) {
- if (strict && isStrictModeReservedWordES6(id)) {
- return true;
+ data.code = message instanceof Error && message.code || code;
+ data.tarCode = code;
+ if (!this.strict && data.recoverable !== false) {
+ if (message instanceof Error) {
+ data = Object.assign(message, data);
+ message = message.message;
+ }
+ this.emit("warn", data.tarCode, message, data);
+ } else if (message instanceof Error) {
+ this.emit("error", Object.assign(message, data));
+ } else {
+ this.emit("error", Object.assign(new Error(`${code}: ${message}`), data));
}
- switch (id.length) {
- case 2:
- return id === "if" || id === "in" || id === "do";
- case 3:
- return id === "var" || id === "for" || id === "new" || id === "try";
- case 4:
- return id === "this" || id === "else" || id === "case" || id === "void" || id === "with" || id === "enum";
- case 5:
- return id === "while" || id === "break" || id === "catch" || id === "throw" || id === "const" || id === "yield" || id === "class" || id === "super";
- case 6:
- return id === "return" || id === "typeof" || id === "delete" || id === "switch" || id === "export" || id === "import";
- case 7:
- return id === "default" || id === "finally" || id === "extends";
- case 8:
- return id === "function" || id === "continue" || id === "debugger";
- case 10:
- return id === "instanceof";
- default:
- return false;
- }
- }
- function isReservedWordES5(id, strict) {
- return id === "null" || id === "true" || id === "false" || isKeywordES5(id, strict);
- }
- function isReservedWordES6(id, strict) {
- return id === "null" || id === "true" || id === "false" || isKeywordES6(id, strict);
- }
- function isRestrictedWord(id) {
- return id === "eval" || id === "arguments";
- }
- function isIdentifierNameES5(id) {
- var i, iz, ch;
- if (id.length === 0) {
- return false;
- }
- ch = id.charCodeAt(0);
- if (!code.isIdentifierStartES5(ch)) {
- return false;
- }
- for (i = 1, iz = id.length; i < iz; ++i) {
- ch = id.charCodeAt(i);
- if (!code.isIdentifierPartES5(ch)) {
- return false;
- }
- }
- return true;
- }
- function decodeUtf16(lead, trail) {
- return (lead - 55296) * 1024 + (trail - 56320) + 65536;
- }
- function isIdentifierNameES6(id) {
- var i, iz, ch, lowCh, check;
- if (id.length === 0) {
- return false;
- }
- check = code.isIdentifierStartES6;
- for (i = 0, iz = id.length; i < iz; ++i) {
- ch = id.charCodeAt(i);
- if (55296 <= ch && ch <= 56319) {
- ++i;
- if (i >= iz) {
- return false;
- }
- lowCh = id.charCodeAt(i);
- if (!(56320 <= lowCh && lowCh <= 57343)) {
- return false;
- }
- ch = decodeUtf16(ch, lowCh);
- }
- if (!check(ch)) {
- return false;
- }
- check = code.isIdentifierPartES6;
- }
- return true;
}
- function isIdentifierES5(id, strict) {
- return isIdentifierNameES5(id) && !isReservedWordES5(id, strict);
- }
- function isIdentifierES6(id, strict) {
- return isIdentifierNameES6(id) && !isReservedWordES6(id, strict);
- }
- module2.exports = {
- isKeywordES5,
- isKeywordES6,
- isReservedWordES5,
- isReservedWordES6,
- isRestrictedWord,
- isIdentifierNameES5,
- isIdentifierNameES6,
- isIdentifierES5,
- isIdentifierES6
- };
- })();
+ };
}
});
-// .yarn/cache/esutils-npm-2.0.3-f865beafd5-9a2fe69a41.zip/node_modules/esutils/lib/utils.js
-var require_utils2 = __commonJS({
- ".yarn/cache/esutils-npm-2.0.3-f865beafd5-9a2fe69a41.zip/node_modules/esutils/lib/utils.js"(exports) {
- (function() {
- "use strict";
- exports.ast = require_ast();
- exports.code = require_code();
- exports.keyword = require_keyword();
- })();
+// .yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/winchars.js
+var require_winchars = __commonJS({
+ ".yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/winchars.js"(exports, module2) {
+ "use strict";
+ var raw = [
+ "|",
+ "<",
+ ">",
+ "?",
+ ":"
+ ];
+ var win = raw.map((char) => String.fromCharCode(61440 + char.charCodeAt(0)));
+ var toWin = new Map(raw.map((char, i) => [char, win[i]]));
+ var toRaw = new Map(win.map((char, i) => [char, raw[i]]));
+ module2.exports = {
+ encode: (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)
+ };
}
});
-// .yarn/cache/source-map-npm-0.6.1-1a3621db16-ab55398007.zip/node_modules/source-map/lib/base64.js
-var require_base64 = __commonJS({
- ".yarn/cache/source-map-npm-0.6.1-1a3621db16-ab55398007.zip/node_modules/source-map/lib/base64.js"(exports) {
- var intToCharMap = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");
- exports.encode = function(number) {
- if (0 <= number && number < intToCharMap.length) {
- return intToCharMap[number];
- }
- throw new TypeError("Must be between 0 and 63: " + number);
- };
- exports.decode = function(charCode) {
- var bigA = 65;
- var bigZ = 90;
- var littleA = 97;
- var littleZ = 122;
- var zero = 48;
- var nine = 57;
- var plus = 43;
- var slash = 47;
- var littleOffset = 26;
- var numberOffset = 52;
- if (bigA <= charCode && charCode <= bigZ) {
- return charCode - bigA;
- }
- if (littleA <= charCode && charCode <= littleZ) {
- return charCode - littleA + littleOffset;
- }
- if (zero <= charCode && charCode <= nine) {
- return charCode - zero + numberOffset;
- }
- if (charCode == plus) {
- return 62;
- }
- if (charCode == slash) {
- return 63;
+// .yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/strip-absolute-path.js
+var require_strip_absolute_path = __commonJS({
+ ".yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/strip-absolute-path.js"(exports, module2) {
+ var { isAbsolute, parse } = require("path").win32;
+ module2.exports = (path10) => {
+ let r = "";
+ let parsed = parse(path10);
+ while (isAbsolute(path10) || parsed.root) {
+ const root = path10.charAt(0) === "/" && path10.slice(0, 4) !== "//?/" ? "/" : parsed.root;
+ path10 = path10.slice(root.length);
+ r += root;
+ parsed = parse(path10);
}
- return -1;
+ return [r, path10];
};
}
});
-// .yarn/cache/source-map-npm-0.6.1-1a3621db16-ab55398007.zip/node_modules/source-map/lib/base64-vlq.js
-var require_base64_vlq = __commonJS({
- ".yarn/cache/source-map-npm-0.6.1-1a3621db16-ab55398007.zip/node_modules/source-map/lib/base64-vlq.js"(exports) {
- var base64 = require_base64();
- var VLQ_BASE_SHIFT = 5;
- var VLQ_BASE = 1 << VLQ_BASE_SHIFT;
- var VLQ_BASE_MASK = VLQ_BASE - 1;
- var VLQ_CONTINUATION_BIT = VLQ_BASE;
- function toVLQSigned(aValue) {
- return aValue < 0 ? (-aValue << 1) + 1 : (aValue << 1) + 0;
- }
- function fromVLQSigned(aValue) {
- var isNegative2 = (aValue & 1) === 1;
- var shifted = aValue >> 1;
- return isNegative2 ? -shifted : shifted;
- }
- exports.encode = function base64VLQ_encode(aValue) {
- var encoded = "";
- var digit;
- var vlq = toVLQSigned(aValue);
- do {
- digit = vlq & VLQ_BASE_MASK;
- vlq >>>= VLQ_BASE_SHIFT;
- if (vlq > 0) {
- digit |= VLQ_CONTINUATION_BIT;
- }
- encoded += base64.encode(digit);
- } while (vlq > 0);
- return encoded;
- };
- exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {
- var strLen = aStr.length;
- var result = 0;
- var shift = 0;
- var continuation, digit;
- do {
- if (aIndex >= strLen) {
- throw new Error("Expected more digits in base 64 VLQ value.");
- }
- digit = base64.decode(aStr.charCodeAt(aIndex++));
- if (digit === -1) {
- throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1));
- }
- continuation = !!(digit & VLQ_CONTINUATION_BIT);
- digit &= VLQ_BASE_MASK;
- result = result + (digit << shift);
- shift += VLQ_BASE_SHIFT;
- } while (continuation);
- aOutParam.value = fromVLQSigned(result);
- aOutParam.rest = aIndex;
+// .yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/mode-fix.js
+var require_mode_fix = __commonJS({
+ ".yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/mode-fix.js"(exports, module2) {
+ "use strict";
+ module2.exports = (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;
};
}
});
-// .yarn/cache/source-map-npm-0.6.1-1a3621db16-ab55398007.zip/node_modules/source-map/lib/util.js
-var require_util2 = __commonJS({
- ".yarn/cache/source-map-npm-0.6.1-1a3621db16-ab55398007.zip/node_modules/source-map/lib/util.js"(exports) {
- function getArg(aArgs, aName, aDefaultValue) {
- if (aName in aArgs) {
- return aArgs[aName];
- } else if (arguments.length === 3) {
- return aDefaultValue;
- } else {
- throw new Error('"' + aName + '" is a required argument.');
- }
- }
- exports.getArg = getArg;
- var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/;
- var dataUrlRegexp = /^data:.+\,.+$/;
- function urlParse(aUrl) {
- var match = aUrl.match(urlRegexp);
- if (!match) {
- return null;
- }
- return {
- scheme: match[1],
- auth: match[2],
- host: match[3],
- port: match[4],
- path: match[5]
- };
- }
- exports.urlParse = urlParse;
- function urlGenerate(aParsedUrl) {
- var url = "";
- if (aParsedUrl.scheme) {
- url += aParsedUrl.scheme + ":";
- }
- url += "//";
- if (aParsedUrl.auth) {
- url += aParsedUrl.auth + "@";
- }
- if (aParsedUrl.host) {
- url += aParsedUrl.host;
- }
- if (aParsedUrl.port) {
- url += ":" + aParsedUrl.port;
- }
- if (aParsedUrl.path) {
- url += aParsedUrl.path;
+// .yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/write-entry.js
+var require_write_entry = __commonJS({
+ ".yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/write-entry.js"(exports, module2) {
+ "use strict";
+ var { Minipass } = require_minipass();
+ var Pax = require_pax();
+ var Header = require_header();
+ var fs9 = require("fs");
+ var path10 = require("path");
+ var normPath = require_normalize_windows_path();
+ var stripSlash = require_strip_trailing_slashes();
+ var prefixPath = (path11, prefix) => {
+ if (!prefix) {
+ return normPath(path11);
}
- return url;
- }
- exports.urlGenerate = urlGenerate;
- function normalize(aPath) {
- var path10 = aPath;
- var url = urlParse(aPath);
- if (url) {
- if (!url.path) {
- return aPath;
- }
- path10 = url.path;
- }
- var isAbsolute = exports.isAbsolute(path10);
- var parts = path10.split(/\/+/);
- for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {
- part = parts[i];
- if (part === ".") {
- parts.splice(i, 1);
- } else if (part === "..") {
- up++;
- } else if (up > 0) {
- if (part === "") {
- parts.splice(i + 1, up);
- up = 0;
- } else {
- parts.splice(i, 2);
- up--;
+ path11 = normPath(path11).replace(/^\.(\/|$)/, "");
+ return stripSlash(prefix) + "/" + path11;
+ };
+ var maxReadSize = 16 * 1024 * 1024;
+ var PROCESS = Symbol("process");
+ var FILE = Symbol("file");
+ var DIRECTORY = Symbol("directory");
+ var SYMLINK = Symbol("symlink");
+ var HARDLINK = Symbol("hardlink");
+ var HEADER = Symbol("header");
+ var READ = Symbol("read");
+ var LSTAT = Symbol("lstat");
+ var ONLSTAT = Symbol("onlstat");
+ var ONREAD = Symbol("onread");
+ var ONREADLINK = Symbol("onreadlink");
+ var OPENFILE = Symbol("openfile");
+ var ONOPENFILE = Symbol("onopenfile");
+ var CLOSE = Symbol("close");
+ var MODE = Symbol("mode");
+ var AWAITDRAIN = Symbol("awaitDrain");
+ var ONDRAIN = Symbol("ondrain");
+ var PREFIX = Symbol("prefix");
+ var HAD_ERROR = Symbol("hadError");
+ var warner = require_warn_mixin();
+ var winchars = require_winchars();
+ var stripAbsolutePath = require_strip_absolute_path();
+ var modeFix = require_mode_fix();
+ var WriteEntry = warner(class WriteEntry extends Minipass {
+ constructor(p, opt) {
+ opt = opt || {};
+ super(opt);
+ if (typeof p !== "string") {
+ throw new TypeError("path is required");
+ }
+ this.path = normPath(p);
+ this.portable = !!opt.portable;
+ this.myuid = process.getuid && process.getuid() || 0;
+ this.myuser = process.env.USER || "";
+ 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 = normPath(opt.cwd || process.cwd());
+ this.strict = !!opt.strict;
+ this.noPax = !!opt.noPax;
+ this.noMtime = !!opt.noMtime;
+ this.mtime = opt.mtime || null;
+ this.prefix = opt.prefix ? normPath(opt.prefix) : null;
+ this.fd = null;
+ this.blockLen = null;
+ this.blockRemain = null;
+ this.buf = null;
+ this.offset = null;
+ this.length = null;
+ this.pos = null;
+ this.remain = null;
+ if (typeof opt.onwarn === "function") {
+ this.on("warn", opt.onwarn);
+ }
+ let pathWarn = false;
+ if (!this.preservePaths) {
+ const [root, stripped] = stripAbsolutePath(this.path);
+ if (root) {
+ this.path = stripped;
+ pathWarn = root;
}
}
- }
- path10 = parts.join("/");
- if (path10 === "") {
- path10 = isAbsolute ? "/" : ".";
- }
- if (url) {
- url.path = path10;
- return urlGenerate(url);
- }
- return path10;
- }
- exports.normalize = normalize;
- function join2(aRoot, aPath) {
- if (aRoot === "") {
- aRoot = ".";
- }
- if (aPath === "") {
- aPath = ".";
- }
- var aPathUrl = urlParse(aPath);
- var aRootUrl = urlParse(aRoot);
- if (aRootUrl) {
- aRoot = aRootUrl.path || "/";
- }
- if (aPathUrl && !aPathUrl.scheme) {
- if (aRootUrl) {
- aPathUrl.scheme = aRootUrl.scheme;
+ this.win32 = !!opt.win32 || process.platform === "win32";
+ if (this.win32) {
+ this.path = winchars.decode(this.path.replace(/\\/g, "/"));
+ p = p.replace(/\\/g, "/");
+ }
+ this.absolute = normPath(opt.absolute || path10.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
+ });
+ }
+ if (this.statCache.has(this.absolute)) {
+ this[ONLSTAT](this.statCache.get(this.absolute));
+ } else {
+ this[LSTAT]();
}
- return urlGenerate(aPathUrl);
- }
- if (aPathUrl || aPath.match(dataUrlRegexp)) {
- return aPath;
- }
- if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {
- aRootUrl.host = aPath;
- return urlGenerate(aRootUrl);
}
- var joined = aPath.charAt(0) === "/" ? aPath : normalize(aRoot.replace(/\/+$/, "") + "/" + aPath);
- if (aRootUrl) {
- aRootUrl.path = joined;
- return urlGenerate(aRootUrl);
+ emit(ev, ...data) {
+ if (ev === "error") {
+ this[HAD_ERROR] = true;
+ }
+ return super.emit(ev, ...data);
}
- return joined;
- }
- exports.join = join2;
- exports.isAbsolute = function(aPath) {
- return aPath.charAt(0) === "/" || urlRegexp.test(aPath);
- };
- function relative(aRoot, aPath) {
- if (aRoot === "") {
- aRoot = ".";
+ [LSTAT]() {
+ fs9.lstat(this.absolute, (er, stat) => {
+ if (er) {
+ return this.emit("error", er);
+ }
+ this[ONLSTAT](stat);
+ });
}
- aRoot = aRoot.replace(/\/$/, "");
- var level = 0;
- while (aPath.indexOf(aRoot + "/") !== 0) {
- var index = aRoot.lastIndexOf("/");
- if (index < 0) {
- return aPath;
- }
- aRoot = aRoot.slice(0, index);
- if (aRoot.match(/^([^\/]+:\/)?\/*$/)) {
- return aPath;
+ [ONLSTAT](stat) {
+ this.statCache.set(this.absolute, stat);
+ this.stat = stat;
+ if (!stat.isFile()) {
+ stat.size = 0;
}
- ++level;
+ this.type = getType(stat);
+ this.emit("stat", stat);
+ this[PROCESS]();
}
- return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1);
- }
- exports.relative = relative;
- var supportsNullProto = function() {
- var obj = /* @__PURE__ */ Object.create(null);
- return !("__proto__" in obj);
- }();
- function identity(s) {
- return s;
- }
- function toSetString(aStr) {
- if (isProtoString(aStr)) {
- return "$" + aStr;
+ [PROCESS]() {
+ switch (this.type) {
+ case "File":
+ return this[FILE]();
+ case "Directory":
+ return this[DIRECTORY]();
+ case "SymbolicLink":
+ return this[SYMLINK]();
+ default:
+ return this.end();
+ }
}
- return aStr;
- }
- exports.toSetString = supportsNullProto ? identity : toSetString;
- function fromSetString(aStr) {
- if (isProtoString(aStr)) {
- return aStr.slice(1);
+ [MODE](mode) {
+ return modeFix(mode, this.type === "Directory", this.portable);
}
- return aStr;
- }
- exports.fromSetString = supportsNullProto ? identity : fromSetString;
- function isProtoString(s) {
- if (!s) {
- return false;
+ [PREFIX](path11) {
+ return prefixPath(path11, this.prefix);
}
- var length = s.length;
- if (length < 9) {
- return false;
- }
- if (s.charCodeAt(length - 1) !== 95 || s.charCodeAt(length - 2) !== 95 || s.charCodeAt(length - 3) !== 111 || s.charCodeAt(length - 4) !== 116 || s.charCodeAt(length - 5) !== 111 || s.charCodeAt(length - 6) !== 114 || s.charCodeAt(length - 7) !== 112 || s.charCodeAt(length - 8) !== 95 || s.charCodeAt(length - 9) !== 95) {
- return false;
- }
- for (var i = length - 10; i >= 0; i--) {
- if (s.charCodeAt(i) !== 36) {
- return false;
+ [HEADER]() {
+ if (this.type === "Directory" && this.portable) {
+ this.noMtime = true;
}
+ this.header = new Header({
+ path: this[PREFIX](this.path),
+ // only apply the prefix to hard links.
+ linkpath: this.type === "Link" ? 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 ? null : this.stat.uid,
+ gid: this.portable ? null : this.stat.gid,
+ size: this.stat.size,
+ mtime: this.noMtime ? null : this.mtime || this.stat.mtime,
+ type: this.type,
+ uname: this.portable ? null : this.stat.uid === this.myuid ? this.myuser : "",
+ atime: this.portable ? null : this.stat.atime,
+ ctime: this.portable ? null : this.stat.ctime
+ });
+ if (this.header.encode() && !this.noPax) {
+ super.write(new Pax({
+ atime: this.portable ? null : this.header.atime,
+ ctime: this.portable ? null : this.header.ctime,
+ gid: this.portable ? null : this.header.gid,
+ mtime: this.noMtime ? null : this.mtime || this.header.mtime,
+ path: this[PREFIX](this.path),
+ linkpath: this.type === "Link" ? this[PREFIX](this.linkpath) : this.linkpath,
+ size: this.header.size,
+ uid: this.portable ? null : this.header.uid,
+ uname: this.portable ? null : this.header.uname,
+ dev: this.portable ? null : this.stat.dev,
+ ino: this.portable ? null : this.stat.ino,
+ nlink: this.portable ? null : this.stat.nlink
+ }).encode());
+ }
+ super.write(this.header.block);
}
- return true;
- }
- function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {
- var cmp = strcmp(mappingA.source, mappingB.source);
- if (cmp !== 0) {
- return cmp;
- }
- cmp = mappingA.originalLine - mappingB.originalLine;
- if (cmp !== 0) {
- return cmp;
- }
- cmp = mappingA.originalColumn - mappingB.originalColumn;
- if (cmp !== 0 || onlyCompareOriginal) {
- return cmp;
- }
- cmp = mappingA.generatedColumn - mappingB.generatedColumn;
- if (cmp !== 0) {
- return cmp;
- }
- cmp = mappingA.generatedLine - mappingB.generatedLine;
- if (cmp !== 0) {
- return cmp;
- }
- return strcmp(mappingA.name, mappingB.name);
- }
- exports.compareByOriginalPositions = compareByOriginalPositions;
- function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {
- var cmp = mappingA.generatedLine - mappingB.generatedLine;
- if (cmp !== 0) {
- return cmp;
- }
- cmp = mappingA.generatedColumn - mappingB.generatedColumn;
- if (cmp !== 0 || onlyCompareGenerated) {
- return cmp;
- }
- cmp = strcmp(mappingA.source, mappingB.source);
- if (cmp !== 0) {
- return cmp;
- }
- cmp = mappingA.originalLine - mappingB.originalLine;
- if (cmp !== 0) {
- return cmp;
- }
- cmp = mappingA.originalColumn - mappingB.originalColumn;
- if (cmp !== 0) {
- return cmp;
- }
- return strcmp(mappingA.name, mappingB.name);
- }
- exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;
- function strcmp(aStr1, aStr2) {
- if (aStr1 === aStr2) {
- return 0;
+ [DIRECTORY]() {
+ if (this.path.slice(-1) !== "/") {
+ this.path += "/";
+ }
+ this.stat.size = 0;
+ this[HEADER]();
+ this.end();
}
- if (aStr1 === null) {
- return 1;
+ [SYMLINK]() {
+ fs9.readlink(this.absolute, (er, linkpath) => {
+ if (er) {
+ return this.emit("error", er);
+ }
+ this[ONREADLINK](linkpath);
+ });
}
- if (aStr2 === null) {
- return -1;
+ [ONREADLINK](linkpath) {
+ this.linkpath = normPath(linkpath);
+ this[HEADER]();
+ this.end();
}
- if (aStr1 > aStr2) {
- return 1;
+ [HARDLINK](linkpath) {
+ this.type = "Link";
+ this.linkpath = normPath(path10.relative(this.cwd, linkpath));
+ this.stat.size = 0;
+ this[HEADER]();
+ this.end();
}
- return -1;
- }
- function compareByGeneratedPositionsInflated(mappingA, mappingB) {
- var cmp = mappingA.generatedLine - mappingB.generatedLine;
- if (cmp !== 0) {
- return cmp;
+ [FILE]() {
+ if (this.stat.nlink > 1) {
+ const linkKey = this.stat.dev + ":" + this.stat.ino;
+ if (this.linkCache.has(linkKey)) {
+ const linkpath = this.linkCache.get(linkKey);
+ if (linkpath.indexOf(this.cwd) === 0) {
+ return this[HARDLINK](linkpath);
+ }
+ }
+ this.linkCache.set(linkKey, this.absolute);
+ }
+ this[HEADER]();
+ if (this.stat.size === 0) {
+ return this.end();
+ }
+ this[OPENFILE]();
}
- cmp = mappingA.generatedColumn - mappingB.generatedColumn;
- if (cmp !== 0) {
- return cmp;
+ [OPENFILE]() {
+ fs9.open(this.absolute, "r", (er, fd) => {
+ if (er) {
+ return this.emit("error", er);
+ }
+ this[ONOPENFILE](fd);
+ });
}
- cmp = strcmp(mappingA.source, mappingB.source);
- if (cmp !== 0) {
- return cmp;
+ [ONOPENFILE](fd) {
+ this.fd = fd;
+ if (this[HAD_ERROR]) {
+ return this[CLOSE]();
+ }
+ 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[READ]();
}
- cmp = mappingA.originalLine - mappingB.originalLine;
- if (cmp !== 0) {
- return cmp;
+ [READ]() {
+ const { fd, buf, offset, length, pos } = this;
+ fs9.read(fd, buf, offset, length, pos, (er, bytesRead) => {
+ if (er) {
+ return this[CLOSE](() => this.emit("error", er));
+ }
+ this[ONREAD](bytesRead);
+ });
}
- cmp = mappingA.originalColumn - mappingB.originalColumn;
- if (cmp !== 0) {
- return cmp;
+ [CLOSE](cb) {
+ fs9.close(this.fd, cb);
}
- return strcmp(mappingA.name, mappingB.name);
- }
- exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;
- function parseSourceMapInput(str) {
- return JSON.parse(str.replace(/^\)]}'[^\n]*\n/, ""));
- }
- exports.parseSourceMapInput = parseSourceMapInput;
- function computeSourceURL(sourceRoot, sourceURL, sourceMapURL) {
- sourceURL = sourceURL || "";
- if (sourceRoot) {
- if (sourceRoot[sourceRoot.length - 1] !== "/" && sourceURL[0] !== "/") {
- sourceRoot += "/";
+ [ONREAD](bytesRead) {
+ if (bytesRead <= 0 && this.remain > 0) {
+ const er = new Error("encountered unexpected EOF");
+ er.path = this.absolute;
+ er.syscall = "read";
+ er.code = "EOF";
+ return this[CLOSE](() => this.emit("error", er));
}
- sourceURL = sourceRoot + sourceURL;
- }
- if (sourceMapURL) {
- var parsed = urlParse(sourceMapURL);
- if (!parsed) {
- throw new Error("sourceMapURL could not be parsed");
+ if (bytesRead > this.remain) {
+ const er = new Error("did not encounter expected EOF");
+ er.path = this.absolute;
+ er.syscall = "read";
+ er.code = "EOF";
+ return this[CLOSE](() => this.emit("error", er));
}
- if (parsed.path) {
- var index = parsed.path.lastIndexOf("/");
- if (index >= 0) {
- parsed.path = parsed.path.substring(0, index + 1);
+ if (bytesRead === this.remain) {
+ for (let i = bytesRead; i < this.length && bytesRead < this.blockRemain; i++) {
+ this.buf[i + this.offset] = 0;
+ bytesRead++;
+ this.remain++;
}
}
- sourceURL = join2(urlGenerate(parsed), sourceURL);
- }
- return normalize(sourceURL);
- }
- exports.computeSourceURL = computeSourceURL;
- }
-});
-
-// .yarn/cache/source-map-npm-0.6.1-1a3621db16-ab55398007.zip/node_modules/source-map/lib/array-set.js
-var require_array_set = __commonJS({
- ".yarn/cache/source-map-npm-0.6.1-1a3621db16-ab55398007.zip/node_modules/source-map/lib/array-set.js"(exports) {
- var util = require_util2();
- var has = Object.prototype.hasOwnProperty;
- var hasNativeMap = typeof Map !== "undefined";
- function ArraySet() {
- this._array = [];
- this._set = hasNativeMap ? /* @__PURE__ */ new Map() : /* @__PURE__ */ Object.create(null);
- }
- ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {
- var set = new ArraySet();
- for (var i = 0, len = aArray.length; i < len; i++) {
- set.add(aArray[i], aAllowDuplicates);
- }
- return set;
- };
- ArraySet.prototype.size = function ArraySet_size() {
- return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;
- };
- ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {
- var sStr = hasNativeMap ? aStr : util.toSetString(aStr);
- var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);
- var idx = this._array.length;
- if (!isDuplicate || aAllowDuplicates) {
- this._array.push(aStr);
- }
- if (!isDuplicate) {
- if (hasNativeMap) {
- this._set.set(aStr, idx);
+ const writeBuf = this.offset === 0 && bytesRead === this.buf.length ? this.buf : this.buf.slice(this.offset, this.offset + bytesRead);
+ const flushed = this.write(writeBuf);
+ if (!flushed) {
+ this[AWAITDRAIN](() => this[ONDRAIN]());
} else {
- this._set[sStr] = idx;
+ this[ONDRAIN]();
}
}
- };
- ArraySet.prototype.has = function ArraySet_has(aStr) {
- if (hasNativeMap) {
- return this._set.has(aStr);
- } else {
- var sStr = util.toSetString(aStr);
- return has.call(this._set, sStr);
+ [AWAITDRAIN](cb) {
+ this.once("drain", cb);
}
- };
- ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {
- if (hasNativeMap) {
- var idx = this._set.get(aStr);
- if (idx >= 0) {
- return idx;
- }
- } else {
- var sStr = util.toSetString(aStr);
- if (has.call(this._set, sStr)) {
- return this._set[sStr];
+ write(writeBuf) {
+ if (this.blockRemain < writeBuf.length) {
+ const er = new Error("writing more data than expected");
+ er.path = this.absolute;
+ return this.emit("error", er);
}
+ this.remain -= writeBuf.length;
+ this.blockRemain -= writeBuf.length;
+ this.pos += writeBuf.length;
+ this.offset += writeBuf.length;
+ return super.write(writeBuf);
}
- throw new Error('"' + aStr + '" is not in the set.');
- };
- ArraySet.prototype.at = function ArraySet_at(aIdx) {
- if (aIdx >= 0 && aIdx < this._array.length) {
- return this._array[aIdx];
- }
- throw new Error("No element indexed by " + aIdx);
- };
- ArraySet.prototype.toArray = function ArraySet_toArray() {
- return this._array.slice();
- };
- exports.ArraySet = ArraySet;
- }
-});
-
-// .yarn/cache/source-map-npm-0.6.1-1a3621db16-ab55398007.zip/node_modules/source-map/lib/mapping-list.js
-var require_mapping_list = __commonJS({
- ".yarn/cache/source-map-npm-0.6.1-1a3621db16-ab55398007.zip/node_modules/source-map/lib/mapping-list.js"(exports) {
- var util = require_util2();
- function generatedPositionAfter(mappingA, mappingB) {
- var lineA = mappingA.generatedLine;
- var lineB = mappingB.generatedLine;
- var columnA = mappingA.generatedColumn;
- var columnB = mappingB.generatedColumn;
- return lineB > lineA || lineB == lineA && columnB >= columnA || util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;
- }
- function MappingList() {
- this._array = [];
- this._sorted = true;
- this._last = { generatedLine: -1, generatedColumn: 0 };
- }
- MappingList.prototype.unsortedForEach = function MappingList_forEach(aCallback, aThisArg) {
- this._array.forEach(aCallback, aThisArg);
- };
- MappingList.prototype.add = function MappingList_add(aMapping) {
- if (generatedPositionAfter(this._last, aMapping)) {
- this._last = aMapping;
- this._array.push(aMapping);
- } else {
- this._sorted = false;
- this._array.push(aMapping);
- }
- };
- MappingList.prototype.toArray = function MappingList_toArray() {
- if (!this._sorted) {
- this._array.sort(util.compareByGeneratedPositionsInflated);
- this._sorted = true;
- }
- return this._array;
- };
- exports.MappingList = MappingList;
- }
-});
-
-// .yarn/cache/source-map-npm-0.6.1-1a3621db16-ab55398007.zip/node_modules/source-map/lib/source-map-generator.js
-var require_source_map_generator = __commonJS({
- ".yarn/cache/source-map-npm-0.6.1-1a3621db16-ab55398007.zip/node_modules/source-map/lib/source-map-generator.js"(exports) {
- var base64VLQ = require_base64_vlq();
- var util = require_util2();
- var ArraySet = require_array_set().ArraySet;
- var MappingList = require_mapping_list().MappingList;
- function SourceMapGenerator(aArgs) {
- if (!aArgs) {
- aArgs = {};
- }
- this._file = util.getArg(aArgs, "file", null);
- this._sourceRoot = util.getArg(aArgs, "sourceRoot", null);
- this._skipValidation = util.getArg(aArgs, "skipValidation", false);
- this._sources = new ArraySet();
- this._names = new ArraySet();
- this._mappings = new MappingList();
- this._sourcesContents = null;
- }
- SourceMapGenerator.prototype._version = 3;
- SourceMapGenerator.fromSourceMap = function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {
- var sourceRoot = aSourceMapConsumer.sourceRoot;
- var generator = new SourceMapGenerator({
- file: aSourceMapConsumer.file,
- sourceRoot
- });
- aSourceMapConsumer.eachMapping(function(mapping) {
- var newMapping = {
- generated: {
- line: mapping.generatedLine,
- column: mapping.generatedColumn
- }
- };
- if (mapping.source != null) {
- newMapping.source = mapping.source;
- if (sourceRoot != null) {
- newMapping.source = util.relative(sourceRoot, newMapping.source);
- }
- newMapping.original = {
- line: mapping.originalLine,
- column: mapping.originalColumn
- };
- if (mapping.name != null) {
- newMapping.name = mapping.name;
+ [ONDRAIN]() {
+ if (!this.remain) {
+ if (this.blockRemain) {
+ super.write(Buffer.alloc(this.blockRemain));
}
+ return this[CLOSE]((er) => er ? this.emit("error", er) : this.end());
}
- generator.addMapping(newMapping);
- });
- aSourceMapConsumer.sources.forEach(function(sourceFile) {
- var sourceRelative = sourceFile;
- if (sourceRoot !== null) {
- sourceRelative = util.relative(sourceRoot, sourceFile);
- }
- if (!generator._sources.has(sourceRelative)) {
- generator._sources.add(sourceRelative);
- }
- var content = aSourceMapConsumer.sourceContentFor(sourceFile);
- if (content != null) {
- generator.setSourceContent(sourceFile, content);
+ if (this.offset >= this.length) {
+ this.buf = Buffer.allocUnsafe(Math.min(this.blockRemain, this.buf.length));
+ this.offset = 0;
}
- });
- return generator;
- };
- SourceMapGenerator.prototype.addMapping = function SourceMapGenerator_addMapping(aArgs) {
- var generated = util.getArg(aArgs, "generated");
- var original = util.getArg(aArgs, "original", null);
- var source = util.getArg(aArgs, "source", null);
- var name = util.getArg(aArgs, "name", null);
- if (!this._skipValidation) {
- this._validateMapping(generated, original, source, name);
- }
- if (source != null) {
- source = String(source);
- if (!this._sources.has(source)) {
- this._sources.add(source);
- }
- }
- if (name != null) {
- name = String(name);
- if (!this._names.has(name)) {
- this._names.add(name);
- }
- }
- this._mappings.add({
- generatedLine: generated.line,
- generatedColumn: generated.column,
- originalLine: original != null && original.line,
- originalColumn: original != null && original.column,
- source,
- name
- });
- };
- SourceMapGenerator.prototype.setSourceContent = function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {
- var source = aSourceFile;
- if (this._sourceRoot != null) {
- source = util.relative(this._sourceRoot, source);
+ this.length = this.buf.length - this.offset;
+ this[READ]();
}
- if (aSourceContent != null) {
- if (!this._sourcesContents) {
- this._sourcesContents = /* @__PURE__ */ Object.create(null);
- }
- this._sourcesContents[util.toSetString(source)] = aSourceContent;
- } else if (this._sourcesContents) {
- delete this._sourcesContents[util.toSetString(source)];
- if (Object.keys(this._sourcesContents).length === 0) {
- this._sourcesContents = null;
- }
+ });
+ var WriteEntrySync = class extends WriteEntry {
+ [LSTAT]() {
+ this[ONLSTAT](fs9.lstatSync(this.absolute));
}
- };
- SourceMapGenerator.prototype.applySourceMap = function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {
- var sourceFile = aSourceFile;
- if (aSourceFile == null) {
- if (aSourceMapConsumer.file == null) {
- throw new Error(
- `SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, or the source map's "file" property. Both were omitted.`
- );
- }
- sourceFile = aSourceMapConsumer.file;
+ [SYMLINK]() {
+ this[ONREADLINK](fs9.readlinkSync(this.absolute));
}
- var sourceRoot = this._sourceRoot;
- if (sourceRoot != null) {
- sourceFile = util.relative(sourceRoot, sourceFile);
+ [OPENFILE]() {
+ this[ONOPENFILE](fs9.openSync(this.absolute, "r"));
}
- var newSources = new ArraySet();
- var newNames = new ArraySet();
- this._mappings.unsortedForEach(function(mapping) {
- if (mapping.source === sourceFile && mapping.originalLine != null) {
- var original = aSourceMapConsumer.originalPositionFor({
- line: mapping.originalLine,
- column: mapping.originalColumn
- });
- if (original.source != null) {
- mapping.source = original.source;
- if (aSourceMapPath != null) {
- mapping.source = util.join(aSourceMapPath, mapping.source);
- }
- if (sourceRoot != null) {
- mapping.source = util.relative(sourceRoot, mapping.source);
- }
- mapping.originalLine = original.line;
- mapping.originalColumn = original.column;
- if (original.name != null) {
- mapping.name = original.name;
+ [READ]() {
+ let threw = true;
+ try {
+ const { fd, buf, offset, length, pos } = this;
+ const bytesRead = fs9.readSync(fd, buf, offset, length, pos);
+ this[ONREAD](bytesRead);
+ threw = false;
+ } finally {
+ if (threw) {
+ try {
+ this[CLOSE](() => {
+ });
+ } catch (er) {
}
}
}
- var source = mapping.source;
- if (source != null && !newSources.has(source)) {
- newSources.add(source);
- }
- var name = mapping.name;
- if (name != null && !newNames.has(name)) {
- newNames.add(name);
- }
- }, this);
- this._sources = newSources;
- this._names = newNames;
- aSourceMapConsumer.sources.forEach(function(sourceFile2) {
- var content = aSourceMapConsumer.sourceContentFor(sourceFile2);
- if (content != null) {
- if (aSourceMapPath != null) {
- sourceFile2 = util.join(aSourceMapPath, sourceFile2);
- }
- if (sourceRoot != null) {
- sourceFile2 = util.relative(sourceRoot, sourceFile2);
- }
- this.setSourceContent(sourceFile2, content);
- }
- }, this);
- };
- SourceMapGenerator.prototype._validateMapping = function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource, aName) {
- if (aOriginal && typeof aOriginal.line !== "number" && typeof aOriginal.column !== "number") {
- throw new Error(
- "original.line and original.column are not numbers -- you probably meant to omit the original mapping entirely and only map the generated position. If so, pass null for the original mapping instead of an object with empty or null values."
- );
}
- if (aGenerated && "line" in aGenerated && "column" in aGenerated && aGenerated.line > 0 && aGenerated.column >= 0 && !aOriginal && !aSource && !aName) {
- return;
- } else if (aGenerated && "line" in aGenerated && "column" in aGenerated && aOriginal && "line" in aOriginal && "column" in aOriginal && aGenerated.line > 0 && aGenerated.column >= 0 && aOriginal.line > 0 && aOriginal.column >= 0 && aSource) {
- return;
- } else {
- throw new Error("Invalid mapping: " + JSON.stringify({
- generated: aGenerated,
- source: aSource,
- original: aOriginal,
- name: aName
- }));
- }
- };
- SourceMapGenerator.prototype._serializeMappings = function SourceMapGenerator_serializeMappings() {
- var previousGeneratedColumn = 0;
- var previousGeneratedLine = 1;
- var previousOriginalColumn = 0;
- var previousOriginalLine = 0;
- var previousName = 0;
- var previousSource = 0;
- var result = "";
- var next;
- var mapping;
- var nameIdx;
- var sourceIdx;
- var mappings = this._mappings.toArray();
- for (var i = 0, len = mappings.length; i < len; i++) {
- mapping = mappings[i];
- next = "";
- if (mapping.generatedLine !== previousGeneratedLine) {
- previousGeneratedColumn = 0;
- while (mapping.generatedLine !== previousGeneratedLine) {
- next += ";";
- previousGeneratedLine++;
- }
- } else {
- if (i > 0) {
- if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {
- continue;
- }
- next += ",";
- }
- }
- next += base64VLQ.encode(mapping.generatedColumn - previousGeneratedColumn);
- previousGeneratedColumn = mapping.generatedColumn;
- if (mapping.source != null) {
- sourceIdx = this._sources.indexOf(mapping.source);
- next += base64VLQ.encode(sourceIdx - previousSource);
- previousSource = sourceIdx;
- next += base64VLQ.encode(mapping.originalLine - 1 - previousOriginalLine);
- previousOriginalLine = mapping.originalLine - 1;
- next += base64VLQ.encode(mapping.originalColumn - previousOriginalColumn);
- previousOriginalColumn = mapping.originalColumn;
- if (mapping.name != null) {
- nameIdx = this._names.indexOf(mapping.name);
- next += base64VLQ.encode(nameIdx - previousName);
- previousName = nameIdx;
- }
- }
- result += next;
+ [AWAITDRAIN](cb) {
+ cb();
+ }
+ [CLOSE](cb) {
+ fs9.closeSync(this.fd);
+ cb();
}
- return result;
};
- SourceMapGenerator.prototype._generateSourcesContent = function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {
- return aSources.map(function(source) {
- if (!this._sourcesContents) {
- return null;
+ var WriteEntryTar = warner(class WriteEntryTar extends Minipass {
+ constructor(readEntry, opt) {
+ opt = opt || {};
+ super(opt);
+ this.preservePaths = !!opt.preservePaths;
+ this.portable = !!opt.portable;
+ this.strict = !!opt.strict;
+ this.noPax = !!opt.noPax;
+ this.noMtime = !!opt.noMtime;
+ this.readEntry = readEntry;
+ this.type = readEntry.type;
+ if (this.type === "Directory" && this.portable) {
+ this.noMtime = true;
}
- if (aSourceRoot != null) {
- source = util.relative(aSourceRoot, source);
+ this.prefix = opt.prefix || null;
+ this.path = normPath(readEntry.path);
+ this.mode = this[MODE](readEntry.mode);
+ this.uid = this.portable ? null : readEntry.uid;
+ this.gid = this.portable ? null : readEntry.gid;
+ this.uname = this.portable ? null : readEntry.uname;
+ this.gname = this.portable ? null : readEntry.gname;
+ this.size = readEntry.size;
+ this.mtime = this.noMtime ? null : opt.mtime || readEntry.mtime;
+ this.atime = this.portable ? null : readEntry.atime;
+ this.ctime = this.portable ? null : readEntry.ctime;
+ this.linkpath = normPath(readEntry.linkpath);
+ if (typeof opt.onwarn === "function") {
+ this.on("warn", opt.onwarn);
}
- var key = util.toSetString(source);
- return Object.prototype.hasOwnProperty.call(this._sourcesContents, key) ? this._sourcesContents[key] : null;
- }, this);
- };
- SourceMapGenerator.prototype.toJSON = function SourceMapGenerator_toJSON() {
- var map = {
- version: this._version,
- sources: this._sources.toArray(),
- names: this._names.toArray(),
- mappings: this._serializeMappings()
- };
- if (this._file != null) {
- map.file = this._file;
- }
- if (this._sourceRoot != null) {
- map.sourceRoot = this._sourceRoot;
- }
- if (this._sourcesContents) {
- map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);
- }
- return map;
- };
- SourceMapGenerator.prototype.toString = function SourceMapGenerator_toString() {
- return JSON.stringify(this.toJSON());
- };
- exports.SourceMapGenerator = SourceMapGenerator;
- }
-});
-
-// .yarn/cache/source-map-npm-0.6.1-1a3621db16-ab55398007.zip/node_modules/source-map/lib/binary-search.js
-var require_binary_search = __commonJS({
- ".yarn/cache/source-map-npm-0.6.1-1a3621db16-ab55398007.zip/node_modules/source-map/lib/binary-search.js"(exports) {
- exports.GREATEST_LOWER_BOUND = 1;
- exports.LEAST_UPPER_BOUND = 2;
- function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {
- var mid = Math.floor((aHigh - aLow) / 2) + aLow;
- var cmp = aCompare(aNeedle, aHaystack[mid], true);
- if (cmp === 0) {
- return mid;
- } else if (cmp > 0) {
- if (aHigh - mid > 1) {
- return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);
- }
- if (aBias == exports.LEAST_UPPER_BOUND) {
- return aHigh < aHaystack.length ? aHigh : -1;
- } else {
- return mid;
+ let pathWarn = false;
+ if (!this.preservePaths) {
+ const [root, stripped] = stripAbsolutePath(this.path);
+ if (root) {
+ this.path = stripped;
+ pathWarn = root;
+ }
}
- } else {
- if (mid - aLow > 1) {
- return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);
+ this.remain = readEntry.size;
+ this.blockRemain = readEntry.startBlockSize;
+ this.header = new Header({
+ path: this[PREFIX](this.path),
+ linkpath: this.type === "Link" ? 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 ? null : this.uid,
+ gid: this.portable ? null : this.gid,
+ size: this.size,
+ mtime: this.noMtime ? null : this.mtime,
+ type: this.type,
+ uname: this.portable ? null : this.uname,
+ atime: this.portable ? null : this.atime,
+ ctime: this.portable ? null : this.ctime
+ });
+ if (pathWarn) {
+ this.warn("TAR_ENTRY_INFO", `stripping ${pathWarn} from absolute path`, {
+ entry: this,
+ path: pathWarn + this.path
+ });
}
- if (aBias == exports.LEAST_UPPER_BOUND) {
- return mid;
- } else {
- return aLow < 0 ? -1 : aLow;
+ if (this.header.encode() && !this.noPax) {
+ super.write(new Pax({
+ atime: this.portable ? null : this.atime,
+ ctime: this.portable ? null : this.ctime,
+ gid: this.portable ? null : this.gid,
+ mtime: this.noMtime ? null : this.mtime,
+ path: this[PREFIX](this.path),
+ linkpath: this.type === "Link" ? this[PREFIX](this.linkpath) : this.linkpath,
+ size: this.size,
+ uid: this.portable ? null : this.uid,
+ uname: this.portable ? null : this.uname,
+ dev: this.portable ? null : this.readEntry.dev,
+ ino: this.portable ? null : this.readEntry.ino,
+ nlink: this.portable ? null : this.readEntry.nlink
+ }).encode());
}
+ super.write(this.header.block);
+ readEntry.pipe(this);
}
- }
- exports.search = function search(aNeedle, aHaystack, aCompare, aBias) {
- if (aHaystack.length === 0) {
- return -1;
+ [PREFIX](path11) {
+ return prefixPath(path11, this.prefix);
}
- var index = recursiveSearch(
- -1,
- aHaystack.length,
- aNeedle,
- aHaystack,
- aCompare,
- aBias || exports.GREATEST_LOWER_BOUND
- );
- if (index < 0) {
- return -1;
+ [MODE](mode) {
+ return modeFix(mode, this.type === "Directory", this.portable);
}
- while (index - 1 >= 0) {
- if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {
- break;
+ write(data) {
+ const writeLen = data.length;
+ if (writeLen > this.blockRemain) {
+ throw new Error("writing more to entry than is appropriate");
}
- --index;
+ this.blockRemain -= writeLen;
+ return super.write(data);
}
- return index;
- };
- }
-});
-
-// .yarn/cache/source-map-npm-0.6.1-1a3621db16-ab55398007.zip/node_modules/source-map/lib/quick-sort.js
-var require_quick_sort = __commonJS({
- ".yarn/cache/source-map-npm-0.6.1-1a3621db16-ab55398007.zip/node_modules/source-map/lib/quick-sort.js"(exports) {
- function swap(ary, x, y) {
- var temp = ary[x];
- ary[x] = ary[y];
- ary[y] = temp;
- }
- function randomIntInRange(low, high) {
- return Math.round(low + Math.random() * (high - low));
- }
- function doQuickSort(ary, comparator, p, r) {
- if (p < r) {
- var pivotIndex = randomIntInRange(p, r);
- var i = p - 1;
- swap(ary, pivotIndex, r);
- var pivot = ary[r];
- for (var j = p; j < r; j++) {
- if (comparator(ary[j], pivot) <= 0) {
- i += 1;
- swap(ary, i, j);
- }
+ end() {
+ if (this.blockRemain) {
+ super.write(Buffer.alloc(this.blockRemain));
}
- swap(ary, i + 1, j);
- var q = i + 1;
- doQuickSort(ary, comparator, p, q - 1);
- doQuickSort(ary, comparator, q + 1, r);
+ return super.end();
}
- }
- exports.quickSort = function(ary, comparator) {
- doQuickSort(ary, comparator, 0, ary.length - 1);
- };
+ });
+ WriteEntry.Sync = WriteEntrySync;
+ WriteEntry.Tar = WriteEntryTar;
+ var getType = (stat) => stat.isFile() ? "File" : stat.isDirectory() ? "Directory" : stat.isSymbolicLink() ? "SymbolicLink" : "Unsupported";
+ module2.exports = WriteEntry;
}
});
-// .yarn/cache/source-map-npm-0.6.1-1a3621db16-ab55398007.zip/node_modules/source-map/lib/source-map-consumer.js
-var require_source_map_consumer = __commonJS({
- ".yarn/cache/source-map-npm-0.6.1-1a3621db16-ab55398007.zip/node_modules/source-map/lib/source-map-consumer.js"(exports) {
- var util = require_util2();
- var binarySearch = require_binary_search();
- var ArraySet = require_array_set().ArraySet;
- var base64VLQ = require_base64_vlq();
- var quickSort = require_quick_sort().quickSort;
- function SourceMapConsumer(aSourceMap, aSourceMapURL) {
- var sourceMap = aSourceMap;
- if (typeof aSourceMap === "string") {
- sourceMap = util.parseSourceMapInput(aSourceMap);
- }
- return sourceMap.sections != null ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL) : new BasicSourceMapConsumer(sourceMap, aSourceMapURL);
- }
- SourceMapConsumer.fromSourceMap = function(aSourceMap, aSourceMapURL) {
- return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL);
- };
- SourceMapConsumer.prototype._version = 3;
- SourceMapConsumer.prototype.__generatedMappings = null;
- Object.defineProperty(SourceMapConsumer.prototype, "_generatedMappings", {
- configurable: true,
- enumerable: true,
- get: function() {
- if (!this.__generatedMappings) {
- this._parseMappings(this._mappings, this.sourceRoot);
- }
- return this.__generatedMappings;
- }
- });
- SourceMapConsumer.prototype.__originalMappings = null;
- Object.defineProperty(SourceMapConsumer.prototype, "_originalMappings", {
- configurable: true,
- enumerable: true,
- get: function() {
- if (!this.__originalMappings) {
- this._parseMappings(this._mappings, this.sourceRoot);
- }
- return this.__originalMappings;
- }
- });
- SourceMapConsumer.prototype._charIsMappingSeparator = function SourceMapConsumer_charIsMappingSeparator(aStr, index) {
- var c = aStr.charAt(index);
- return c === ";" || c === ",";
- };
- SourceMapConsumer.prototype._parseMappings = function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
- throw new Error("Subclasses must implement _parseMappings");
- };
- SourceMapConsumer.GENERATED_ORDER = 1;
- SourceMapConsumer.ORIGINAL_ORDER = 2;
- SourceMapConsumer.GREATEST_LOWER_BOUND = 1;
- SourceMapConsumer.LEAST_UPPER_BOUND = 2;
- SourceMapConsumer.prototype.eachMapping = function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {
- var context = aContext || null;
- var order = aOrder || SourceMapConsumer.GENERATED_ORDER;
- var mappings;
- switch (order) {
- case SourceMapConsumer.GENERATED_ORDER:
- mappings = this._generatedMappings;
- break;
- case SourceMapConsumer.ORIGINAL_ORDER:
- mappings = this._originalMappings;
- break;
- default:
- throw new Error("Unknown order of iteration.");
- }
- var sourceRoot = this.sourceRoot;
- mappings.map(function(mapping) {
- var source = mapping.source === null ? null : this._sources.at(mapping.source);
- source = util.computeSourceURL(sourceRoot, source, this._sourceMapURL);
- return {
- source,
- generatedLine: mapping.generatedLine,
- generatedColumn: mapping.generatedColumn,
- originalLine: mapping.originalLine,
- originalColumn: mapping.originalColumn,
- name: mapping.name === null ? null : this._names.at(mapping.name)
- };
- }, this).forEach(aCallback, context);
- };
- SourceMapConsumer.prototype.allGeneratedPositionsFor = function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {
- var line = util.getArg(aArgs, "line");
- var needle = {
- source: util.getArg(aArgs, "source"),
- originalLine: line,
- originalColumn: util.getArg(aArgs, "column", 0)
- };
- needle.source = this._findSourceIndex(needle.source);
- if (needle.source < 0) {
- return [];
- }
- var mappings = [];
- var index = this._findMapping(
- needle,
- this._originalMappings,
- "originalLine",
- "originalColumn",
- util.compareByOriginalPositions,
- binarySearch.LEAST_UPPER_BOUND
- );
- if (index >= 0) {
- var mapping = this._originalMappings[index];
- if (aArgs.column === void 0) {
- var originalLine = mapping.originalLine;
- while (mapping && mapping.originalLine === originalLine) {
- mappings.push({
- line: util.getArg(mapping, "generatedLine", null),
- column: util.getArg(mapping, "generatedColumn", null),
- lastColumn: util.getArg(mapping, "lastGeneratedColumn", null)
- });
- mapping = this._originalMappings[++index];
- }
- } else {
- var originalColumn = mapping.originalColumn;
- while (mapping && mapping.originalLine === line && mapping.originalColumn == originalColumn) {
- mappings.push({
- line: util.getArg(mapping, "generatedLine", null),
- column: util.getArg(mapping, "generatedColumn", null),
- lastColumn: util.getArg(mapping, "lastGeneratedColumn", null)
- });
- mapping = this._originalMappings[++index];
- }
- }
+// .yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/pack.js
+var require_pack = __commonJS({
+ ".yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/pack.js"(exports, module2) {
+ "use strict";
+ var PackJob = class {
+ constructor(path11, absolute) {
+ this.path = path11 || "./";
+ this.absolute = absolute;
+ this.entry = null;
+ this.stat = null;
+ this.readdir = null;
+ this.pending = false;
+ this.ignore = false;
+ this.piped = false;
}
- return mappings;
};
- exports.SourceMapConsumer = SourceMapConsumer;
- function BasicSourceMapConsumer(aSourceMap, aSourceMapURL) {
- var sourceMap = aSourceMap;
- if (typeof aSourceMap === "string") {
- sourceMap = util.parseSourceMapInput(aSourceMap);
- }
- var version2 = util.getArg(sourceMap, "version");
- var sources = util.getArg(sourceMap, "sources");
- var names = util.getArg(sourceMap, "names", []);
- var sourceRoot = util.getArg(sourceMap, "sourceRoot", null);
- var sourcesContent = util.getArg(sourceMap, "sourcesContent", null);
- var mappings = util.getArg(sourceMap, "mappings");
- var file = util.getArg(sourceMap, "file", null);
- if (version2 != this._version) {
- throw new Error("Unsupported version: " + version2);
- }
- if (sourceRoot) {
- sourceRoot = util.normalize(sourceRoot);
- }
- sources = sources.map(String).map(util.normalize).map(function(source) {
- return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source) ? util.relative(sourceRoot, source) : source;
- });
- this._names = ArraySet.fromArray(names.map(String), true);
- this._sources = ArraySet.fromArray(sources, true);
- this._absoluteSources = this._sources.toArray().map(function(s) {
- return util.computeSourceURL(sourceRoot, s, aSourceMapURL);
- });
- this.sourceRoot = sourceRoot;
- this.sourcesContent = sourcesContent;
- this._mappings = mappings;
- this._sourceMapURL = aSourceMapURL;
- this.file = file;
- }
- BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
- BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;
- BasicSourceMapConsumer.prototype._findSourceIndex = function(aSource) {
- var relativeSource = aSource;
- if (this.sourceRoot != null) {
- relativeSource = util.relative(this.sourceRoot, relativeSource);
- }
- if (this._sources.has(relativeSource)) {
- return this._sources.indexOf(relativeSource);
- }
- var i;
- for (i = 0; i < this._absoluteSources.length; ++i) {
- if (this._absoluteSources[i] == aSource) {
- return i;
- }
- }
- return -1;
- };
- BasicSourceMapConsumer.fromSourceMap = function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) {
- var smc = Object.create(BasicSourceMapConsumer.prototype);
- var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);
- var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);
- smc.sourceRoot = aSourceMap._sourceRoot;
- smc.sourcesContent = aSourceMap._generateSourcesContent(
- smc._sources.toArray(),
- smc.sourceRoot
- );
- smc.file = aSourceMap._file;
- smc._sourceMapURL = aSourceMapURL;
- smc._absoluteSources = smc._sources.toArray().map(function(s) {
- return util.computeSourceURL(smc.sourceRoot, s, aSourceMapURL);
- });
- var generatedMappings = aSourceMap._mappings.toArray().slice();
- var destGeneratedMappings = smc.__generatedMappings = [];
- var destOriginalMappings = smc.__originalMappings = [];
- for (var i = 0, length = generatedMappings.length; i < length; i++) {
- var srcMapping = generatedMappings[i];
- var destMapping = new Mapping();
- destMapping.generatedLine = srcMapping.generatedLine;
- destMapping.generatedColumn = srcMapping.generatedColumn;
- if (srcMapping.source) {
- destMapping.source = sources.indexOf(srcMapping.source);
- destMapping.originalLine = srcMapping.originalLine;
- destMapping.originalColumn = srcMapping.originalColumn;
- if (srcMapping.name) {
- destMapping.name = names.indexOf(srcMapping.name);
- }
- destOriginalMappings.push(destMapping);
- }
- destGeneratedMappings.push(destMapping);
- }
- quickSort(smc.__originalMappings, util.compareByOriginalPositions);
- return smc;
- };
- BasicSourceMapConsumer.prototype._version = 3;
- Object.defineProperty(BasicSourceMapConsumer.prototype, "sources", {
- get: function() {
- return this._absoluteSources.slice();
- }
- });
- function Mapping() {
- this.generatedLine = 0;
- this.generatedColumn = 0;
- this.source = null;
- this.originalLine = null;
- this.originalColumn = null;
- this.name = null;
- }
- BasicSourceMapConsumer.prototype._parseMappings = function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
- var generatedLine = 1;
- var previousGeneratedColumn = 0;
- var previousOriginalLine = 0;
- var previousOriginalColumn = 0;
- var previousSource = 0;
- var previousName = 0;
- var length = aStr.length;
- var index = 0;
- var cachedSegments = {};
- var temp = {};
- var originalMappings = [];
- var generatedMappings = [];
- var mapping, str, segment, end, value;
- while (index < length) {
- if (aStr.charAt(index) === ";") {
- generatedLine++;
- index++;
- previousGeneratedColumn = 0;
- } else if (aStr.charAt(index) === ",") {
- index++;
- } else {
- mapping = new Mapping();
- mapping.generatedLine = generatedLine;
- for (end = index; end < length; end++) {
- if (this._charIsMappingSeparator(aStr, end)) {
- break;
- }
+ var { Minipass } = require_minipass();
+ var zlib = require_minizlib();
+ var ReadEntry = require_read_entry();
+ var WriteEntry = require_write_entry();
+ var WriteEntrySync = WriteEntry.Sync;
+ var WriteEntryTar = WriteEntry.Tar;
+ var Yallist = require_yallist();
+ var EOF = Buffer.alloc(1024);
+ var ONSTAT = Symbol("onStat");
+ var ENDED = Symbol("ended");
+ var QUEUE = Symbol("queue");
+ var CURRENT = Symbol("current");
+ var PROCESS = Symbol("process");
+ var PROCESSING = Symbol("processing");
+ var PROCESSJOB = Symbol("processJob");
+ var JOBS = Symbol("jobs");
+ var JOBDONE = Symbol("jobDone");
+ var ADDFSENTRY = Symbol("addFSEntry");
+ var ADDTARENTRY = Symbol("addTarEntry");
+ var STAT = Symbol("stat");
+ var READDIR = Symbol("readdir");
+ var ONREADDIR = Symbol("onreaddir");
+ var PIPE = Symbol("pipe");
+ var ENTRY = Symbol("entry");
+ var ENTRYOPT = Symbol("entryOpt");
+ var WRITEENTRYCLASS = Symbol("writeEntryClass");
+ var WRITE = Symbol("write");
+ var ONDRAIN = Symbol("ondrain");
+ var fs9 = require("fs");
+ var path10 = require("path");
+ var warner = require_warn_mixin();
+ var normPath = require_normalize_windows_path();
+ var Pack = warner(class Pack extends Minipass {
+ constructor(opt) {
+ super(opt);
+ opt = opt || /* @__PURE__ */ Object.create(null);
+ 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 = normPath(opt.prefix || "");
+ this.linkCache = opt.linkCache || /* @__PURE__ */ new Map();
+ this.statCache = opt.statCache || /* @__PURE__ */ new Map();
+ this.readdirCache = opt.readdirCache || /* @__PURE__ */ new Map();
+ this[WRITEENTRYCLASS] = WriteEntry;
+ if (typeof opt.onwarn === "function") {
+ this.on("warn", opt.onwarn);
+ }
+ this.portable = !!opt.portable;
+ this.zip = null;
+ if (opt.gzip || opt.brotli) {
+ if (opt.gzip && opt.brotli) {
+ throw new TypeError("gzip and brotli are mutually exclusive");
}
- str = aStr.slice(index, end);
- segment = cachedSegments[str];
- if (segment) {
- index += str.length;
- } else {
- segment = [];
- while (index < end) {
- base64VLQ.decode(aStr, index, temp);
- value = temp.value;
- index = temp.rest;
- segment.push(value);
- }
- if (segment.length === 2) {
- throw new Error("Found a source, but no line and column");
- }
- if (segment.length === 3) {
- throw new Error("Found a source and line, but no column");
+ if (opt.gzip) {
+ if (typeof opt.gzip !== "object") {
+ opt.gzip = {};
}
- cachedSegments[str] = segment;
- }
- mapping.generatedColumn = previousGeneratedColumn + segment[0];
- previousGeneratedColumn = mapping.generatedColumn;
- if (segment.length > 1) {
- mapping.source = previousSource + segment[1];
- previousSource += segment[1];
- mapping.originalLine = previousOriginalLine + segment[2];
- previousOriginalLine = mapping.originalLine;
- mapping.originalLine += 1;
- mapping.originalColumn = previousOriginalColumn + segment[3];
- previousOriginalColumn = mapping.originalColumn;
- if (segment.length > 4) {
- mapping.name = previousName + segment[4];
- previousName += segment[4];
+ if (this.portable) {
+ opt.gzip.portable = true;
}
+ this.zip = new zlib.Gzip(opt.gzip);
}
- generatedMappings.push(mapping);
- if (typeof mapping.originalLine === "number") {
- originalMappings.push(mapping);
+ if (opt.brotli) {
+ if (typeof opt.brotli !== "object") {
+ opt.brotli = {};
+ }
+ this.zip = new zlib.BrotliCompress(opt.brotli);
}
+ this.zip.on("data", (chunk) => super.write(chunk));
+ this.zip.on("end", (_) => super.end());
+ this.zip.on("drain", (_) => this[ONDRAIN]());
+ this.on("resume", (_) => this.zip.resume());
+ } else {
+ this.on("drain", this[ONDRAIN]);
}
+ this.noDirRecurse = !!opt.noDirRecurse;
+ this.follow = !!opt.follow;
+ this.noMtime = !!opt.noMtime;
+ this.mtime = opt.mtime || null;
+ this.filter = typeof opt.filter === "function" ? opt.filter : (_) => true;
+ this[QUEUE] = new Yallist();
+ this[JOBS] = 0;
+ this.jobs = +opt.jobs || 4;
+ this[PROCESSING] = false;
+ this[ENDED] = false;
}
- quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);
- this.__generatedMappings = generatedMappings;
- quickSort(originalMappings, util.compareByOriginalPositions);
- this.__originalMappings = originalMappings;
- };
- BasicSourceMapConsumer.prototype._findMapping = function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName, aColumnName, aComparator, aBias) {
- if (aNeedle[aLineName] <= 0) {
- throw new TypeError("Line must be greater than or equal to 1, got " + aNeedle[aLineName]);
+ [WRITE](chunk) {
+ return super.write(chunk);
}
- if (aNeedle[aColumnName] < 0) {
- throw new TypeError("Column must be greater than or equal to 0, got " + aNeedle[aColumnName]);
+ add(path11) {
+ this.write(path11);
+ return this;
}
- return binarySearch.search(aNeedle, aMappings, aComparator, aBias);
- };
- BasicSourceMapConsumer.prototype.computeColumnSpans = function SourceMapConsumer_computeColumnSpans() {
- for (var index = 0; index < this._generatedMappings.length; ++index) {
- var mapping = this._generatedMappings[index];
- if (index + 1 < this._generatedMappings.length) {
- var nextMapping = this._generatedMappings[index + 1];
- if (mapping.generatedLine === nextMapping.generatedLine) {
- mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;
- continue;
- }
+ end(path11) {
+ if (path11) {
+ this.write(path11);
}
- mapping.lastGeneratedColumn = Infinity;
+ this[ENDED] = true;
+ this[PROCESS]();
+ return this;
}
- };
- BasicSourceMapConsumer.prototype.originalPositionFor = function SourceMapConsumer_originalPositionFor(aArgs) {
- var needle = {
- generatedLine: util.getArg(aArgs, "line"),
- generatedColumn: util.getArg(aArgs, "column")
- };
- var index = this._findMapping(
- needle,
- this._generatedMappings,
- "generatedLine",
- "generatedColumn",
- util.compareByGeneratedPositionsDeflated,
- util.getArg(aArgs, "bias", SourceMapConsumer.GREATEST_LOWER_BOUND)
- );
- if (index >= 0) {
- var mapping = this._generatedMappings[index];
- if (mapping.generatedLine === needle.generatedLine) {
- var source = util.getArg(mapping, "source", null);
- if (source !== null) {
- source = this._sources.at(source);
- source = util.computeSourceURL(this.sourceRoot, source, this._sourceMapURL);
- }
- var name = util.getArg(mapping, "name", null);
- if (name !== null) {
- name = this._names.at(name);
- }
- return {
- source,
- line: util.getArg(mapping, "originalLine", null),
- column: util.getArg(mapping, "originalColumn", null),
- name
- };
+ write(path11) {
+ if (this[ENDED]) {
+ throw new Error("write after end");
}
+ if (path11 instanceof ReadEntry) {
+ this[ADDTARENTRY](path11);
+ } else {
+ this[ADDFSENTRY](path11);
+ }
+ return this.flowing;
}
- return {
- source: null,
- line: null,
- column: null,
- name: null
- };
- };
- BasicSourceMapConsumer.prototype.hasContentsOfAllSources = function BasicSourceMapConsumer_hasContentsOfAllSources() {
- if (!this.sourcesContent) {
- return false;
- }
- return this.sourcesContent.length >= this._sources.size() && !this.sourcesContent.some(function(sc) {
- return sc == null;
- });
- };
- BasicSourceMapConsumer.prototype.sourceContentFor = function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
- if (!this.sourcesContent) {
- return null;
+ [ADDTARENTRY](p) {
+ const absolute = normPath(path10.resolve(this.cwd, p.path));
+ if (!this.filter(p.path, p)) {
+ p.resume();
+ } else {
+ const job = new PackJob(p.path, absolute, false);
+ job.entry = new WriteEntryTar(p, this[ENTRYOPT](job));
+ job.entry.on("end", (_) => this[JOBDONE](job));
+ this[JOBS] += 1;
+ this[QUEUE].push(job);
+ }
+ this[PROCESS]();
}
- var index = this._findSourceIndex(aSource);
- if (index >= 0) {
- return this.sourcesContent[index];
+ [ADDFSENTRY](p) {
+ const absolute = normPath(path10.resolve(this.cwd, p));
+ this[QUEUE].push(new PackJob(p, absolute));
+ this[PROCESS]();
}
- var relativeSource = aSource;
- if (this.sourceRoot != null) {
- relativeSource = util.relative(this.sourceRoot, relativeSource);
+ [STAT](job) {
+ job.pending = true;
+ this[JOBS] += 1;
+ const stat = this.follow ? "stat" : "lstat";
+ fs9[stat](job.absolute, (er, stat2) => {
+ job.pending = false;
+ this[JOBS] -= 1;
+ if (er) {
+ this.emit("error", er);
+ } else {
+ this[ONSTAT](job, stat2);
+ }
+ });
}
- var url;
- if (this.sourceRoot != null && (url = util.urlParse(this.sourceRoot))) {
- var fileUriAbsPath = relativeSource.replace(/^file:\/\//, "");
- if (url.scheme == "file" && this._sources.has(fileUriAbsPath)) {
- return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)];
- }
- if ((!url.path || url.path == "/") && this._sources.has("/" + relativeSource)) {
- return this.sourcesContent[this._sources.indexOf("/" + relativeSource)];
+ [ONSTAT](job, stat) {
+ this.statCache.set(job.absolute, stat);
+ job.stat = stat;
+ if (!this.filter(job.path, stat)) {
+ job.ignore = true;
}
+ this[PROCESS]();
}
- if (nullOnMissing) {
- return null;
- } else {
- throw new Error('"' + relativeSource + '" is not in the SourceMap.');
- }
- };
- BasicSourceMapConsumer.prototype.generatedPositionFor = function SourceMapConsumer_generatedPositionFor(aArgs) {
- var source = util.getArg(aArgs, "source");
- source = this._findSourceIndex(source);
- if (source < 0) {
- return {
- line: null,
- column: null,
- lastColumn: null
- };
+ [READDIR](job) {
+ job.pending = true;
+ this[JOBS] += 1;
+ fs9.readdir(job.absolute, (er, entries) => {
+ job.pending = false;
+ this[JOBS] -= 1;
+ if (er) {
+ return this.emit("error", er);
+ }
+ this[ONREADDIR](job, entries);
+ });
}
- var needle = {
- source,
- originalLine: util.getArg(aArgs, "line"),
- originalColumn: util.getArg(aArgs, "column")
- };
- var index = this._findMapping(
- needle,
- this._originalMappings,
- "originalLine",
- "originalColumn",
- util.compareByOriginalPositions,
- util.getArg(aArgs, "bias", SourceMapConsumer.GREATEST_LOWER_BOUND)
- );
- if (index >= 0) {
- var mapping = this._originalMappings[index];
- if (mapping.source === needle.source) {
- return {
- line: util.getArg(mapping, "generatedLine", null),
- column: util.getArg(mapping, "generatedColumn", null),
- lastColumn: util.getArg(mapping, "lastGeneratedColumn", null)
- };
- }
+ [ONREADDIR](job, entries) {
+ this.readdirCache.set(job.absolute, entries);
+ job.readdir = entries;
+ this[PROCESS]();
}
- return {
- line: null,
- column: null,
- lastColumn: null
- };
- };
- exports.BasicSourceMapConsumer = BasicSourceMapConsumer;
- function IndexedSourceMapConsumer(aSourceMap, aSourceMapURL) {
- var sourceMap = aSourceMap;
- if (typeof aSourceMap === "string") {
- sourceMap = util.parseSourceMapInput(aSourceMap);
- }
- var version2 = util.getArg(sourceMap, "version");
- var sections = util.getArg(sourceMap, "sections");
- if (version2 != this._version) {
- throw new Error("Unsupported version: " + version2);
- }
- this._sources = new ArraySet();
- this._names = new ArraySet();
- var lastOffset = {
- line: -1,
- column: 0
- };
- this._sections = sections.map(function(s) {
- if (s.url) {
- throw new Error("Support for url field in sections not implemented.");
- }
- var offset = util.getArg(s, "offset");
- var offsetLine = util.getArg(offset, "line");
- var offsetColumn = util.getArg(offset, "column");
- if (offsetLine < lastOffset.line || offsetLine === lastOffset.line && offsetColumn < lastOffset.column) {
- throw new Error("Section offsets must be ordered and non-overlapping.");
+ [PROCESS]() {
+ if (this[PROCESSING]) {
+ return;
}
- lastOffset = offset;
- return {
- generatedOffset: {
- // The offset fields are 0-based, but we use 1-based indices when
- // encoding/decoding from VLQ.
- generatedLine: offsetLine + 1,
- generatedColumn: offsetColumn + 1
- },
- consumer: new SourceMapConsumer(util.getArg(s, "map"), aSourceMapURL)
- };
- });
- }
- IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
- IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;
- IndexedSourceMapConsumer.prototype._version = 3;
- Object.defineProperty(IndexedSourceMapConsumer.prototype, "sources", {
- get: function() {
- var sources = [];
- for (var i = 0; i < this._sections.length; i++) {
- for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {
- sources.push(this._sections[i].consumer.sources[j]);
+ this[PROCESSING] = true;
+ for (let w = this[QUEUE].head; w !== null && this[JOBS] < this.jobs; w = w.next) {
+ this[PROCESSJOB](w.value);
+ if (w.value.ignore) {
+ const p = w.next;
+ this[QUEUE].removeNode(w);
+ w.next = p;
}
}
- return sources;
- }
- });
- IndexedSourceMapConsumer.prototype.originalPositionFor = function IndexedSourceMapConsumer_originalPositionFor(aArgs) {
- var needle = {
- generatedLine: util.getArg(aArgs, "line"),
- generatedColumn: util.getArg(aArgs, "column")
- };
- var sectionIndex = binarySearch.search(
- needle,
- this._sections,
- function(needle2, section2) {
- var cmp = needle2.generatedLine - section2.generatedOffset.generatedLine;
- if (cmp) {
- return cmp;
+ this[PROCESSING] = false;
+ if (this[ENDED] && !this[QUEUE].length && this[JOBS] === 0) {
+ if (this.zip) {
+ this.zip.end(EOF);
+ } else {
+ super.write(EOF);
+ super.end();
}
- return needle2.generatedColumn - section2.generatedOffset.generatedColumn;
}
- );
- var section = this._sections[sectionIndex];
- if (!section) {
- return {
- source: null,
- line: null,
- column: null,
- name: null
- };
}
- return section.consumer.originalPositionFor({
- line: needle.generatedLine - (section.generatedOffset.generatedLine - 1),
- column: needle.generatedColumn - (section.generatedOffset.generatedLine === needle.generatedLine ? section.generatedOffset.generatedColumn - 1 : 0),
- bias: aArgs.bias
- });
- };
- IndexedSourceMapConsumer.prototype.hasContentsOfAllSources = function IndexedSourceMapConsumer_hasContentsOfAllSources() {
- return this._sections.every(function(s) {
- return s.consumer.hasContentsOfAllSources();
- });
- };
- IndexedSourceMapConsumer.prototype.sourceContentFor = function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
- for (var i = 0; i < this._sections.length; i++) {
- var section = this._sections[i];
- var content = section.consumer.sourceContentFor(aSource, true);
- if (content) {
- return content;
- }
+ get [CURRENT]() {
+ return this[QUEUE] && this[QUEUE].head && this[QUEUE].head.value;
}
- if (nullOnMissing) {
- return null;
- } else {
- throw new Error('"' + aSource + '" is not in the SourceMap.');
+ [JOBDONE](job) {
+ this[QUEUE].shift();
+ this[JOBS] -= 1;
+ this[PROCESS]();
}
- };
- IndexedSourceMapConsumer.prototype.generatedPositionFor = function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {
- for (var i = 0; i < this._sections.length; i++) {
- var section = this._sections[i];
- if (section.consumer._findSourceIndex(util.getArg(aArgs, "source")) === -1) {
- continue;
+ [PROCESSJOB](job) {
+ if (job.pending) {
+ return;
}
- var generatedPosition = section.consumer.generatedPositionFor(aArgs);
- if (generatedPosition) {
- var ret = {
- line: generatedPosition.line + (section.generatedOffset.generatedLine - 1),
- column: generatedPosition.column + (section.generatedOffset.generatedLine === generatedPosition.line ? section.generatedOffset.generatedColumn - 1 : 0)
- };
- return ret;
+ if (job.entry) {
+ if (job === this[CURRENT] && !job.piped) {
+ this[PIPE](job);
+ }
+ return;
}
- }
- return {
- line: null,
- column: null
- };
- };
- IndexedSourceMapConsumer.prototype._parseMappings = function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {
- this.__generatedMappings = [];
- this.__originalMappings = [];
- for (var i = 0; i < this._sections.length; i++) {
- var section = this._sections[i];
- var sectionMappings = section.consumer._generatedMappings;
- for (var j = 0; j < sectionMappings.length; j++) {
- var mapping = sectionMappings[j];
- var source = section.consumer._sources.at(mapping.source);
- source = util.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL);
- this._sources.add(source);
- source = this._sources.indexOf(source);
- var name = null;
- if (mapping.name) {
- name = section.consumer._names.at(mapping.name);
- this._names.add(name);
- name = this._names.indexOf(name);
- }
- var adjustedMapping = {
- source,
- generatedLine: mapping.generatedLine + (section.generatedOffset.generatedLine - 1),
- generatedColumn: mapping.generatedColumn + (section.generatedOffset.generatedLine === mapping.generatedLine ? section.generatedOffset.generatedColumn - 1 : 0),
- originalLine: mapping.originalLine,
- originalColumn: mapping.originalColumn,
- name
- };
- this.__generatedMappings.push(adjustedMapping);
- if (typeof adjustedMapping.originalLine === "number") {
- this.__originalMappings.push(adjustedMapping);
+ if (!job.stat) {
+ if (this.statCache.has(job.absolute)) {
+ this[ONSTAT](job, this.statCache.get(job.absolute));
+ } else {
+ this[STAT](job);
}
}
- }
- quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);
- quickSort(this.__originalMappings, util.compareByOriginalPositions);
- };
- exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;
- }
-});
-
-// .yarn/cache/source-map-npm-0.6.1-1a3621db16-ab55398007.zip/node_modules/source-map/lib/source-node.js
-var require_source_node = __commonJS({
- ".yarn/cache/source-map-npm-0.6.1-1a3621db16-ab55398007.zip/node_modules/source-map/lib/source-node.js"(exports) {
- var SourceMapGenerator = require_source_map_generator().SourceMapGenerator;
- var util = require_util2();
- var REGEX_NEWLINE = /(\r?\n)/;
- var NEWLINE_CODE = 10;
- var isSourceNode = "$$$isSourceNode$$$";
- function SourceNode(aLine, aColumn, aSource, aChunks, aName) {
- this.children = [];
- this.sourceContents = {};
- this.line = aLine == null ? null : aLine;
- this.column = aColumn == null ? null : aColumn;
- this.source = aSource == null ? null : aSource;
- this.name = aName == null ? null : aName;
- this[isSourceNode] = true;
- if (aChunks != null)
- this.add(aChunks);
- }
- SourceNode.fromStringWithSourceMap = function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {
- var node = new SourceNode();
- var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);
- var remainingLinesIndex = 0;
- var shiftNextLine = function() {
- var lineContents = getNextLine();
- var newLine = getNextLine() || "";
- return lineContents + newLine;
- function getNextLine() {
- return remainingLinesIndex < remainingLines.length ? remainingLines[remainingLinesIndex++] : void 0;
+ if (!job.stat) {
+ return;
}
- };
- var lastGeneratedLine = 1, lastGeneratedColumn = 0;
- var lastMapping = null;
- aSourceMapConsumer.eachMapping(function(mapping) {
- if (lastMapping !== null) {
- if (lastGeneratedLine < mapping.generatedLine) {
- addMappingWithCode(lastMapping, shiftNextLine());
- lastGeneratedLine++;
- lastGeneratedColumn = 0;
+ if (job.ignore) {
+ return;
+ }
+ if (!this.noDirRecurse && job.stat.isDirectory() && !job.readdir) {
+ if (this.readdirCache.has(job.absolute)) {
+ this[ONREADDIR](job, this.readdirCache.get(job.absolute));
} else {
- var nextLine = remainingLines[remainingLinesIndex] || "";
- var code = nextLine.substr(0, mapping.generatedColumn - lastGeneratedColumn);
- remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn - lastGeneratedColumn);
- lastGeneratedColumn = mapping.generatedColumn;
- addMappingWithCode(lastMapping, code);
- lastMapping = mapping;
+ this[READDIR](job);
+ }
+ if (!job.readdir) {
return;
}
}
- while (lastGeneratedLine < mapping.generatedLine) {
- node.add(shiftNextLine());
- lastGeneratedLine++;
- }
- if (lastGeneratedColumn < mapping.generatedColumn) {
- var nextLine = remainingLines[remainingLinesIndex] || "";
- node.add(nextLine.substr(0, mapping.generatedColumn));
- remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);
- lastGeneratedColumn = mapping.generatedColumn;
+ job.entry = this[ENTRY](job);
+ if (!job.entry) {
+ job.ignore = true;
+ return;
}
- lastMapping = mapping;
- }, this);
- if (remainingLinesIndex < remainingLines.length) {
- if (lastMapping) {
- addMappingWithCode(lastMapping, shiftNextLine());
+ if (job === this[CURRENT] && !job.piped) {
+ this[PIPE](job);
}
- node.add(remainingLines.splice(remainingLinesIndex).join(""));
}
- aSourceMapConsumer.sources.forEach(function(sourceFile) {
- var content = aSourceMapConsumer.sourceContentFor(sourceFile);
- if (content != null) {
- if (aRelativePath != null) {
- sourceFile = util.join(aRelativePath, sourceFile);
- }
- node.setSourceContent(sourceFile, content);
- }
- });
- return node;
- function addMappingWithCode(mapping, code) {
- if (mapping === null || mapping.source === void 0) {
- node.add(code);
- } else {
- var source = aRelativePath ? util.join(aRelativePath, mapping.source) : mapping.source;
- node.add(new SourceNode(
- mapping.originalLine,
- mapping.originalColumn,
- source,
- code,
- mapping.name
- ));
- }
+ [ENTRYOPT](job) {
+ return {
+ onwarn: (code, msg, data) => this.warn(code, 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
+ };
}
- };
- SourceNode.prototype.add = function SourceNode_add(aChunk) {
- if (Array.isArray(aChunk)) {
- aChunk.forEach(function(chunk) {
- this.add(chunk);
- }, this);
- } else if (aChunk[isSourceNode] || typeof aChunk === "string") {
- if (aChunk) {
- this.children.push(aChunk);
+ [ENTRY](job) {
+ this[JOBS] += 1;
+ try {
+ return new this[WRITEENTRYCLASS](job.path, this[ENTRYOPT](job)).on("end", () => this[JOBDONE](job)).on("error", (er) => this.emit("error", er));
+ } catch (er) {
+ this.emit("error", er);
}
- } else {
- throw new TypeError(
- "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
- );
}
- return this;
- };
- SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {
- if (Array.isArray(aChunk)) {
- for (var i = aChunk.length - 1; i >= 0; i--) {
- this.prepend(aChunk[i]);
+ [ONDRAIN]() {
+ if (this[CURRENT] && this[CURRENT].entry) {
+ this[CURRENT].entry.resume();
}
- } else if (aChunk[isSourceNode] || typeof aChunk === "string") {
- this.children.unshift(aChunk);
- } else {
- throw new TypeError(
- "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
- );
}
- return this;
- };
- SourceNode.prototype.walk = function SourceNode_walk(aFn) {
- var chunk;
- for (var i = 0, len = this.children.length; i < len; i++) {
- chunk = this.children[i];
- if (chunk[isSourceNode]) {
- chunk.walk(aFn);
+ // 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 (zip) {
+ source.on("data", (chunk) => {
+ if (!zip.write(chunk)) {
+ source.pause();
+ }
+ });
} else {
- if (chunk !== "") {
- aFn(chunk, {
- source: this.source,
- line: this.line,
- column: this.column,
- name: this.name
- });
- }
+ source.on("data", (chunk) => {
+ if (!super.write(chunk)) {
+ source.pause();
+ }
+ });
}
}
- };
- SourceNode.prototype.join = function SourceNode_join(aSep) {
- var newChildren;
- var i;
- var len = this.children.length;
- if (len > 0) {
- newChildren = [];
- for (i = 0; i < len - 1; i++) {
- newChildren.push(this.children[i]);
- newChildren.push(aSep);
- }
- newChildren.push(this.children[i]);
- this.children = newChildren;
+ pause() {
+ if (this.zip) {
+ this.zip.pause();
+ }
+ return super.pause();
}
- return this;
- };
- SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {
- var lastChild = this.children[this.children.length - 1];
- if (lastChild[isSourceNode]) {
- lastChild.replaceRight(aPattern, aReplacement);
- } else if (typeof lastChild === "string") {
- this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);
- } else {
- this.children.push("".replace(aPattern, aReplacement));
+ });
+ var PackSync = class extends Pack {
+ constructor(opt) {
+ super(opt);
+ this[WRITEENTRYCLASS] = WriteEntrySync;
}
- return this;
- };
- SourceNode.prototype.setSourceContent = function SourceNode_setSourceContent(aSourceFile, aSourceContent) {
- this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;
- };
- SourceNode.prototype.walkSourceContents = function SourceNode_walkSourceContents(aFn) {
- for (var i = 0, len = this.children.length; i < len; i++) {
- if (this.children[i][isSourceNode]) {
- this.children[i].walkSourceContents(aFn);
- }
+ // pause/resume are no-ops in sync streams.
+ pause() {
}
- var sources = Object.keys(this.sourceContents);
- for (var i = 0, len = sources.length; i < len; i++) {
- aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);
+ resume() {
}
- };
- SourceNode.prototype.toString = function SourceNode_toString() {
- var str = "";
- this.walk(function(chunk) {
- str += chunk;
- });
- return str;
- };
- SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {
- var generated = {
- code: "",
- line: 1,
- column: 0
- };
- var map = new SourceMapGenerator(aArgs);
- var sourceMappingActive = false;
- var lastOriginalSource = null;
- var lastOriginalLine = null;
- var lastOriginalColumn = null;
- var lastOriginalName = null;
- this.walk(function(chunk, original) {
- generated.code += chunk;
- if (original.source !== null && original.line !== null && original.column !== null) {
- if (lastOriginalSource !== original.source || lastOriginalLine !== original.line || lastOriginalColumn !== original.column || lastOriginalName !== original.name) {
- map.addMapping({
- source: original.source,
- original: {
- line: original.line,
- column: original.column
- },
- generated: {
- line: generated.line,
- column: generated.column
- },
- name: original.name
- });
- }
- lastOriginalSource = original.source;
- lastOriginalLine = original.line;
- lastOriginalColumn = original.column;
- lastOriginalName = original.name;
- sourceMappingActive = true;
- } else if (sourceMappingActive) {
- map.addMapping({
- generated: {
- line: generated.line,
- column: generated.column
- }
+ [STAT](job) {
+ const stat = this.follow ? "statSync" : "lstatSync";
+ this[ONSTAT](job, fs9[stat](job.absolute));
+ }
+ [READDIR](job, stat) {
+ this[ONREADDIR](job, fs9.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 (zip) {
+ source.on("data", (chunk) => {
+ zip.write(chunk);
+ });
+ } else {
+ source.on("data", (chunk) => {
+ super[WRITE](chunk);
});
- lastOriginalSource = null;
- sourceMappingActive = false;
- }
- for (var idx = 0, length = chunk.length; idx < length; idx++) {
- if (chunk.charCodeAt(idx) === NEWLINE_CODE) {
- generated.line++;
- generated.column = 0;
- if (idx + 1 === length) {
- lastOriginalSource = null;
- sourceMappingActive = false;
- } else if (sourceMappingActive) {
- map.addMapping({
- source: original.source,
- original: {
- line: original.line,
- column: original.column
- },
- generated: {
- line: generated.line,
- column: generated.column
- },
- name: original.name
- });
- }
- } else {
- generated.column++;
- }
}
- });
- this.walkSourceContents(function(sourceFile, sourceContent) {
- map.setSourceContent(sourceFile, sourceContent);
- });
- return { code: generated.code, map };
- };
- exports.SourceNode = SourceNode;
- }
-});
-
-// .yarn/cache/source-map-npm-0.6.1-1a3621db16-ab55398007.zip/node_modules/source-map/source-map.js
-var require_source_map = __commonJS({
- ".yarn/cache/source-map-npm-0.6.1-1a3621db16-ab55398007.zip/node_modules/source-map/source-map.js"(exports) {
- exports.SourceMapGenerator = require_source_map_generator().SourceMapGenerator;
- exports.SourceMapConsumer = require_source_map_consumer().SourceMapConsumer;
- exports.SourceNode = require_source_node().SourceNode;
- }
-});
-
-// .yarn/cache/escodegen-npm-2.1.0-e0bf940745-e1450a1f75.zip/node_modules/escodegen/package.json
-var require_package = __commonJS({
- ".yarn/cache/escodegen-npm-2.1.0-e0bf940745-e1450a1f75.zip/node_modules/escodegen/package.json"(exports, module2) {
- module2.exports = {
- name: "escodegen",
- description: "ECMAScript code generator",
- homepage: "http://github.com/estools/escodegen",
- main: "escodegen.js",
- bin: {
- esgenerate: "./bin/esgenerate.js",
- escodegen: "./bin/escodegen.js"
- },
- files: [
- "LICENSE.BSD",
- "README.md",
- "bin",
- "escodegen.js",
- "package.json"
- ],
- version: "2.1.0",
- engines: {
- node: ">=6.0"
- },
- maintainers: [
- {
- name: "Yusuke Suzuki",
- email: "utatane.tea@gmail.com",
- web: "http://github.com/Constellation"
- }
- ],
- repository: {
- type: "git",
- url: "http://github.com/estools/escodegen.git"
- },
- dependencies: {
- estraverse: "^5.2.0",
- esutils: "^2.0.2",
- esprima: "^4.0.1"
- },
- optionalDependencies: {
- "source-map": "~0.6.1"
- },
- devDependencies: {
- acorn: "^8.0.4",
- bluebird: "^3.4.7",
- "bower-registry-client": "^1.0.0",
- chai: "^4.2.0",
- "chai-exclude": "^2.0.2",
- "commonjs-everywhere": "^0.9.7",
- gulp: "^4.0.2",
- "gulp-eslint": "^6.0.0",
- "gulp-mocha": "^7.0.2",
- minimist: "^1.2.5",
- optionator: "^0.9.1",
- semver: "^7.3.4"
- },
- license: "BSD-2-Clause",
- scripts: {
- test: "gulp travis",
- "unit-test": "gulp test",
- lint: "gulp lint",
- release: "node tools/release.js",
- "build-min": "./node_modules/.bin/cjsify -ma path: tools/entry-point.js > escodegen.browser.min.js",
- build: "./node_modules/.bin/cjsify -a path: tools/entry-point.js > escodegen.browser.js"
}
};
+ Pack.Sync = PackSync;
+ module2.exports = Pack;
}
});
-// .yarn/cache/escodegen-npm-2.1.0-e0bf940745-e1450a1f75.zip/node_modules/escodegen/escodegen.js
-var require_escodegen = __commonJS({
- ".yarn/cache/escodegen-npm-2.1.0-e0bf940745-e1450a1f75.zip/node_modules/escodegen/escodegen.js"(exports) {
- (function() {
- "use strict";
- var Syntax, Precedence, BinaryPrecedence, SourceNode, estraverse, esutils, base, indent, json, renumber, hexadecimal, quotes, escapeless, newline, space, parentheses, semicolons, safeConcatenation, directive, extra, parse, sourceMap, sourceCode, preserveBlankLines, FORMAT_MINIFY, FORMAT_DEFAULTS;
- estraverse = require_estraverse();
- esutils = require_utils2();
- Syntax = estraverse.Syntax;
- function isExpression(node) {
- return CodeGenerator.Expression.hasOwnProperty(node.type);
- }
- function isStatement(node) {
- return CodeGenerator.Statement.hasOwnProperty(node.type);
- }
- Precedence = {
- Sequence: 0,
- Yield: 1,
- Assignment: 1,
- Conditional: 2,
- ArrowFunction: 2,
- Coalesce: 3,
- LogicalOR: 4,
- LogicalAND: 5,
- BitwiseOR: 6,
- BitwiseXOR: 7,
- BitwiseAND: 8,
- Equality: 9,
- Relational: 10,
- BitwiseSHIFT: 11,
- Additive: 12,
- Multiplicative: 13,
- Exponentiation: 14,
- Await: 15,
- Unary: 15,
- Postfix: 16,
- OptionalChaining: 17,
- Call: 18,
- New: 19,
- TaggedTemplate: 20,
- Member: 21,
- Primary: 22
- };
- BinaryPrecedence = {
- "??": Precedence.Coalesce,
- "||": Precedence.LogicalOR,
- "&&": Precedence.LogicalAND,
- "|": Precedence.BitwiseOR,
- "^": Precedence.BitwiseXOR,
- "&": Precedence.BitwiseAND,
- "==": Precedence.Equality,
- "!=": Precedence.Equality,
- "===": Precedence.Equality,
- "!==": Precedence.Equality,
- "is": Precedence.Equality,
- "isnt": Precedence.Equality,
- "<": Precedence.Relational,
- ">": Precedence.Relational,
- "<=": Precedence.Relational,
- ">=": Precedence.Relational,
- "in": Precedence.Relational,
- "instanceof": Precedence.Relational,
- "<<": Precedence.BitwiseSHIFT,
- ">>": Precedence.BitwiseSHIFT,
- ">>>": Precedence.BitwiseSHIFT,
- "+": Precedence.Additive,
- "-": Precedence.Additive,
- "*": Precedence.Multiplicative,
- "%": Precedence.Multiplicative,
- "/": Precedence.Multiplicative,
- "**": Precedence.Exponentiation
+// .yarn/cache/fs-minipass-npm-2.1.0-501ef87306-703d16522b.zip/node_modules/fs-minipass/index.js
+var require_fs_minipass = __commonJS({
+ ".yarn/cache/fs-minipass-npm-2.1.0-501ef87306-703d16522b.zip/node_modules/fs-minipass/index.js"(exports) {
+ "use strict";
+ var MiniPass = require_minipass2();
+ var EE = require("events").EventEmitter;
+ var fs9 = require("fs");
+ var writev = fs9.writev;
+ if (!writev) {
+ const binding = process.binding("fs");
+ const FSReqWrap = binding.FSReqWrap || binding.FSReqCallback;
+ writev = (fd, iovec, pos, cb) => {
+ const done = (er, bw) => cb(er, bw, iovec);
+ const req = new FSReqWrap();
+ req.oncomplete = done;
+ binding.writeBuffers(fd, iovec, pos, req);
};
- var F_ALLOW_IN = 1, F_ALLOW_CALL = 1 << 1, F_ALLOW_UNPARATH_NEW = 1 << 2, F_FUNC_BODY = 1 << 3, F_DIRECTIVE_CTX = 1 << 4, F_SEMICOLON_OPT = 1 << 5, F_FOUND_COALESCE = 1 << 6;
- var E_FTT = F_ALLOW_CALL | F_ALLOW_UNPARATH_NEW, E_TTF = F_ALLOW_IN | F_ALLOW_CALL, E_TTT = F_ALLOW_IN | F_ALLOW_CALL | F_ALLOW_UNPARATH_NEW, E_TFF = F_ALLOW_IN, E_FFT = F_ALLOW_UNPARATH_NEW, E_TFT = F_ALLOW_IN | F_ALLOW_UNPARATH_NEW;
- var S_TFFF = F_ALLOW_IN, S_TFFT = F_ALLOW_IN | F_SEMICOLON_OPT, S_FFFF = 0, S_TFTF = F_ALLOW_IN | F_DIRECTIVE_CTX, S_TTFF = F_ALLOW_IN | F_FUNC_BODY;
- function getDefaultOptions() {
- return {
- indent: null,
- base: null,
- parse: null,
- comment: false,
- format: {
- indent: {
- style: " ",
- base: 0,
- adjustMultilineComment: false
- },
- newline: "\n",
- space: " ",
- json: false,
- renumber: false,
- hexadecimal: false,
- quotes: "single",
- escapeless: false,
- compact: false,
- parentheses: true,
- semicolons: true,
- safeConcatenation: false,
- preserveBlankLines: false
- },
- moz: {
- comprehensionExpressionStartsWithAssignment: false,
- starlessGenerator: false
- },
- sourceMap: null,
- sourceMapRoot: null,
- sourceMapWithCode: false,
- directive: false,
- raw: true,
- verbatim: null,
- sourceCode: null
- };
+ }
+ var _autoClose = Symbol("_autoClose");
+ var _close = Symbol("_close");
+ var _ended = Symbol("_ended");
+ var _fd = Symbol("_fd");
+ var _finished = Symbol("_finished");
+ var _flags = Symbol("_flags");
+ var _flush = Symbol("_flush");
+ var _handleChunk = Symbol("_handleChunk");
+ var _makeBuf = Symbol("_makeBuf");
+ var _mode = Symbol("_mode");
+ var _needDrain = Symbol("_needDrain");
+ var _onerror = Symbol("_onerror");
+ var _onopen = Symbol("_onopen");
+ var _onread = Symbol("_onread");
+ var _onwrite = Symbol("_onwrite");
+ var _open = Symbol("_open");
+ var _path = Symbol("_path");
+ var _pos = Symbol("_pos");
+ var _queue = Symbol("_queue");
+ var _read = Symbol("_read");
+ var _readSize = Symbol("_readSize");
+ var _reading = Symbol("_reading");
+ var _remain = Symbol("_remain");
+ var _size = Symbol("_size");
+ var _write = Symbol("_write");
+ var _writing = Symbol("_writing");
+ var _defaultFlag = Symbol("_defaultFlag");
+ var _errored = Symbol("_errored");
+ var ReadStream = class extends MiniPass {
+ constructor(path10, opt) {
+ opt = opt || {};
+ super(opt);
+ this.readable = true;
+ this.writable = false;
+ if (typeof path10 !== "string")
+ throw new TypeError("path must be a string");
+ this[_errored] = false;
+ this[_fd] = typeof opt.fd === "number" ? opt.fd : null;
+ this[_path] = path10;
+ 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]();
}
- function stringRepeat(str, num) {
- var result = "";
- for (num |= 0; num > 0; num >>>= 1, str += str) {
- if (num & 1) {
- result += str;
- }
- }
- return result;
+ get fd() {
+ return this[_fd];
}
- function hasLineTerminator(str) {
- return /[\r\n]/g.test(str);
+ get path() {
+ return this[_path];
}
- function endsWithLineTerminator(str) {
- var len = str.length;
- return len && esutils.code.isLineTerminator(str.charCodeAt(len - 1));
+ write() {
+ throw new TypeError("this is a readable stream");
}
- function merge(target, override) {
- var key;
- for (key in override) {
- if (override.hasOwnProperty(key)) {
- target[key] = override[key];
- }
- }
- return target;
+ end() {
+ throw new TypeError("this is a readable stream");
}
- function updateDeeply(target, override) {
- var key, val;
- function isHashObject(target2) {
- return typeof target2 === "object" && target2 instanceof Object && !(target2 instanceof RegExp);
- }
- for (key in override) {
- if (override.hasOwnProperty(key)) {
- val = override[key];
- if (isHashObject(val)) {
- if (isHashObject(target[key])) {
- updateDeeply(target[key], val);
- } else {
- target[key] = updateDeeply({}, val);
- }
- } else {
- target[key] = val;
- }
- }
- }
- return target;
+ [_open]() {
+ fs9.open(this[_path], "r", (er, fd) => this[_onopen](er, fd));
}
- function generateNumber(value) {
- var result, point, temp, exponent, pos;
- if (value !== value) {
- throw new Error("Numeric literal whose value is NaN");
- }
- if (value < 0 || value === 0 && 1 / value < 0) {
- throw new Error("Numeric literal whose value is negative");
- }
- if (value === 1 / 0) {
- return json ? "null" : renumber ? "1e400" : "1e+400";
- }
- result = "" + value;
- if (!renumber || result.length < 3) {
- return result;
- }
- point = result.indexOf(".");
- if (!json && result.charCodeAt(0) === 48 && point === 1) {
- point = 0;
- result = result.slice(1);
- }
- temp = result;
- result = result.replace("e+", "e");
- exponent = 0;
- if ((pos = temp.indexOf("e")) > 0) {
- exponent = +temp.slice(pos + 1);
- temp = temp.slice(0, pos);
- }
- if (point >= 0) {
- exponent -= temp.length - point - 1;
- temp = +(temp.slice(0, point) + temp.slice(point + 1)) + "";
- }
- pos = 0;
- while (temp.charCodeAt(temp.length + pos - 1) === 48) {
- --pos;
- }
- if (pos !== 0) {
- exponent -= pos;
- temp = temp.slice(0, pos);
- }
- if (exponent !== 0) {
- temp += "e" + exponent;
- }
- if ((temp.length < result.length || hexadecimal && value > 1e12 && Math.floor(value) === value && (temp = "0x" + value.toString(16)).length < result.length) && +temp === value) {
- result = temp;
+ [_onopen](er, fd) {
+ if (er)
+ this[_onerror](er);
+ else {
+ this[_fd] = fd;
+ this.emit("open", fd);
+ this[_read]();
}
- return result;
}
- function escapeRegExpCharacter(ch, previousIsBackslash) {
- if ((ch & ~1) === 8232) {
- return (previousIsBackslash ? "u" : "\\u") + (ch === 8232 ? "2028" : "2029");
- } else if (ch === 10 || ch === 13) {
- return (previousIsBackslash ? "" : "\\") + (ch === 10 ? "n" : "r");
- }
- return String.fromCharCode(ch);
- }
- function generateRegExp(reg) {
- var match, result, flags, i, iz, ch, characterInBrack, previousIsBackslash;
- result = reg.toString();
- if (reg.source) {
- match = result.match(/\/([^/]*)$/);
- if (!match) {
- return result;
- }
- flags = match[1];
- result = "";
- characterInBrack = false;
- previousIsBackslash = false;
- for (i = 0, iz = reg.source.length; i < iz; ++i) {
- ch = reg.source.charCodeAt(i);
- if (!previousIsBackslash) {
- if (characterInBrack) {
- if (ch === 93) {
- characterInBrack = false;
- }
- } else {
- if (ch === 47) {
- result += "\\";
- } else if (ch === 91) {
- characterInBrack = true;
- }
- }
- result += escapeRegExpCharacter(ch, previousIsBackslash);
- previousIsBackslash = ch === 92;
- } else {
- result += escapeRegExpCharacter(ch, previousIsBackslash);
- previousIsBackslash = false;
- }
- }
- return "/" + result + "/" + flags;
- }
- return result;
+ [_makeBuf]() {
+ return Buffer.allocUnsafe(Math.min(this[_readSize], this[_remain]));
}
- function escapeAllowedCharacter(code, next) {
- var hex;
- if (code === 8) {
- return "\\b";
- }
- if (code === 12) {
- return "\\f";
- }
- if (code === 9) {
- return "\\t";
- }
- hex = code.toString(16).toUpperCase();
- if (json || code > 255) {
- return "\\u" + "0000".slice(hex.length) + hex;
- } else if (code === 0 && !esutils.code.isDecimalDigit(next)) {
- return "\\0";
- } else if (code === 11) {
- return "\\x0B";
- } else {
- return "\\x" + "00".slice(hex.length) + hex;
+ [_read]() {
+ if (!this[_reading]) {
+ this[_reading] = true;
+ const buf = this[_makeBuf]();
+ if (buf.length === 0)
+ return process.nextTick(() => this[_onread](null, 0, buf));
+ fs9.read(this[_fd], buf, 0, buf.length, null, (er, br, buf2) => this[_onread](er, br, buf2));
}
}
- function escapeDisallowedCharacter(code) {
- if (code === 92) {
- return "\\\\";
- }
- if (code === 10) {
- return "\\n";
- }
- if (code === 13) {
- return "\\r";
- }
- if (code === 8232) {
- return "\\u2028";
- }
- if (code === 8233) {
- return "\\u2029";
- }
- throw new Error("Incorrectly classified character");
+ [_onread](er, br, buf) {
+ this[_reading] = false;
+ if (er)
+ this[_onerror](er);
+ else if (this[_handleChunk](br, buf))
+ this[_read]();
}
- function escapeDirective(str) {
- var i, iz, code, quote;
- quote = quotes === "double" ? '"' : "'";
- for (i = 0, iz = str.length; i < iz; ++i) {
- code = str.charCodeAt(i);
- if (code === 39) {
- quote = '"';
- break;
- } else if (code === 34) {
- quote = "'";
- break;
- } else if (code === 92) {
- ++i;
- }
- }
- return quote + str + quote;
- }
- function escapeString(str) {
- var result = "", i, len, code, singleQuotes = 0, doubleQuotes = 0, single, quote;
- for (i = 0, len = str.length; i < len; ++i) {
- code = str.charCodeAt(i);
- if (code === 39) {
- ++singleQuotes;
- } else if (code === 34) {
- ++doubleQuotes;
- } else if (code === 47 && json) {
- result += "\\";
- } else if (esutils.code.isLineTerminator(code) || code === 92) {
- result += escapeDisallowedCharacter(code);
- continue;
- } else if (!esutils.code.isIdentifierPartES5(code) && (json && code < 32 || !json && !escapeless && (code < 32 || code > 126))) {
- result += escapeAllowedCharacter(code, str.charCodeAt(i + 1));
- continue;
- }
- result += String.fromCharCode(code);
- }
- single = !(quotes === "double" || quotes === "auto" && doubleQuotes < singleQuotes);
- quote = single ? "'" : '"';
- if (!(single ? singleQuotes : doubleQuotes)) {
- return quote + result + quote;
- }
- str = result;
- result = quote;
- for (i = 0, len = str.length; i < len; ++i) {
- code = str.charCodeAt(i);
- if (code === 39 && single || code === 34 && !single) {
- result += "\\";
- }
- result += String.fromCharCode(code);
+ [_close]() {
+ if (this[_autoClose] && typeof this[_fd] === "number") {
+ const fd = this[_fd];
+ this[_fd] = null;
+ fs9.close(fd, (er) => er ? this.emit("error", er) : this.emit("close"));
}
- return result + quote;
}
- function flattenToString(arr) {
- var i, iz, elem, result = "";
- for (i = 0, iz = arr.length; i < iz; ++i) {
- elem = arr[i];
- result += Array.isArray(elem) ? flattenToString(elem) : elem;
- }
- return result;
+ [_onerror](er) {
+ this[_reading] = true;
+ this[_close]();
+ this.emit("error", er);
}
- function toSourceNodeWhenNeeded(generated, node) {
- if (!sourceMap) {
- if (Array.isArray(generated)) {
- return flattenToString(generated);
- } else {
- return generated;
- }
- }
- if (node == null) {
- if (generated instanceof SourceNode) {
- return generated;
- } else {
- node = {};
- }
- }
- if (node.loc == null) {
- return new SourceNode(null, null, sourceMap, generated, node.name || null);
+ [_handleChunk](br, buf) {
+ let ret = false;
+ this[_remain] -= br;
+ if (br > 0)
+ ret = super.write(br < buf.length ? buf.slice(0, br) : buf);
+ if (br === 0 || this[_remain] <= 0) {
+ ret = false;
+ this[_close]();
+ super.end();
}
- return new SourceNode(node.loc.start.line, node.loc.start.column, sourceMap === true ? node.loc.source || null : sourceMap, generated, node.name || null);
- }
- function noEmptySpace() {
- return space ? space : " ";
+ return ret;
}
- function join2(left, right) {
- var leftSource, rightSource, leftCharCode, rightCharCode;
- leftSource = toSourceNodeWhenNeeded(left).toString();
- if (leftSource.length === 0) {
- return [right];
- }
- rightSource = toSourceNodeWhenNeeded(right).toString();
- if (rightSource.length === 0) {
- return [left];
- }
- leftCharCode = leftSource.charCodeAt(leftSource.length - 1);
- rightCharCode = rightSource.charCodeAt(0);
- if ((leftCharCode === 43 || leftCharCode === 45) && leftCharCode === rightCharCode || esutils.code.isIdentifierPartES5(leftCharCode) && esutils.code.isIdentifierPartES5(rightCharCode) || leftCharCode === 47 && rightCharCode === 105) {
- return [left, noEmptySpace(), right];
- } else if (esutils.code.isWhiteSpace(leftCharCode) || esutils.code.isLineTerminator(leftCharCode) || esutils.code.isWhiteSpace(rightCharCode) || esutils.code.isLineTerminator(rightCharCode)) {
- return [left, right];
- }
- return [left, space, right];
- }
- function addIndent(stmt) {
- return [base, stmt];
- }
- function withIndent(fn2) {
- var previousBase;
- previousBase = base;
- base += indent;
- fn2(base);
- base = previousBase;
- }
- function calculateSpaces(str) {
- var i;
- for (i = str.length - 1; i >= 0; --i) {
- if (esutils.code.isLineTerminator(str.charCodeAt(i))) {
+ emit(ev, data) {
+ switch (ev) {
+ case "prefinish":
+ case "finish":
break;
- }
+ case "drain":
+ if (typeof this[_fd] === "number")
+ this[_read]();
+ break;
+ case "error":
+ if (this[_errored])
+ return;
+ this[_errored] = true;
+ return super.emit(ev, data);
+ default:
+ return super.emit(ev, data);
}
- return str.length - 1 - i;
}
- function adjustMultilineComment(value, specialBase) {
- var array, i, len, line, j, spaces, previousBase, sn;
- array = value.split(/\r\n|[\r\n]/);
- spaces = Number.MAX_VALUE;
- for (i = 1, len = array.length; i < len; ++i) {
- line = array[i];
- j = 0;
- while (j < line.length && esutils.code.isWhiteSpace(line.charCodeAt(j))) {
- ++j;
- }
- if (spaces > j) {
- spaces = j;
- }
- }
- if (typeof specialBase !== "undefined") {
- previousBase = base;
- if (array[1][spaces] === "*") {
- specialBase += " ";
- }
- base = specialBase;
- } else {
- if (spaces & 1) {
- --spaces;
- }
- previousBase = base;
- }
- for (i = 1, len = array.length; i < len; ++i) {
- sn = toSourceNodeWhenNeeded(addIndent(array[i].slice(spaces)));
- array[i] = sourceMap ? sn.join("") : sn;
+ };
+ var ReadStreamSync = class extends ReadStream {
+ [_open]() {
+ let threw = true;
+ try {
+ this[_onopen](null, fs9.openSync(this[_path], "r"));
+ threw = false;
+ } finally {
+ if (threw)
+ this[_close]();
}
- base = previousBase;
- return array.join("\n");
}
- function generateComment(comment, specialBase) {
- if (comment.type === "Line") {
- if (endsWithLineTerminator(comment.value)) {
- return "//" + comment.value;
- } else {
- var result = "//" + comment.value;
- if (!preserveBlankLines) {
- result += "\n";
- }
- return result;
- }
- }
- if (extra.format.indent.adjustMultilineComment && /[\n\r]/.test(comment.value)) {
- return adjustMultilineComment("/*" + comment.value + "*/", specialBase);
- }
- return "/*" + comment.value + "*/";
- }
- function addComments(stmt, result) {
- var i, len, comment, save, tailingToStatement, specialBase, fragment, extRange, range, prevRange, prefix, infix, suffix, count;
- if (stmt.leadingComments && stmt.leadingComments.length > 0) {
- save = result;
- if (preserveBlankLines) {
- comment = stmt.leadingComments[0];
- result = [];
- extRange = comment.extendedRange;
- range = comment.range;
- prefix = sourceCode.substring(extRange[0], range[0]);
- count = (prefix.match(/\n/g) || []).length;
- if (count > 0) {
- result.push(stringRepeat("\n", count));
- result.push(addIndent(generateComment(comment)));
- } else {
- result.push(prefix);
- result.push(generateComment(comment));
- }
- prevRange = range;
- for (i = 1, len = stmt.leadingComments.length; i < len; i++) {
- comment = stmt.leadingComments[i];
- range = comment.range;
- infix = sourceCode.substring(prevRange[1], range[0]);
- count = (infix.match(/\n/g) || []).length;
- result.push(stringRepeat("\n", count));
- result.push(addIndent(generateComment(comment)));
- prevRange = range;
- }
- suffix = sourceCode.substring(range[1], extRange[1]);
- count = (suffix.match(/\n/g) || []).length;
- result.push(stringRepeat("\n", count));
- } else {
- comment = stmt.leadingComments[0];
- result = [];
- if (safeConcatenation && stmt.type === Syntax.Program && stmt.body.length === 0) {
- result.push("\n");
- }
- result.push(generateComment(comment));
- if (!endsWithLineTerminator(toSourceNodeWhenNeeded(result).toString())) {
- result.push("\n");
- }
- for (i = 1, len = stmt.leadingComments.length; i < len; ++i) {
- comment = stmt.leadingComments[i];
- fragment = [generateComment(comment)];
- if (!endsWithLineTerminator(toSourceNodeWhenNeeded(fragment).toString())) {
- fragment.push("\n");
- }
- result.push(addIndent(fragment));
- }
- }
- result.push(addIndent(save));
- }
- if (stmt.trailingComments) {
- if (preserveBlankLines) {
- comment = stmt.trailingComments[0];
- extRange = comment.extendedRange;
- range = comment.range;
- prefix = sourceCode.substring(extRange[0], range[0]);
- count = (prefix.match(/\n/g) || []).length;
- if (count > 0) {
- result.push(stringRepeat("\n", count));
- result.push(addIndent(generateComment(comment)));
- } else {
- result.push(prefix);
- result.push(generateComment(comment));
- }
- } else {
- tailingToStatement = !endsWithLineTerminator(toSourceNodeWhenNeeded(result).toString());
- specialBase = stringRepeat(" ", calculateSpaces(toSourceNodeWhenNeeded([base, result, indent]).toString()));
- for (i = 0, len = stmt.trailingComments.length; i < len; ++i) {
- comment = stmt.trailingComments[i];
- if (tailingToStatement) {
- if (i === 0) {
- result = [result, indent];
- } else {
- result = [result, specialBase];
- }
- result.push(generateComment(comment, specialBase));
- } else {
- result = [result, addIndent(generateComment(comment))];
- }
- if (i !== len - 1 && !endsWithLineTerminator(toSourceNodeWhenNeeded(result).toString())) {
- result = [result, "\n"];
- }
- }
+ [_read]() {
+ let threw = true;
+ try {
+ if (!this[_reading]) {
+ this[_reading] = true;
+ do {
+ const buf = this[_makeBuf]();
+ const br = buf.length === 0 ? 0 : fs9.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]();
}
- return result;
}
- function generateBlankLines(start, end, result) {
- var j, newlineCount = 0;
- for (j = start; j < end; j++) {
- if (sourceCode[j] === "\n") {
- newlineCount++;
- }
- }
- for (j = 1; j < newlineCount; j++) {
- result.push(newline);
+ [_close]() {
+ if (this[_autoClose] && typeof this[_fd] === "number") {
+ const fd = this[_fd];
+ this[_fd] = null;
+ fs9.closeSync(fd);
+ this.emit("close");
}
}
- function parenthesize(text, current, should) {
- if (current < should) {
- return ["(", text, ")"];
- }
- return text;
+ };
+ var WriteStream = class extends EE {
+ constructor(path10, opt) {
+ opt = opt || {};
+ super(opt);
+ this.readable = false;
+ this.writable = true;
+ this[_errored] = false;
+ this[_writing] = false;
+ this[_ended] = false;
+ this[_needDrain] = false;
+ this[_queue] = [];
+ this[_path] = path10;
+ this[_fd] = typeof opt.fd === "number" ? opt.fd : null;
+ this[_mode] = opt.mode === void 0 ? 438 : opt.mode;
+ this[_pos] = typeof opt.start === "number" ? opt.start : null;
+ this[_autoClose] = typeof opt.autoClose === "boolean" ? opt.autoClose : true;
+ const defaultFlag = this[_pos] !== null ? "r+" : "w";
+ this[_defaultFlag] = opt.flags === void 0;
+ this[_flags] = this[_defaultFlag] ? defaultFlag : opt.flags;
+ if (this[_fd] === null)
+ this[_open]();
}
- function generateVerbatimString(string) {
- var i, iz, result;
- result = string.split(/\r\n|\n/);
- for (i = 1, iz = result.length; i < iz; i++) {
- result[i] = newline + base + result[i];
+ emit(ev, data) {
+ if (ev === "error") {
+ if (this[_errored])
+ return;
+ this[_errored] = true;
}
- return result;
+ return super.emit(ev, data);
}
- function generateVerbatim(expr, precedence) {
- var verbatim, result, prec;
- verbatim = expr[extra.verbatim];
- if (typeof verbatim === "string") {
- result = parenthesize(generateVerbatimString(verbatim), Precedence.Sequence, precedence);
- } else {
- result = generateVerbatimString(verbatim.content);
- prec = verbatim.precedence != null ? verbatim.precedence : Precedence.Sequence;
- result = parenthesize(result, prec, precedence);
- }
- return toSourceNodeWhenNeeded(result, expr);
+ get fd() {
+ return this[_fd];
}
- function CodeGenerator() {
+ get path() {
+ return this[_path];
}
- CodeGenerator.prototype.maybeBlock = function(stmt, flags) {
- var result, noLeadingComment, that = this;
- noLeadingComment = !extra.comment || !stmt.leadingComments;
- if (stmt.type === Syntax.BlockStatement && noLeadingComment) {
- return [space, this.generateStatement(stmt, flags)];
- }
- if (stmt.type === Syntax.EmptyStatement && noLeadingComment) {
- return ";";
- }
- withIndent(function() {
- result = [
- newline,
- addIndent(that.generateStatement(stmt, flags))
- ];
- });
- return result;
- };
- CodeGenerator.prototype.maybeBlockSuffix = function(stmt, result) {
- var ends = endsWithLineTerminator(toSourceNodeWhenNeeded(result).toString());
- if (stmt.type === Syntax.BlockStatement && (!extra.comment || !stmt.leadingComments) && !ends) {
- return [result, space];
- }
- if (ends) {
- return [result, base];
- }
- return [result, newline, base];
- };
- function generateIdentifier(node) {
- return toSourceNodeWhenNeeded(node.name, node);
+ [_onerror](er) {
+ this[_close]();
+ this[_writing] = true;
+ this.emit("error", er);
+ }
+ [_open]() {
+ fs9.open(
+ this[_path],
+ this[_flags],
+ this[_mode],
+ (er, fd) => this[_onopen](er, fd)
+ );
}
- function generateAsyncPrefix(node, spaceRequired) {
- return node.async ? "async" + (spaceRequired ? noEmptySpace() : space) : "";
+ [_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);
+ this[_flush]();
+ }
}
- function generateStarSuffix(node) {
- var isGenerator = node.generator && !extra.moz.starlessGenerator;
- return isGenerator ? "*" + space : "";
+ 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;
}
- function generateMethodPrefix(prop) {
- var func = prop.value, prefix = "";
- if (func.async) {
- prefix += generateAsyncPrefix(func, !prop.computed);
+ 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 (func.generator) {
- prefix += generateStarSuffix(func) ? "*" : "";
+ if (this[_fd] === null || this[_writing] || this[_queue].length) {
+ this[_queue].push(buf);
+ this[_needDrain] = true;
+ return false;
}
- return prefix;
+ this[_writing] = true;
+ this[_write](buf);
+ return true;
}
- CodeGenerator.prototype.generatePattern = function(node, precedence, flags) {
- if (node.type === Syntax.Identifier) {
- return generateIdentifier(node);
- }
- return this.generateExpression(node, precedence, flags);
- };
- CodeGenerator.prototype.generateFunctionParams = function(node) {
- var i, iz, result, hasDefault;
- hasDefault = false;
- if (node.type === Syntax.ArrowFunctionExpression && !node.rest && (!node.defaults || node.defaults.length === 0) && node.params.length === 1 && node.params[0].type === Syntax.Identifier) {
- result = [generateAsyncPrefix(node, true), generateIdentifier(node.params[0])];
- } else {
- result = node.type === Syntax.ArrowFunctionExpression ? [generateAsyncPrefix(node, false)] : [];
- result.push("(");
- if (node.defaults) {
- hasDefault = true;
- }
- for (i = 0, iz = node.params.length; i < iz; ++i) {
- if (hasDefault && node.defaults[i]) {
- result.push(this.generateAssignment(node.params[i], node.defaults[i], "=", Precedence.Assignment, E_TTT));
- } else {
- result.push(this.generatePattern(node.params[i], Precedence.Assignment, E_TTT));
- }
- if (i + 1 < iz) {
- result.push("," + space);
- }
- }
- if (node.rest) {
- if (node.params.length) {
- result.push("," + space);
+ [_write](buf) {
+ fs9.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] !== null)
+ 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");
}
- result.push("...");
- result.push(generateIdentifier(node.rest));
- }
- result.push(")");
- }
- return result;
- };
- CodeGenerator.prototype.generateFunctionBody = function(node) {
- var result, expr;
- result = this.generateFunctionParams(node);
- if (node.type === Syntax.ArrowFunctionExpression) {
- result.push(space);
- result.push("=>");
- }
- if (node.expression) {
- result.push(space);
- expr = this.generateExpression(node.body, Precedence.Assignment, E_TTT);
- if (expr.toString().charAt(0) === "{") {
- expr = ["(", expr, ")"];
- }
- result.push(expr);
- } else {
- result.push(this.maybeBlock(node.body, S_TTFF));
- }
- return result;
- };
- CodeGenerator.prototype.generateIterationForStatement = function(operator, stmt, flags) {
- var result = ["for" + (stmt.await ? noEmptySpace() + "await" : "") + space + "("], that = this;
- withIndent(function() {
- if (stmt.left.type === Syntax.VariableDeclaration) {
- withIndent(function() {
- result.push(stmt.left.kind + noEmptySpace());
- result.push(that.generateStatement(stmt.left.declarations[0], S_FFFF));
- });
- } else {
- result.push(that.generateExpression(stmt.left, Precedence.Call, E_TTT));
}
- result = join2(result, operator);
- result = [join2(
- result,
- that.generateExpression(stmt.right, Precedence.Assignment, E_TTT)
- ), ")"];
- });
- result.push(this.maybeBlock(stmt.body, flags));
- return result;
- };
- CodeGenerator.prototype.generatePropertyKey = function(expr, computed) {
- var result = [];
- if (computed) {
- result.push("[");
}
- result.push(this.generateExpression(expr, Precedence.Assignment, E_TTT));
- if (computed) {
- result.push("]");
+ }
+ [_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)
+ );
}
- return result;
- };
- CodeGenerator.prototype.generateAssignment = function(left, right, operator, precedence, flags) {
- if (Precedence.Assignment < precedence) {
- flags |= F_ALLOW_IN;
+ }
+ [_close]() {
+ if (this[_autoClose] && typeof this[_fd] === "number") {
+ const fd = this[_fd];
+ this[_fd] = null;
+ fs9.close(fd, (er) => er ? this.emit("error", er) : this.emit("close"));
}
- return parenthesize(
- [
- this.generateExpression(left, Precedence.Call, flags),
- space + operator + space,
- this.generateExpression(right, Precedence.Assignment, flags)
- ],
- Precedence.Assignment,
- precedence
- );
- };
- CodeGenerator.prototype.semicolon = function(flags) {
- if (!semicolons && flags & F_SEMICOLON_OPT) {
- return "";
+ }
+ };
+ var WriteStreamSync = class extends WriteStream {
+ [_open]() {
+ let fd;
+ if (this[_defaultFlag] && this[_flags] === "r+") {
+ try {
+ fd = fs9.openSync(this[_path], this[_flags], this[_mode]);
+ } catch (er) {
+ if (er.code === "ENOENT") {
+ this[_flags] = "w";
+ return this[_open]();
+ } else
+ throw er;
+ }
+ } else
+ fd = fs9.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] = null;
+ fs9.closeSync(fd);
+ this.emit("close");
}
- return ";";
- };
- CodeGenerator.Statement = {
- BlockStatement: function(stmt, flags) {
- var range, content, result = ["{", newline], that = this;
- withIndent(function() {
- if (stmt.body.length === 0 && preserveBlankLines) {
- range = stmt.range;
- if (range[1] - range[0] > 2) {
- content = sourceCode.substring(range[0] + 1, range[1] - 1);
- if (content[0] === "\n") {
- result = ["{"];
- }
- result.push(content);
- }
+ }
+ [_write](buf) {
+ let threw = true;
+ try {
+ this[_onwrite](
+ null,
+ fs9.writeSync(this[_fd], buf, 0, buf.length, this[_pos])
+ );
+ threw = false;
+ } finally {
+ if (threw)
+ try {
+ this[_close]();
+ } catch (_) {
}
- var i, iz, fragment, bodyFlags;
- bodyFlags = S_TFFF;
- if (flags & F_FUNC_BODY) {
- bodyFlags |= F_DIRECTIVE_CTX;
+ }
+ }
+ };
+ exports.ReadStream = ReadStream;
+ exports.ReadStreamSync = ReadStreamSync;
+ exports.WriteStream = WriteStream;
+ exports.WriteStreamSync = WriteStreamSync;
+ }
+});
+
+// .yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/parse.js
+var require_parse2 = __commonJS({
+ ".yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/parse.js"(exports, module2) {
+ "use strict";
+ var warner = require_warn_mixin();
+ var Header = require_header();
+ var EE = require("events");
+ var Yallist = require_yallist();
+ var maxMetaEntrySize = 1024 * 1024;
+ var Entry = require_read_entry();
+ var Pax = require_pax();
+ var zlib = require_minizlib();
+ var { nextTick } = require("process");
+ var gzipHeader = Buffer.from([31, 139]);
+ var STATE = Symbol("state");
+ var WRITEENTRY = Symbol("writeEntry");
+ var READENTRY = Symbol("readEntry");
+ var NEXTENTRY = Symbol("nextEntry");
+ var PROCESSENTRY = Symbol("processEntry");
+ var EX = Symbol("extendedHeader");
+ var GEX = Symbol("globalExtendedHeader");
+ var META = Symbol("meta");
+ var EMITMETA = Symbol("emitMeta");
+ var BUFFER = Symbol("buffer");
+ var QUEUE = Symbol("queue");
+ var ENDED = Symbol("ended");
+ var EMITTEDEND = Symbol("emittedEnd");
+ var EMIT = Symbol("emit");
+ var UNZIP = Symbol("unzip");
+ var CONSUMECHUNK = Symbol("consumeChunk");
+ var CONSUMECHUNKSUB = Symbol("consumeChunkSub");
+ var CONSUMEBODY = Symbol("consumeBody");
+ var CONSUMEMETA = Symbol("consumeMeta");
+ var CONSUMEHEADER = Symbol("consumeHeader");
+ var CONSUMING = Symbol("consuming");
+ var BUFFERCONCAT = Symbol("bufferConcat");
+ var MAYBEEND = Symbol("maybeEnd");
+ var WRITING = Symbol("writing");
+ var ABORTED = Symbol("aborted");
+ var DONE = Symbol("onDone");
+ var SAW_VALID_ENTRY = Symbol("sawValidEntry");
+ var SAW_NULL_BLOCK = Symbol("sawNullBlock");
+ var SAW_EOF = Symbol("sawEOF");
+ var CLOSESTREAM = Symbol("closeStream");
+ var noop = (_) => true;
+ module2.exports = warner(class Parser extends EE {
+ constructor(opt) {
+ opt = opt || {};
+ super(opt);
+ this.file = opt.file || "";
+ this[SAW_VALID_ENTRY] = null;
+ 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 : noop;
+ const isTBR = opt.file && (opt.file.endsWith(".tar.br") || opt.file.endsWith(".tbr"));
+ this.brotli = !opt.gzip && opt.brotli !== void 0 ? opt.brotli : isTBR ? void 0 : false;
+ this.writable = true;
+ this.readable = false;
+ this[QUEUE] = new Yallist();
+ this[BUFFER] = null;
+ this[READENTRY] = null;
+ this[WRITEENTRY] = null;
+ this[STATE] = "begin";
+ this[META] = "";
+ this[EX] = null;
+ this[GEX] = null;
+ this[ENDED] = false;
+ this[UNZIP] = null;
+ this[ABORTED] = false;
+ this[SAW_NULL_BLOCK] = false;
+ this[SAW_EOF] = false;
+ this.on("end", () => this[CLOSESTREAM]());
+ if (typeof opt.onwarn === "function") {
+ this.on("warn", opt.onwarn);
+ }
+ if (typeof opt.onentry === "function") {
+ this.on("entry", opt.onentry);
+ }
+ }
+ [CONSUMEHEADER](chunk, position) {
+ if (this[SAW_VALID_ENTRY] === null) {
+ 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";
}
- for (i = 0, iz = stmt.body.length; i < iz; ++i) {
- if (preserveBlankLines) {
- if (i === 0) {
- if (stmt.body[0].leadingComments) {
- range = stmt.body[0].leadingComments[0].extendedRange;
- content = sourceCode.substring(range[0], range[1]);
- if (content[0] === "\n") {
- result = ["{"];
+ 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) && header.linkpath) {
+ this.warn("TAR_ENTRY_INVALID", "linkpath forbidden", { header });
+ } else {
+ const entry = this[WRITEENTRY] = new Entry(header, this[EX], this[GEX]);
+ if (!this[SAW_VALID_ENTRY]) {
+ if (entry.remain) {
+ const onend = () => {
+ if (!entry.invalid) {
+ this[SAW_VALID_ENTRY] = true;
}
- }
- if (!stmt.body[0].leadingComments) {
- generateBlankLines(stmt.range[0], stmt.body[0].range[0], result);
- }
- }
- if (i > 0) {
- if (!stmt.body[i - 1].trailingComments && !stmt.body[i].leadingComments) {
- generateBlankLines(stmt.body[i - 1].range[1], stmt.body[i].range[0], result);
- }
+ };
+ entry.on("end", onend);
+ } else {
+ this[SAW_VALID_ENTRY] = true;
}
}
- if (i === iz - 1) {
- bodyFlags |= F_SEMICOLON_OPT;
- }
- if (stmt.body[i].leadingComments && preserveBlankLines) {
- fragment = that.generateStatement(stmt.body[i], bodyFlags);
+ 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 {
- fragment = addIndent(that.generateStatement(stmt.body[i], bodyFlags));
- }
- result.push(fragment);
- if (!endsWithLineTerminator(toSourceNodeWhenNeeded(fragment).toString())) {
- if (preserveBlankLines && i < iz - 1) {
- if (!stmt.body[i + 1].leadingComments) {
- result.push(newline);
- }
+ this[EX] = null;
+ 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 {
- result.push(newline);
- }
- }
- if (preserveBlankLines) {
- if (i === iz - 1) {
- if (!stmt.body[i].trailingComments) {
- generateBlankLines(stmt.body[i].range[1], stmt.range[1], result);
+ 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);
}
}
}
}
- });
- result.push(addIndent("}"));
- return result;
- },
- BreakStatement: function(stmt, flags) {
- if (stmt.label) {
- return "break " + stmt.label.name + this.semicolon(flags);
- }
- return "break" + this.semicolon(flags);
- },
- ContinueStatement: function(stmt, flags) {
- if (stmt.label) {
- return "continue " + stmt.label.name + this.semicolon(flags);
- }
- return "continue" + this.semicolon(flags);
- },
- ClassBody: function(stmt, flags) {
- var result = ["{", newline], that = this;
- withIndent(function(indent2) {
- var i, iz;
- for (i = 0, iz = stmt.body.length; i < iz; ++i) {
- result.push(indent2);
- result.push(that.generateExpression(stmt.body[i], Precedence.Sequence, E_TTT));
- if (i + 1 < iz) {
- result.push(newline);
- }
- }
- });
- if (!endsWithLineTerminator(toSourceNodeWhenNeeded(result).toString())) {
- result.push(newline);
}
- result.push(base);
- result.push("}");
- return result;
- },
- ClassDeclaration: function(stmt, flags) {
- var result, fragment;
- result = ["class"];
- if (stmt.id) {
- result = join2(result, this.generateExpression(stmt.id, Precedence.Sequence, E_TTT));
- }
- if (stmt.superClass) {
- fragment = join2("extends", this.generateExpression(stmt.superClass, Precedence.Unary, E_TTT));
- result = join2(result, fragment);
- }
- result.push(space);
- result.push(this.generateStatement(stmt.body, S_TFFT));
- return result;
- },
- DirectiveStatement: function(stmt, flags) {
- if (extra.raw && stmt.raw) {
- return stmt.raw + this.semicolon(flags);
+ }
+ }
+ [CLOSESTREAM]() {
+ nextTick(() => this.emit("close"));
+ }
+ [PROCESSENTRY](entry) {
+ let go = true;
+ if (!entry) {
+ this[READENTRY] = null;
+ go = false;
+ } else if (Array.isArray(entry)) {
+ this.emit.apply(this, entry);
+ } else {
+ this[READENTRY] = entry;
+ this.emit("entry", entry);
+ if (!entry.emittedEnd) {
+ entry.on("end", (_) => this[NEXTENTRY]());
+ go = false;
}
- return escapeDirective(stmt.directive) + this.semicolon(flags);
- },
- DoWhileStatement: function(stmt, flags) {
- var result = join2("do", this.maybeBlock(stmt.body, S_TFFF));
- result = this.maybeBlockSuffix(stmt.body, result);
- return join2(result, [
- "while" + space + "(",
- this.generateExpression(stmt.test, Precedence.Sequence, E_TTT),
- ")" + this.semicolon(flags)
- ]);
- },
- CatchClause: function(stmt, flags) {
- var result, that = this;
- withIndent(function() {
- var guard;
- if (stmt.param) {
- result = [
- "catch" + space + "(",
- that.generateExpression(stmt.param, Precedence.Sequence, E_TTT),
- ")"
- ];
- if (stmt.guard) {
- guard = that.generateExpression(stmt.guard, Precedence.Sequence, E_TTT);
- result.splice(2, 0, " if ", guard);
- }
- } else {
- result = ["catch"];
+ }
+ return go;
+ }
+ [NEXTENTRY]() {
+ do {
+ } while (this[PROCESSENTRY](this[QUEUE].shift()));
+ if (!this[QUEUE].length) {
+ const re = this[READENTRY];
+ const drainNow = !re || re.flowing || re.size === re.remain;
+ if (drainNow) {
+ if (!this[WRITING]) {
+ this.emit("drain");
}
- });
- result.push(this.maybeBlock(stmt.body, S_TFFF));
- return result;
- },
- DebuggerStatement: function(stmt, flags) {
- return "debugger" + this.semicolon(flags);
- },
- EmptyStatement: function(stmt, flags) {
- return ";";
- },
- ExportDefaultDeclaration: function(stmt, flags) {
- var result = ["export"], bodyFlags;
- bodyFlags = flags & F_SEMICOLON_OPT ? S_TFFT : S_TFFF;
- result = join2(result, "default");
- if (isStatement(stmt.declaration)) {
- result = join2(result, this.generateStatement(stmt.declaration, bodyFlags));
} else {
- result = join2(result, this.generateExpression(stmt.declaration, Precedence.Assignment, E_TTT) + this.semicolon(flags));
+ re.once("drain", (_) => this.emit("drain"));
}
- return result;
- },
- ExportNamedDeclaration: function(stmt, flags) {
- var result = ["export"], bodyFlags, that = this;
- bodyFlags = flags & F_SEMICOLON_OPT ? S_TFFT : S_TFFF;
- if (stmt.declaration) {
- return join2(result, this.generateStatement(stmt.declaration, bodyFlags));
- }
- if (stmt.specifiers) {
- if (stmt.specifiers.length === 0) {
- result = join2(result, "{" + space + "}");
- } else if (stmt.specifiers[0].type === Syntax.ExportBatchSpecifier) {
- result = join2(result, this.generateExpression(stmt.specifiers[0], Precedence.Sequence, E_TTT));
- } else {
- result = join2(result, "{");
- withIndent(function(indent2) {
- var i, iz;
- result.push(newline);
- for (i = 0, iz = stmt.specifiers.length; i < iz; ++i) {
- result.push(indent2);
- result.push(that.generateExpression(stmt.specifiers[i], Precedence.Sequence, E_TTT));
- if (i + 1 < iz) {
- result.push("," + newline);
- }
- }
- });
- if (!endsWithLineTerminator(toSourceNodeWhenNeeded(result).toString())) {
- result.push(newline);
- }
- result.push(base + "}");
- }
- if (stmt.source) {
- result = join2(result, [
- "from" + space,
- // ModuleSpecifier
- this.generateExpression(stmt.source, Precedence.Sequence, E_TTT),
- this.semicolon(flags)
- ]);
- } else {
- result.push(this.semicolon(flags));
- }
- }
- return result;
- },
- ExportAllDeclaration: function(stmt, flags) {
- return [
- "export" + space,
- "*" + space,
- "from" + space,
- // ModuleSpecifier
- this.generateExpression(stmt.source, Precedence.Sequence, E_TTT),
- this.semicolon(flags)
- ];
- },
- ExpressionStatement: function(stmt, flags) {
- var result, fragment;
- function isClassPrefixed(fragment2) {
- var code;
- if (fragment2.slice(0, 5) !== "class") {
- return false;
- }
- code = fragment2.charCodeAt(5);
- return code === 123 || esutils.code.isWhiteSpace(code) || esutils.code.isLineTerminator(code);
+ }
+ }
+ [CONSUMEBODY](chunk, position) {
+ const entry = this[WRITEENTRY];
+ const br = entry.blockRemain;
+ const c = br >= chunk.length && position === 0 ? chunk : chunk.slice(position, position + br);
+ entry.write(c);
+ if (!entry.blockRemain) {
+ this[STATE] = "header";
+ this[WRITEENTRY] = null;
+ entry.end();
+ }
+ return c.length;
+ }
+ [CONSUMEMETA](chunk, position) {
+ const entry = this[WRITEENTRY];
+ const ret = this[CONSUMEBODY](chunk, position);
+ if (!this[WRITEENTRY]) {
+ this[EMITMETA](entry);
+ }
+ return ret;
+ }
+ [EMIT](ev, data, extra) {
+ if (!this[QUEUE].length && !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":
+ this[EX] = this[EX] || /* @__PURE__ */ Object.create(null);
+ this[EX].path = this[META].replace(/\0.*/, "");
+ break;
+ case "NextFileHasLongLinkpath":
+ this[EX] = this[EX] || /* @__PURE__ */ Object.create(null);
+ this[EX].linkpath = this[META].replace(/\0.*/, "");
+ break;
+ default:
+ throw new Error("unknown meta: " + entry.type);
+ }
+ }
+ abort(error) {
+ this[ABORTED] = true;
+ this.emit("abort", error);
+ this.warn("TAR_ABORT", error, { recoverable: false });
+ }
+ write(chunk) {
+ if (this[ABORTED]) {
+ return;
+ }
+ const needSniff = this[UNZIP] === null || this.brotli === void 0 && this[UNZIP] === false;
+ if (needSniff && chunk) {
+ if (this[BUFFER]) {
+ chunk = Buffer.concat([this[BUFFER], chunk]);
+ this[BUFFER] = null;
}
- function isFunctionPrefixed(fragment2) {
- var code;
- if (fragment2.slice(0, 8) !== "function") {
- return false;
- }
- code = fragment2.charCodeAt(8);
- return code === 40 || esutils.code.isWhiteSpace(code) || code === 42 || esutils.code.isLineTerminator(code);
+ if (chunk.length < gzipHeader.length) {
+ this[BUFFER] = chunk;
+ return true;
}
- function isAsyncPrefixed(fragment2) {
- var code, i, iz;
- if (fragment2.slice(0, 5) !== "async") {
- return false;
- }
- if (!esutils.code.isWhiteSpace(fragment2.charCodeAt(5))) {
- return false;
- }
- for (i = 6, iz = fragment2.length; i < iz; ++i) {
- if (!esutils.code.isWhiteSpace(fragment2.charCodeAt(i))) {
- break;
- }
- }
- if (i === iz) {
- return false;
- }
- if (fragment2.slice(i, i + 8) !== "function") {
- return false;
+ for (let i = 0; this[UNZIP] === null && i < gzipHeader.length; i++) {
+ if (chunk[i] !== gzipHeader[i]) {
+ this[UNZIP] = false;
}
- code = fragment2.charCodeAt(i + 8);
- return code === 40 || esutils.code.isWhiteSpace(code) || code === 42 || esutils.code.isLineTerminator(code);
- }
- result = [this.generateExpression(stmt.expression, Precedence.Sequence, E_TTT)];
- fragment = toSourceNodeWhenNeeded(result).toString();
- if (fragment.charCodeAt(0) === 123 || // ObjectExpression
- isClassPrefixed(fragment) || isFunctionPrefixed(fragment) || isAsyncPrefixed(fragment) || directive && flags & F_DIRECTIVE_CTX && stmt.expression.type === Syntax.Literal && typeof stmt.expression.value === "string") {
- result = ["(", result, ")" + this.semicolon(flags)];
- } else {
- result.push(this.semicolon(flags));
}
- return result;
- },
- ImportDeclaration: function(stmt, flags) {
- var result, cursor, that = this;
- if (stmt.specifiers.length === 0) {
- return [
- "import",
- space,
- // ModuleSpecifier
- this.generateExpression(stmt.source, Precedence.Sequence, E_TTT),
- this.semicolon(flags)
- ];
- }
- result = [
- "import"
- ];
- cursor = 0;
- if (stmt.specifiers[cursor].type === Syntax.ImportDefaultSpecifier) {
- result = join2(result, [
- this.generateExpression(stmt.specifiers[cursor], Precedence.Sequence, E_TTT)
- ]);
- ++cursor;
- }
- if (stmt.specifiers[cursor]) {
- if (cursor !== 0) {
- result.push(",");
- }
- if (stmt.specifiers[cursor].type === Syntax.ImportNamespaceSpecifier) {
- result = join2(result, [
- space,
- this.generateExpression(stmt.specifiers[cursor], Precedence.Sequence, E_TTT)
- ]);
- } else {
- result.push(space + "{");
- if (stmt.specifiers.length - cursor === 1) {
- result.push(space);
- result.push(this.generateExpression(stmt.specifiers[cursor], Precedence.Sequence, E_TTT));
- result.push(space + "}" + space);
+ const maybeBrotli = this.brotli === void 0;
+ if (this[UNZIP] === false && maybeBrotli) {
+ if (chunk.length < 512) {
+ if (this[ENDED]) {
+ this.brotli = true;
} else {
- withIndent(function(indent2) {
- var i, iz;
- result.push(newline);
- for (i = cursor, iz = stmt.specifiers.length; i < iz; ++i) {
- result.push(indent2);
- result.push(that.generateExpression(stmt.specifiers[i], Precedence.Sequence, E_TTT));
- if (i + 1 < iz) {
- result.push("," + newline);
- }
- }
- });
- if (!endsWithLineTerminator(toSourceNodeWhenNeeded(result).toString())) {
- result.push(newline);
- }
- result.push(base + "}" + space);
+ this[BUFFER] = chunk;
+ return true;
}
- }
- }
- result = join2(result, [
- "from" + space,
- // ModuleSpecifier
- this.generateExpression(stmt.source, Precedence.Sequence, E_TTT),
- this.semicolon(flags)
- ]);
- return result;
- },
- VariableDeclarator: function(stmt, flags) {
- var itemFlags = flags & F_ALLOW_IN ? E_TTT : E_FTT;
- if (stmt.init) {
- return [
- this.generateExpression(stmt.id, Precedence.Assignment, itemFlags),
- space,
- "=",
- space,
- this.generateExpression(stmt.init, Precedence.Assignment, itemFlags)
- ];
- }
- return this.generatePattern(stmt.id, Precedence.Assignment, itemFlags);
- },
- VariableDeclaration: function(stmt, flags) {
- var result, i, iz, node, bodyFlags, that = this;
- result = [stmt.kind];
- bodyFlags = flags & F_ALLOW_IN ? S_TFFF : S_FFFF;
- function block() {
- node = stmt.declarations[0];
- if (extra.comment && node.leadingComments) {
- result.push("\n");
- result.push(addIndent(that.generateStatement(node, bodyFlags)));
} else {
- result.push(noEmptySpace());
- result.push(that.generateStatement(node, bodyFlags));
- }
- for (i = 1, iz = stmt.declarations.length; i < iz; ++i) {
- node = stmt.declarations[i];
- if (extra.comment && node.leadingComments) {
- result.push("," + newline);
- result.push(addIndent(that.generateStatement(node, bodyFlags)));
- } else {
- result.push("," + space);
- result.push(that.generateStatement(node, bodyFlags));
+ try {
+ new Header(chunk.slice(0, 512));
+ this.brotli = false;
+ } catch (_) {
+ this.brotli = true;
}
}
}
- if (stmt.declarations.length > 1) {
- withIndent(block);
- } else {
- block();
+ if (this[UNZIP] === null || this[UNZIP] === false && this.brotli) {
+ const ended = this[ENDED];
+ this[ENDED] = false;
+ this[UNZIP] = this[UNZIP] === null ? new zlib.Unzip() : new zlib.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;
+ return ret2;
}
- result.push(this.semicolon(flags));
- return result;
- },
- ThrowStatement: function(stmt, flags) {
- return [join2(
- "throw",
- this.generateExpression(stmt.argument, Precedence.Sequence, E_TTT)
- ), this.semicolon(flags)];
- },
- TryStatement: function(stmt, flags) {
- var result, i, iz, guardedHandlers;
- result = ["try", this.maybeBlock(stmt.block, S_TFFF)];
- result = this.maybeBlockSuffix(stmt.block, result);
- if (stmt.handlers) {
- for (i = 0, iz = stmt.handlers.length; i < iz; ++i) {
- result = join2(result, this.generateStatement(stmt.handlers[i], S_TFFF));
- if (stmt.finalizer || i + 1 !== iz) {
- result = this.maybeBlockSuffix(stmt.handlers[i].body, result);
- }
+ }
+ this[WRITING] = true;
+ if (this[UNZIP]) {
+ this[UNZIP].write(chunk);
+ } else {
+ this[CONSUMECHUNK](chunk);
+ }
+ this[WRITING] = false;
+ const ret = this[QUEUE].length ? false : this[READENTRY] ? this[READENTRY].flowing : true;
+ if (!ret && !this[QUEUE].length) {
+ this[READENTRY].once("drain", (_) => this.emit("drain"));
+ }
+ return ret;
+ }
+ [BUFFERCONCAT](c) {
+ if (c && !this[ABORTED]) {
+ this[BUFFER] = this[BUFFER] ? Buffer.concat([this[BUFFER], c]) : c;
+ }
+ }
+ [MAYBEEND]() {
+ if (this[ENDED] && !this[EMITTEDEND] && !this[ABORTED] && !this[CONSUMING]) {
+ this[EMITTEDEND] = true;
+ const entry = this[WRITEENTRY];
+ if (entry && entry.blockRemain) {
+ const have = this[BUFFER] ? this[BUFFER].length : 0;
+ this.warn("TAR_BAD_ARCHIVE", `Truncated input (needed ${entry.blockRemain} more bytes, only ${have} available)`, { entry });
+ if (this[BUFFER]) {
+ entry.write(this[BUFFER]);
}
+ entry.end();
+ }
+ this[EMIT](DONE);
+ }
+ }
+ [CONSUMECHUNK](chunk) {
+ if (this[CONSUMING]) {
+ this[BUFFERCONCAT](chunk);
+ } else if (!chunk && !this[BUFFER]) {
+ this[MAYBEEND]();
+ } else {
+ this[CONSUMING] = true;
+ if (this[BUFFER]) {
+ this[BUFFERCONCAT](chunk);
+ const c = this[BUFFER];
+ this[BUFFER] = null;
+ this[CONSUMECHUNKSUB](c);
} else {
- guardedHandlers = stmt.guardedHandlers || [];
- for (i = 0, iz = guardedHandlers.length; i < iz; ++i) {
- result = join2(result, this.generateStatement(guardedHandlers[i], S_TFFF));
- if (stmt.finalizer || i + 1 !== iz) {
- result = this.maybeBlockSuffix(guardedHandlers[i].body, result);
- }
- }
- if (stmt.handler) {
- if (Array.isArray(stmt.handler)) {
- for (i = 0, iz = stmt.handler.length; i < iz; ++i) {
- result = join2(result, this.generateStatement(stmt.handler[i], S_TFFF));
- if (stmt.finalizer || i + 1 !== iz) {
- result = this.maybeBlockSuffix(stmt.handler[i].body, result);
- }
- }
- } else {
- result = join2(result, this.generateStatement(stmt.handler, S_TFFF));
- if (stmt.finalizer) {
- result = this.maybeBlockSuffix(stmt.handler.body, result);
- }
- }
- }
+ this[CONSUMECHUNKSUB](chunk);
}
- if (stmt.finalizer) {
- result = join2(result, ["finally", this.maybeBlock(stmt.finalizer, S_TFFF)]);
+ while (this[BUFFER] && this[BUFFER].length >= 512 && !this[ABORTED] && !this[SAW_EOF]) {
+ const c = this[BUFFER];
+ this[BUFFER] = null;
+ this[CONSUMECHUNKSUB](c);
}
- return result;
- },
- SwitchStatement: function(stmt, flags) {
- var result, fragment, i, iz, bodyFlags, that = this;
- withIndent(function() {
- result = [
- "switch" + space + "(",
- that.generateExpression(stmt.discriminant, Precedence.Sequence, E_TTT),
- ")" + space + "{" + newline
- ];
- });
- if (stmt.cases) {
- bodyFlags = S_TFFF;
- for (i = 0, iz = stmt.cases.length; i < iz; ++i) {
- if (i === iz - 1) {
- bodyFlags |= F_SEMICOLON_OPT;
- }
- fragment = addIndent(this.generateStatement(stmt.cases[i], bodyFlags));
- result.push(fragment);
- if (!endsWithLineTerminator(toSourceNodeWhenNeeded(fragment).toString())) {
- result.push(newline);
- }
- }
+ this[CONSUMING] = false;
+ }
+ if (!this[BUFFER] || this[ENDED]) {
+ this[MAYBEEND]();
+ }
+ }
+ [CONSUMECHUNKSUB](chunk) {
+ let position = 0;
+ const length = chunk.length;
+ while (position + 512 <= length && !this[ABORTED] && !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;
+ default:
+ throw new Error("invalid state: " + this[STATE]);
}
- result.push(addIndent("}"));
- return result;
- },
- SwitchCase: function(stmt, flags) {
- var result, fragment, i, iz, bodyFlags, that = this;
- withIndent(function() {
- if (stmt.test) {
- result = [
- join2("case", that.generateExpression(stmt.test, Precedence.Sequence, E_TTT)),
- ":"
- ];
- } else {
- result = ["default:"];
- }
- i = 0;
- iz = stmt.consequent.length;
- if (iz && stmt.consequent[0].type === Syntax.BlockStatement) {
- fragment = that.maybeBlock(stmt.consequent[0], S_TFFF);
- result.push(fragment);
- i = 1;
- }
- if (i !== iz && !endsWithLineTerminator(toSourceNodeWhenNeeded(result).toString())) {
- result.push(newline);
- }
- bodyFlags = S_TFFF;
- for (; i < iz; ++i) {
- if (i === iz - 1 && flags & F_SEMICOLON_OPT) {
- bodyFlags |= F_SEMICOLON_OPT;
- }
- fragment = addIndent(that.generateStatement(stmt.consequent[i], bodyFlags));
- result.push(fragment);
- if (i + 1 !== iz && !endsWithLineTerminator(toSourceNodeWhenNeeded(fragment).toString())) {
- result.push(newline);
- }
- }
- });
- return result;
- },
- IfStatement: function(stmt, flags) {
- var result, bodyFlags, semicolonOptional, that = this;
- withIndent(function() {
- result = [
- "if" + space + "(",
- that.generateExpression(stmt.test, Precedence.Sequence, E_TTT),
- ")"
- ];
- });
- semicolonOptional = flags & F_SEMICOLON_OPT;
- bodyFlags = S_TFFF;
- if (semicolonOptional) {
- bodyFlags |= F_SEMICOLON_OPT;
- }
- if (stmt.alternate) {
- result.push(this.maybeBlock(stmt.consequent, S_TFFF));
- result = this.maybeBlockSuffix(stmt.consequent, result);
- if (stmt.alternate.type === Syntax.IfStatement) {
- result = join2(result, ["else ", this.generateStatement(stmt.alternate, bodyFlags)]);
- } else {
- result = join2(result, join2("else", this.maybeBlock(stmt.alternate, bodyFlags)));
- }
+ }
+ if (position < length) {
+ if (this[BUFFER]) {
+ this[BUFFER] = Buffer.concat([chunk.slice(position), this[BUFFER]]);
} else {
- result.push(this.maybeBlock(stmt.consequent, bodyFlags));
+ this[BUFFER] = chunk.slice(position);
}
- return result;
- },
- ForStatement: function(stmt, flags) {
- var result, that = this;
- withIndent(function() {
- result = ["for" + space + "("];
- if (stmt.init) {
- if (stmt.init.type === Syntax.VariableDeclaration) {
- result.push(that.generateStatement(stmt.init, S_FFFF));
- } else {
- result.push(that.generateExpression(stmt.init, Precedence.Sequence, E_FTT));
- result.push(";");
- }
- } else {
- result.push(";");
- }
- if (stmt.test) {
- result.push(space);
- result.push(that.generateExpression(stmt.test, Precedence.Sequence, E_TTT));
- result.push(";");
- } else {
- result.push(";");
- }
- if (stmt.update) {
- result.push(space);
- result.push(that.generateExpression(stmt.update, Precedence.Sequence, E_TTT));
- result.push(")");
- } else {
- result.push(")");
- }
- });
- result.push(this.maybeBlock(stmt.body, flags & F_SEMICOLON_OPT ? S_TFFT : S_TFFF));
- return result;
- },
- ForInStatement: function(stmt, flags) {
- return this.generateIterationForStatement("in", stmt, flags & F_SEMICOLON_OPT ? S_TFFT : S_TFFF);
- },
- ForOfStatement: function(stmt, flags) {
- return this.generateIterationForStatement("of", stmt, flags & F_SEMICOLON_OPT ? S_TFFT : S_TFFF);
- },
- LabeledStatement: function(stmt, flags) {
- return [stmt.label.name + ":", this.maybeBlock(stmt.body, flags & F_SEMICOLON_OPT ? S_TFFT : S_TFFF)];
- },
- Program: function(stmt, flags) {
- var result, fragment, i, iz, bodyFlags;
- iz = stmt.body.length;
- result = [safeConcatenation && iz > 0 ? "\n" : ""];
- bodyFlags = S_TFTF;
- for (i = 0; i < iz; ++i) {
- if (!safeConcatenation && i === iz - 1) {
- bodyFlags |= F_SEMICOLON_OPT;
- }
- if (preserveBlankLines) {
- if (i === 0) {
- if (!stmt.body[0].leadingComments) {
- generateBlankLines(stmt.range[0], stmt.body[i].range[0], result);
- }
- }
- if (i > 0) {
- if (!stmt.body[i - 1].trailingComments && !stmt.body[i].leadingComments) {
- generateBlankLines(stmt.body[i - 1].range[1], stmt.body[i].range[0], result);
- }
- }
- }
- fragment = addIndent(this.generateStatement(stmt.body[i], bodyFlags));
- result.push(fragment);
- if (i + 1 < iz && !endsWithLineTerminator(toSourceNodeWhenNeeded(fragment).toString())) {
- if (preserveBlankLines) {
- if (!stmt.body[i + 1].leadingComments) {
- result.push(newline);
- }
- } else {
- result.push(newline);
- }
- }
- if (preserveBlankLines) {
- if (i === iz - 1) {
- if (!stmt.body[i].trailingComments) {
- generateBlankLines(stmt.body[i].range[1], stmt.range[1], result);
- }
- }
- }
- }
- return result;
- },
- FunctionDeclaration: function(stmt, flags) {
- return [
- generateAsyncPrefix(stmt, true),
- "function",
- generateStarSuffix(stmt) || noEmptySpace(),
- stmt.id ? generateIdentifier(stmt.id) : "",
- this.generateFunctionBody(stmt)
- ];
- },
- ReturnStatement: function(stmt, flags) {
- if (stmt.argument) {
- return [join2(
- "return",
- this.generateExpression(stmt.argument, Precedence.Sequence, E_TTT)
- ), this.semicolon(flags)];
- }
- return ["return" + this.semicolon(flags)];
- },
- WhileStatement: function(stmt, flags) {
- var result, that = this;
- withIndent(function() {
- result = [
- "while" + space + "(",
- that.generateExpression(stmt.test, Precedence.Sequence, E_TTT),
- ")"
- ];
- });
- result.push(this.maybeBlock(stmt.body, flags & F_SEMICOLON_OPT ? S_TFFT : S_TFFF));
- return result;
- },
- WithStatement: function(stmt, flags) {
- var result, that = this;
- withIndent(function() {
- result = [
- "with" + space + "(",
- that.generateExpression(stmt.object, Precedence.Sequence, E_TTT),
- ")"
- ];
- });
- result.push(this.maybeBlock(stmt.body, flags & F_SEMICOLON_OPT ? S_TFFT : S_TFFF));
- return result;
- }
- };
- merge(CodeGenerator.prototype, CodeGenerator.Statement);
- CodeGenerator.Expression = {
- SequenceExpression: function(expr, precedence, flags) {
- var result, i, iz;
- if (Precedence.Sequence < precedence) {
- flags |= F_ALLOW_IN;
- }
- result = [];
- for (i = 0, iz = expr.expressions.length; i < iz; ++i) {
- result.push(this.generateExpression(expr.expressions[i], Precedence.Assignment, flags));
- if (i + 1 < iz) {
- result.push("," + space);
- }
- }
- return parenthesize(result, Precedence.Sequence, precedence);
- },
- AssignmentExpression: function(expr, precedence, flags) {
- return this.generateAssignment(expr.left, expr.right, expr.operator, precedence, flags);
- },
- ArrowFunctionExpression: function(expr, precedence, flags) {
- return parenthesize(this.generateFunctionBody(expr), Precedence.ArrowFunction, precedence);
- },
- ConditionalExpression: function(expr, precedence, flags) {
- if (Precedence.Conditional < precedence) {
- flags |= F_ALLOW_IN;
- }
- return parenthesize(
- [
- this.generateExpression(expr.test, Precedence.Coalesce, flags),
- space + "?" + space,
- this.generateExpression(expr.consequent, Precedence.Assignment, flags),
- space + ":" + space,
- this.generateExpression(expr.alternate, Precedence.Assignment, flags)
- ],
- Precedence.Conditional,
- precedence
- );
- },
- LogicalExpression: function(expr, precedence, flags) {
- if (expr.operator === "??") {
- flags |= F_FOUND_COALESCE;
- }
- return this.BinaryExpression(expr, precedence, flags);
- },
- BinaryExpression: function(expr, precedence, flags) {
- var result, leftPrecedence, rightPrecedence, currentPrecedence, fragment, leftSource;
- currentPrecedence = BinaryPrecedence[expr.operator];
- leftPrecedence = expr.operator === "**" ? Precedence.Postfix : currentPrecedence;
- rightPrecedence = expr.operator === "**" ? currentPrecedence : currentPrecedence + 1;
- if (currentPrecedence < precedence) {
- flags |= F_ALLOW_IN;
- }
- fragment = this.generateExpression(expr.left, leftPrecedence, flags);
- leftSource = fragment.toString();
- if (leftSource.charCodeAt(leftSource.length - 1) === 47 && esutils.code.isIdentifierPartES5(expr.operator.charCodeAt(0))) {
- result = [fragment, noEmptySpace(), expr.operator];
- } else {
- result = join2(fragment, expr.operator);
- }
- fragment = this.generateExpression(expr.right, rightPrecedence, flags);
- if (expr.operator === "/" && fragment.toString().charAt(0) === "/" || expr.operator.slice(-1) === "<" && fragment.toString().slice(0, 3) === "!--") {
- result.push(noEmptySpace());
- result.push(fragment);
- } else {
- result = join2(result, fragment);
- }
- if (expr.operator === "in" && !(flags & F_ALLOW_IN)) {
- return ["(", result, ")"];
- }
- if ((expr.operator === "||" || expr.operator === "&&") && flags & F_FOUND_COALESCE) {
- return ["(", result, ")"];
- }
- return parenthesize(result, currentPrecedence, precedence);
- },
- CallExpression: function(expr, precedence, flags) {
- var result, i, iz;
- result = [this.generateExpression(expr.callee, Precedence.Call, E_TTF)];
- if (expr.optional) {
- result.push("?.");
- }
- result.push("(");
- for (i = 0, iz = expr["arguments"].length; i < iz; ++i) {
- result.push(this.generateExpression(expr["arguments"][i], Precedence.Assignment, E_TTT));
- if (i + 1 < iz) {
- result.push("," + space);
- }
- }
- result.push(")");
- if (!(flags & F_ALLOW_CALL)) {
- return ["(", result, ")"];
- }
- return parenthesize(result, Precedence.Call, precedence);
- },
- ChainExpression: function(expr, precedence, flags) {
- if (Precedence.OptionalChaining < precedence) {
- flags |= F_ALLOW_CALL;
- }
- var result = this.generateExpression(expr.expression, Precedence.OptionalChaining, flags);
- return parenthesize(result, Precedence.OptionalChaining, precedence);
- },
- NewExpression: function(expr, precedence, flags) {
- var result, length, i, iz, itemFlags;
- length = expr["arguments"].length;
- itemFlags = flags & F_ALLOW_UNPARATH_NEW && !parentheses && length === 0 ? E_TFT : E_TFF;
- result = join2(
- "new",
- this.generateExpression(expr.callee, Precedence.New, itemFlags)
- );
- if (!(flags & F_ALLOW_UNPARATH_NEW) || parentheses || length > 0) {
- result.push("(");
- for (i = 0, iz = length; i < iz; ++i) {
- result.push(this.generateExpression(expr["arguments"][i], Precedence.Assignment, E_TTT));
- if (i + 1 < iz) {
- result.push("," + space);
- }
- }
- result.push(")");
- }
- return parenthesize(result, Precedence.New, precedence);
- },
- MemberExpression: function(expr, precedence, flags) {
- var result, fragment;
- result = [this.generateExpression(expr.object, Precedence.Call, flags & F_ALLOW_CALL ? E_TTF : E_TFF)];
- if (expr.computed) {
- if (expr.optional) {
- result.push("?.");
- }
- result.push("[");
- result.push(this.generateExpression(expr.property, Precedence.Sequence, flags & F_ALLOW_CALL ? E_TTT : E_TFT));
- result.push("]");
- } else {
- if (!expr.optional && expr.object.type === Syntax.Literal && typeof expr.object.value === "number") {
- fragment = toSourceNodeWhenNeeded(result).toString();
- if (fragment.indexOf(".") < 0 && !/[eExX]/.test(fragment) && esutils.code.isDecimalDigit(fragment.charCodeAt(fragment.length - 1)) && !(fragment.length >= 2 && fragment.charCodeAt(0) === 48)) {
- result.push(" ");
- }
- }
- result.push(expr.optional ? "?." : ".");
- result.push(generateIdentifier(expr.property));
- }
- return parenthesize(result, Precedence.Member, precedence);
- },
- MetaProperty: function(expr, precedence, flags) {
- var result;
- result = [];
- result.push(typeof expr.meta === "string" ? expr.meta : generateIdentifier(expr.meta));
- result.push(".");
- result.push(typeof expr.property === "string" ? expr.property : generateIdentifier(expr.property));
- return parenthesize(result, Precedence.Member, precedence);
- },
- UnaryExpression: function(expr, precedence, flags) {
- var result, fragment, rightCharCode, leftSource, leftCharCode;
- fragment = this.generateExpression(expr.argument, Precedence.Unary, E_TTT);
- if (space === "") {
- result = join2(expr.operator, fragment);
- } else {
- result = [expr.operator];
- if (expr.operator.length > 2) {
- result = join2(result, fragment);
- } else {
- leftSource = toSourceNodeWhenNeeded(result).toString();
- leftCharCode = leftSource.charCodeAt(leftSource.length - 1);
- rightCharCode = fragment.toString().charCodeAt(0);
- if ((leftCharCode === 43 || leftCharCode === 45) && leftCharCode === rightCharCode || esutils.code.isIdentifierPartES5(leftCharCode) && esutils.code.isIdentifierPartES5(rightCharCode)) {
- result.push(noEmptySpace());
- result.push(fragment);
- } else {
- result.push(fragment);
- }
- }
- }
- return parenthesize(result, Precedence.Unary, precedence);
- },
- YieldExpression: function(expr, precedence, flags) {
- var result;
- if (expr.delegate) {
- result = "yield*";
- } else {
- result = "yield";
- }
- if (expr.argument) {
- result = join2(
- result,
- this.generateExpression(expr.argument, Precedence.Yield, E_TTT)
- );
- }
- return parenthesize(result, Precedence.Yield, precedence);
- },
- AwaitExpression: function(expr, precedence, flags) {
- var result = join2(
- expr.all ? "await*" : "await",
- this.generateExpression(expr.argument, Precedence.Await, E_TTT)
- );
- return parenthesize(result, Precedence.Await, precedence);
- },
- UpdateExpression: function(expr, precedence, flags) {
- if (expr.prefix) {
- return parenthesize(
- [
- expr.operator,
- this.generateExpression(expr.argument, Precedence.Unary, E_TTT)
- ],
- Precedence.Unary,
- precedence
- );
- }
- return parenthesize(
- [
- this.generateExpression(expr.argument, Precedence.Postfix, E_TTT),
- expr.operator
- ],
- Precedence.Postfix,
- precedence
- );
- },
- FunctionExpression: function(expr, precedence, flags) {
- var result = [
- generateAsyncPrefix(expr, true),
- "function"
- ];
- if (expr.id) {
- result.push(generateStarSuffix(expr) || noEmptySpace());
- result.push(generateIdentifier(expr.id));
- } else {
- result.push(generateStarSuffix(expr) || space);
- }
- result.push(this.generateFunctionBody(expr));
- return result;
- },
- ArrayPattern: function(expr, precedence, flags) {
- return this.ArrayExpression(expr, precedence, flags, true);
- },
- ArrayExpression: function(expr, precedence, flags, isPattern) {
- var result, multiline, that = this;
- if (!expr.elements.length) {
- return "[]";
- }
- multiline = isPattern ? false : expr.elements.length > 1;
- result = ["[", multiline ? newline : ""];
- withIndent(function(indent2) {
- var i, iz;
- for (i = 0, iz = expr.elements.length; i < iz; ++i) {
- if (!expr.elements[i]) {
- if (multiline) {
- result.push(indent2);
- }
- if (i + 1 === iz) {
- result.push(",");
- }
- } else {
- result.push(multiline ? indent2 : "");
- result.push(that.generateExpression(expr.elements[i], Precedence.Assignment, E_TTT));
- }
- if (i + 1 < iz) {
- result.push("," + (multiline ? newline : space));
- }
- }
- });
- if (multiline && !endsWithLineTerminator(toSourceNodeWhenNeeded(result).toString())) {
- result.push(newline);
- }
- result.push(multiline ? base : "");
- result.push("]");
- return result;
- },
- RestElement: function(expr, precedence, flags) {
- return "..." + this.generatePattern(expr.argument);
- },
- ClassExpression: function(expr, precedence, flags) {
- var result, fragment;
- result = ["class"];
- if (expr.id) {
- result = join2(result, this.generateExpression(expr.id, Precedence.Sequence, E_TTT));
- }
- if (expr.superClass) {
- fragment = join2("extends", this.generateExpression(expr.superClass, Precedence.Unary, E_TTT));
- result = join2(result, fragment);
- }
- result.push(space);
- result.push(this.generateStatement(expr.body, S_TFFT));
- return result;
- },
- MethodDefinition: function(expr, precedence, flags) {
- var result, fragment;
- if (expr["static"]) {
- result = ["static" + space];
- } else {
- result = [];
- }
- if (expr.kind === "get" || expr.kind === "set") {
- fragment = [
- join2(expr.kind, this.generatePropertyKey(expr.key, expr.computed)),
- this.generateFunctionBody(expr.value)
- ];
- } else {
- fragment = [
- generateMethodPrefix(expr),
- this.generatePropertyKey(expr.key, expr.computed),
- this.generateFunctionBody(expr.value)
- ];
- }
- return join2(result, fragment);
- },
- Property: function(expr, precedence, flags) {
- if (expr.kind === "get" || expr.kind === "set") {
- return [
- expr.kind,
- noEmptySpace(),
- this.generatePropertyKey(expr.key, expr.computed),
- this.generateFunctionBody(expr.value)
- ];
- }
- if (expr.shorthand) {
- if (expr.value.type === "AssignmentPattern") {
- return this.AssignmentPattern(expr.value, Precedence.Sequence, E_TTT);
- }
- return this.generatePropertyKey(expr.key, expr.computed);
- }
- if (expr.method) {
- return [
- generateMethodPrefix(expr),
- this.generatePropertyKey(expr.key, expr.computed),
- this.generateFunctionBody(expr.value)
- ];
- }
- return [
- this.generatePropertyKey(expr.key, expr.computed),
- ":" + space,
- this.generateExpression(expr.value, Precedence.Assignment, E_TTT)
- ];
- },
- ObjectExpression: function(expr, precedence, flags) {
- var multiline, result, fragment, that = this;
- if (!expr.properties.length) {
- return "{}";
- }
- multiline = expr.properties.length > 1;
- withIndent(function() {
- fragment = that.generateExpression(expr.properties[0], Precedence.Sequence, E_TTT);
- });
- if (!multiline) {
- if (!hasLineTerminator(toSourceNodeWhenNeeded(fragment).toString())) {
- return ["{", space, fragment, space, "}"];
- }
- }
- withIndent(function(indent2) {
- var i, iz;
- result = ["{", newline, indent2, fragment];
- if (multiline) {
- result.push("," + newline);
- for (i = 1, iz = expr.properties.length; i < iz; ++i) {
- result.push(indent2);
- result.push(that.generateExpression(expr.properties[i], Precedence.Sequence, E_TTT));
- if (i + 1 < iz) {
- result.push("," + newline);
- }
- }
- }
- });
- if (!endsWithLineTerminator(toSourceNodeWhenNeeded(result).toString())) {
- result.push(newline);
- }
- result.push(base);
- result.push("}");
- return result;
- },
- AssignmentPattern: function(expr, precedence, flags) {
- return this.generateAssignment(expr.left, expr.right, "=", precedence, flags);
- },
- ObjectPattern: function(expr, precedence, flags) {
- var result, i, iz, multiline, property, that = this;
- if (!expr.properties.length) {
- return "{}";
- }
- multiline = false;
- if (expr.properties.length === 1) {
- property = expr.properties[0];
- if (property.type === Syntax.Property && property.value.type !== Syntax.Identifier) {
- multiline = true;
- }
- } else {
- for (i = 0, iz = expr.properties.length; i < iz; ++i) {
- property = expr.properties[i];
- if (property.type === Syntax.Property && !property.shorthand) {
- multiline = true;
- break;
- }
- }
- }
- result = ["{", multiline ? newline : ""];
- withIndent(function(indent2) {
- var i2, iz2;
- for (i2 = 0, iz2 = expr.properties.length; i2 < iz2; ++i2) {
- result.push(multiline ? indent2 : "");
- result.push(that.generateExpression(expr.properties[i2], Precedence.Sequence, E_TTT));
- if (i2 + 1 < iz2) {
- result.push("," + (multiline ? newline : space));
- }
- }
- });
- if (multiline && !endsWithLineTerminator(toSourceNodeWhenNeeded(result).toString())) {
- result.push(newline);
- }
- result.push(multiline ? base : "");
- result.push("}");
- return result;
- },
- ThisExpression: function(expr, precedence, flags) {
- return "this";
- },
- Super: function(expr, precedence, flags) {
- return "super";
- },
- Identifier: function(expr, precedence, flags) {
- return generateIdentifier(expr);
- },
- ImportDefaultSpecifier: function(expr, precedence, flags) {
- return generateIdentifier(expr.id || expr.local);
- },
- ImportNamespaceSpecifier: function(expr, precedence, flags) {
- var result = ["*"];
- var id = expr.id || expr.local;
- if (id) {
- result.push(space + "as" + noEmptySpace() + generateIdentifier(id));
- }
- return result;
- },
- ImportSpecifier: function(expr, precedence, flags) {
- var imported = expr.imported;
- var result = [imported.name];
- var local = expr.local;
- if (local && local.name !== imported.name) {
- result.push(noEmptySpace() + "as" + noEmptySpace() + generateIdentifier(local));
- }
- return result;
- },
- ExportSpecifier: function(expr, precedence, flags) {
- var local = expr.local;
- var result = [local.name];
- var exported = expr.exported;
- if (exported && exported.name !== local.name) {
- result.push(noEmptySpace() + "as" + noEmptySpace() + generateIdentifier(exported));
- }
- return result;
- },
- Literal: function(expr, precedence, flags) {
- var raw;
- if (expr.hasOwnProperty("raw") && parse && extra.raw) {
- try {
- raw = parse(expr.raw).body[0].expression;
- if (raw.type === Syntax.Literal) {
- if (raw.value === expr.value) {
- return expr.raw;
- }
- }
- } catch (e) {
- }
- }
- if (expr.regex) {
- return "/" + expr.regex.pattern + "/" + expr.regex.flags;
- }
- if (typeof expr.value === "bigint") {
- return expr.value.toString() + "n";
- }
- if (expr.bigint) {
- return expr.bigint + "n";
- }
- if (expr.value === null) {
- return "null";
- }
- if (typeof expr.value === "string") {
- return escapeString(expr.value);
- }
- if (typeof expr.value === "number") {
- return generateNumber(expr.value);
- }
- if (typeof expr.value === "boolean") {
- return expr.value ? "true" : "false";
- }
- return generateRegExp(expr.value);
- },
- GeneratorExpression: function(expr, precedence, flags) {
- return this.ComprehensionExpression(expr, precedence, flags);
- },
- ComprehensionExpression: function(expr, precedence, flags) {
- var result, i, iz, fragment, that = this;
- result = expr.type === Syntax.GeneratorExpression ? ["("] : ["["];
- if (extra.moz.comprehensionExpressionStartsWithAssignment) {
- fragment = this.generateExpression(expr.body, Precedence.Assignment, E_TTT);
- result.push(fragment);
- }
- if (expr.blocks) {
- withIndent(function() {
- for (i = 0, iz = expr.blocks.length; i < iz; ++i) {
- fragment = that.generateExpression(expr.blocks[i], Precedence.Sequence, E_TTT);
- if (i > 0 || extra.moz.comprehensionExpressionStartsWithAssignment) {
- result = join2(result, fragment);
- } else {
- result.push(fragment);
- }
- }
- });
- }
- if (expr.filter) {
- result = join2(result, "if" + space);
- fragment = this.generateExpression(expr.filter, Precedence.Sequence, E_TTT);
- result = join2(result, ["(", fragment, ")"]);
- }
- if (!extra.moz.comprehensionExpressionStartsWithAssignment) {
- fragment = this.generateExpression(expr.body, Precedence.Assignment, E_TTT);
- result = join2(result, fragment);
- }
- result.push(expr.type === Syntax.GeneratorExpression ? ")" : "]");
- return result;
- },
- ComprehensionBlock: function(expr, precedence, flags) {
- var fragment;
- if (expr.left.type === Syntax.VariableDeclaration) {
- fragment = [
- expr.left.kind,
- noEmptySpace(),
- this.generateStatement(expr.left.declarations[0], S_FFFF)
- ];
- } else {
- fragment = this.generateExpression(expr.left, Precedence.Call, E_TTT);
- }
- fragment = join2(fragment, expr.of ? "of" : "in");
- fragment = join2(fragment, this.generateExpression(expr.right, Precedence.Sequence, E_TTT));
- return ["for" + space + "(", fragment, ")"];
- },
- SpreadElement: function(expr, precedence, flags) {
- return [
- "...",
- this.generateExpression(expr.argument, Precedence.Assignment, E_TTT)
- ];
- },
- TaggedTemplateExpression: function(expr, precedence, flags) {
- var itemFlags = E_TTF;
- if (!(flags & F_ALLOW_CALL)) {
- itemFlags = E_TFF;
- }
- var result = [
- this.generateExpression(expr.tag, Precedence.Call, itemFlags),
- this.generateExpression(expr.quasi, Precedence.Primary, E_FFT)
- ];
- return parenthesize(result, Precedence.TaggedTemplate, precedence);
- },
- TemplateElement: function(expr, precedence, flags) {
- return expr.value.raw;
- },
- TemplateLiteral: function(expr, precedence, flags) {
- var result, i, iz;
- result = ["`"];
- for (i = 0, iz = expr.quasis.length; i < iz; ++i) {
- result.push(this.generateExpression(expr.quasis[i], Precedence.Primary, E_TTT));
- if (i + 1 < iz) {
- result.push("${" + space);
- result.push(this.generateExpression(expr.expressions[i], Precedence.Sequence, E_TTT));
- result.push(space + "}");
- }
- }
- result.push("`");
- return result;
- },
- ModuleSpecifier: function(expr, precedence, flags) {
- return this.Literal(expr, precedence, flags);
- },
- ImportExpression: function(expr, precedence, flag) {
- return parenthesize([
- "import(",
- this.generateExpression(expr.source, Precedence.Assignment, E_TTT),
- ")"
- ], Precedence.Call, precedence);
}
- };
- merge(CodeGenerator.prototype, CodeGenerator.Expression);
- CodeGenerator.prototype.generateExpression = function(expr, precedence, flags) {
- var result, type;
- type = expr.type || Syntax.Property;
- if (extra.verbatim && expr.hasOwnProperty(extra.verbatim)) {
- return generateVerbatim(expr, precedence);
- }
- result = this[type](expr, precedence, flags);
- if (extra.comment) {
- result = addComments(expr, result);
- }
- return toSourceNodeWhenNeeded(result, expr);
- };
- CodeGenerator.prototype.generateStatement = function(stmt, flags) {
- var result, fragment;
- result = this[stmt.type](stmt, flags);
- if (extra.comment) {
- result = addComments(stmt, result);
- }
- fragment = toSourceNodeWhenNeeded(result).toString();
- if (stmt.type === Syntax.Program && !safeConcatenation && newline === "" && fragment.charAt(fragment.length - 1) === "\n") {
- result = sourceMap ? toSourceNodeWhenNeeded(result).replaceRight(/\s+$/, "") : fragment.replace(/\s+$/, "");
- }
- return toSourceNodeWhenNeeded(result, stmt);
- };
- function generateInternal(node) {
- var codegen;
- codegen = new CodeGenerator();
- if (isStatement(node)) {
- return codegen.generateStatement(node, S_TFFF);
- }
- if (isExpression(node)) {
- return codegen.generateExpression(node, Precedence.Sequence, E_TTT);
- }
- throw new Error("Unknown node type: " + node.type);
- }
- function generate(node, options) {
- var defaultOptions = getDefaultOptions(), result, pair;
- if (options != null) {
- if (typeof options.indent === "string") {
- defaultOptions.format.indent.style = options.indent;
- }
- if (typeof options.base === "number") {
- defaultOptions.format.indent.base = options.base;
- }
- options = updateDeeply(defaultOptions, options);
- indent = options.format.indent.style;
- if (typeof options.base === "string") {
- base = options.base;
- } else {
- base = stringRepeat(indent, options.format.indent.base);
- }
- } else {
- options = defaultOptions;
- indent = options.format.indent.style;
- base = stringRepeat(indent, options.format.indent.base);
- }
- json = options.format.json;
- renumber = options.format.renumber;
- hexadecimal = json ? false : options.format.hexadecimal;
- quotes = json ? "double" : options.format.quotes;
- escapeless = options.format.escapeless;
- newline = options.format.newline;
- space = options.format.space;
- if (options.format.compact) {
- newline = space = indent = base = "";
- }
- parentheses = options.format.parentheses;
- semicolons = options.format.semicolons;
- safeConcatenation = options.format.safeConcatenation;
- directive = options.directive;
- parse = json ? null : options.parse;
- sourceMap = options.sourceMap;
- sourceCode = options.sourceCode;
- preserveBlankLines = options.format.preserveBlankLines && sourceCode !== null;
- extra = options;
- if (sourceMap) {
- if (!exports.browser) {
- SourceNode = require_source_map().SourceNode;
+ }
+ end(chunk) {
+ if (!this[ABORTED]) {
+ if (this[UNZIP]) {
+ this[UNZIP].end(chunk);
} else {
- SourceNode = global.sourceMap.SourceNode;
+ this[ENDED] = true;
+ if (this.brotli === void 0)
+ chunk = chunk || Buffer.alloc(0);
+ this.write(chunk);
}
}
- result = generateInternal(node);
- if (!sourceMap) {
- pair = { code: result.toString(), map: null };
- return options.sourceMapWithCode ? pair : pair.code;
- }
- pair = result.toStringWithSourceMap({
- file: options.file,
- sourceRoot: options.sourceMapRoot
- });
- if (options.sourceContent) {
- pair.map.setSourceContent(
- options.sourceMap,
- options.sourceContent
- );
- }
- if (options.sourceMapWithCode) {
- return pair;
- }
- return pair.map.toString();
}
- FORMAT_MINIFY = {
- indent: {
- style: "",
- base: 0
- },
- renumber: true,
- hexadecimal: true,
- quotes: "auto",
- escapeless: true,
- compact: true,
- parentheses: false,
- semicolons: false
- };
- FORMAT_DEFAULTS = getDefaultOptions().format;
- exports.version = require_package().version;
- exports.generate = generate;
- exports.attachComments = estraverse.attachComments;
- exports.Precedence = updateDeeply({}, Precedence);
- exports.browser = false;
- exports.FORMAT_MINIFY = FORMAT_MINIFY;
- exports.FORMAT_DEFAULTS = FORMAT_DEFAULTS;
- })();
- }
-});
-
-// .yarn/cache/esprima-npm-4.0.1-1084e98778-ad4bab9ead.zip/node_modules/esprima/dist/esprima.js
-var require_esprima = __commonJS({
- ".yarn/cache/esprima-npm-4.0.1-1084e98778-ad4bab9ead.zip/node_modules/esprima/dist/esprima.js"(exports, module2) {
- (function webpackUniversalModuleDefinition(root, factory) {
- if (typeof exports === "object" && typeof module2 === "object")
- module2.exports = factory();
- else if (typeof define === "function" && define.amd)
- define([], factory);
- else if (typeof exports === "object")
- exports["esprima"] = factory();
- else
- root["esprima"] = factory();
- })(exports, function() {
- return (
- /******/
- function(modules) {
- var installedModules = {};
- function __webpack_require__(moduleId) {
- if (installedModules[moduleId])
- return installedModules[moduleId].exports;
- var module3 = installedModules[moduleId] = {
- /******/
- exports: {},
- /******/
- id: moduleId,
- /******/
- loaded: false
- /******/
- };
- modules[moduleId].call(module3.exports, module3, module3.exports, __webpack_require__);
- module3.loaded = true;
- return module3.exports;
- }
- __webpack_require__.m = modules;
- __webpack_require__.c = installedModules;
- __webpack_require__.p = "";
- return __webpack_require__(0);
- }([
- /* 0 */
- /***/
- function(module3, exports2, __webpack_require__) {
- "use strict";
- Object.defineProperty(exports2, "__esModule", { value: true });
- var comment_handler_1 = __webpack_require__(1);
- var jsx_parser_1 = __webpack_require__(3);
- var parser_1 = __webpack_require__(8);
- var tokenizer_1 = __webpack_require__(15);
- function parse(code, options, delegate) {
- var commentHandler = null;
- var proxyDelegate = function(node, metadata) {
- if (delegate) {
- delegate(node, metadata);
- }
- if (commentHandler) {
- commentHandler.visit(node, metadata);
- }
- };
- var parserDelegate = typeof delegate === "function" ? proxyDelegate : null;
- var collectComment = false;
- if (options) {
- collectComment = typeof options.comment === "boolean" && options.comment;
- var attachComment = typeof options.attachComment === "boolean" && options.attachComment;
- if (collectComment || attachComment) {
- commentHandler = new comment_handler_1.CommentHandler();
- commentHandler.attach = attachComment;
- options.comment = true;
- parserDelegate = proxyDelegate;
- }
- }
- var isModule = false;
- if (options && typeof options.sourceType === "string") {
- isModule = options.sourceType === "module";
- }
- var parser;
- if (options && typeof options.jsx === "boolean" && options.jsx) {
- parser = new jsx_parser_1.JSXParser(code, options, parserDelegate);
- } else {
- parser = new parser_1.Parser(code, options, parserDelegate);
- }
- var program = isModule ? parser.parseModule() : parser.parseScript();
- var ast = program;
- if (collectComment && commentHandler) {
- ast.comments = commentHandler.comments;
- }
- if (parser.config.tokens) {
- ast.tokens = parser.tokens;
- }
- if (parser.config.tolerant) {
- ast.errors = parser.errorHandler.errors;
- }
- return ast;
- }
- exports2.parse = parse;
- function parseModule(code, options, delegate) {
- var parsingOptions = options || {};
- parsingOptions.sourceType = "module";
- return parse(code, parsingOptions, delegate);
- }
- exports2.parseModule = parseModule;
- function parseScript(code, options, delegate) {
- var parsingOptions = options || {};
- parsingOptions.sourceType = "script";
- return parse(code, parsingOptions, delegate);
- }
- exports2.parseScript = parseScript;
- function tokenize(code, options, delegate) {
- var tokenizer = new tokenizer_1.Tokenizer(code, options);
- var tokens;
- tokens = [];
- try {
- while (true) {
- var token = tokenizer.getNextToken();
- if (!token) {
- break;
- }
- if (delegate) {
- token = delegate(token);
- }
- tokens.push(token);
- }
- } catch (e) {
- tokenizer.errorHandler.tolerate(e);
- }
- if (tokenizer.errorHandler.tolerant) {
- tokens.errors = tokenizer.errors();
- }
- return tokens;
- }
- exports2.tokenize = tokenize;
- var syntax_1 = __webpack_require__(2);
- exports2.Syntax = syntax_1.Syntax;
- exports2.version = "4.0.1";
- },
- /* 1 */
- /***/
- function(module3, exports2, __webpack_require__) {
- "use strict";
- Object.defineProperty(exports2, "__esModule", { value: true });
- var syntax_1 = __webpack_require__(2);
- var CommentHandler = function() {
- function CommentHandler2() {
- this.attach = false;
- this.comments = [];
- this.stack = [];
- this.leading = [];
- this.trailing = [];
- }
- CommentHandler2.prototype.insertInnerComments = function(node, metadata) {
- if (node.type === syntax_1.Syntax.BlockStatement && node.body.length === 0) {
- var innerComments = [];
- for (var i = this.leading.length - 1; i >= 0; --i) {
- var entry = this.leading[i];
- if (metadata.end.offset >= entry.start) {
- innerComments.unshift(entry.comment);
- this.leading.splice(i, 1);
- this.trailing.splice(i, 1);
- }
- }
- if (innerComments.length) {
- node.innerComments = innerComments;
- }
- }
- };
- CommentHandler2.prototype.findTrailingComments = function(metadata) {
- var trailingComments = [];
- if (this.trailing.length > 0) {
- for (var i = this.trailing.length - 1; i >= 0; --i) {
- var entry_1 = this.trailing[i];
- if (entry_1.start >= metadata.end.offset) {
- trailingComments.unshift(entry_1.comment);
- }
- }
- this.trailing.length = 0;
- return trailingComments;
- }
- var entry = this.stack[this.stack.length - 1];
- if (entry && entry.node.trailingComments) {
- var firstComment = entry.node.trailingComments[0];
- if (firstComment && firstComment.range[0] >= metadata.end.offset) {
- trailingComments = entry.node.trailingComments;
- delete entry.node.trailingComments;
- }
- }
- return trailingComments;
- };
- CommentHandler2.prototype.findLeadingComments = function(metadata) {
- var leadingComments = [];
- var target;
- while (this.stack.length > 0) {
- var entry = this.stack[this.stack.length - 1];
- if (entry && entry.start >= metadata.start.offset) {
- target = entry.node;
- this.stack.pop();
- } else {
- break;
- }
- }
- if (target) {
- var count = target.leadingComments ? target.leadingComments.length : 0;
- for (var i = count - 1; i >= 0; --i) {
- var comment = target.leadingComments[i];
- if (comment.range[1] <= metadata.start.offset) {
- leadingComments.unshift(comment);
- target.leadingComments.splice(i, 1);
- }
- }
- if (target.leadingComments && target.leadingComments.length === 0) {
- delete target.leadingComments;
- }
- return leadingComments;
- }
- for (var i = this.leading.length - 1; i >= 0; --i) {
- var entry = this.leading[i];
- if (entry.start <= metadata.start.offset) {
- leadingComments.unshift(entry.comment);
- this.leading.splice(i, 1);
- }
- }
- return leadingComments;
- };
- CommentHandler2.prototype.visitNode = function(node, metadata) {
- if (node.type === syntax_1.Syntax.Program && node.body.length > 0) {
- return;
- }
- this.insertInnerComments(node, metadata);
- var trailingComments = this.findTrailingComments(metadata);
- var leadingComments = this.findLeadingComments(metadata);
- if (leadingComments.length > 0) {
- node.leadingComments = leadingComments;
- }
- if (trailingComments.length > 0) {
- node.trailingComments = trailingComments;
- }
- this.stack.push({
- node,
- start: metadata.start.offset
- });
- };
- CommentHandler2.prototype.visitComment = function(node, metadata) {
- var type = node.type[0] === "L" ? "Line" : "Block";
- var comment = {
- type,
- value: node.value
- };
- if (node.range) {
- comment.range = node.range;
- }
- if (node.loc) {
- comment.loc = node.loc;
- }
- this.comments.push(comment);
- if (this.attach) {
- var entry = {
- comment: {
- type,
- value: node.value,
- range: [metadata.start.offset, metadata.end.offset]
- },
- start: metadata.start.offset
- };
- if (node.loc) {
- entry.comment.loc = node.loc;
- }
- node.type = type;
- this.leading.push(entry);
- this.trailing.push(entry);
- }
- };
- CommentHandler2.prototype.visit = function(node, metadata) {
- if (node.type === "LineComment") {
- this.visitComment(node, metadata);
- } else if (node.type === "BlockComment") {
- this.visitComment(node, metadata);
- } else if (this.attach) {
- this.visitNode(node, metadata);
- }
- };
- return CommentHandler2;
- }();
- exports2.CommentHandler = CommentHandler;
- },
- /* 2 */
- /***/
- function(module3, exports2) {
- "use strict";
- Object.defineProperty(exports2, "__esModule", { value: true });
- exports2.Syntax = {
- AssignmentExpression: "AssignmentExpression",
- AssignmentPattern: "AssignmentPattern",
- ArrayExpression: "ArrayExpression",
- ArrayPattern: "ArrayPattern",
- ArrowFunctionExpression: "ArrowFunctionExpression",
- AwaitExpression: "AwaitExpression",
- BlockStatement: "BlockStatement",
- BinaryExpression: "BinaryExpression",
- BreakStatement: "BreakStatement",
- CallExpression: "CallExpression",
- CatchClause: "CatchClause",
- ClassBody: "ClassBody",
- ClassDeclaration: "ClassDeclaration",
- ClassExpression: "ClassExpression",
- ConditionalExpression: "ConditionalExpression",
- ContinueStatement: "ContinueStatement",
- DoWhileStatement: "DoWhileStatement",
- DebuggerStatement: "DebuggerStatement",
- EmptyStatement: "EmptyStatement",
- ExportAllDeclaration: "ExportAllDeclaration",
- ExportDefaultDeclaration: "ExportDefaultDeclaration",
- ExportNamedDeclaration: "ExportNamedDeclaration",
- ExportSpecifier: "ExportSpecifier",
- ExpressionStatement: "ExpressionStatement",
- ForStatement: "ForStatement",
- ForOfStatement: "ForOfStatement",
- ForInStatement: "ForInStatement",
- FunctionDeclaration: "FunctionDeclaration",
- FunctionExpression: "FunctionExpression",
- Identifier: "Identifier",
- IfStatement: "IfStatement",
- ImportDeclaration: "ImportDeclaration",
- ImportDefaultSpecifier: "ImportDefaultSpecifier",
- ImportNamespaceSpecifier: "ImportNamespaceSpecifier",
- ImportSpecifier: "ImportSpecifier",
- Literal: "Literal",
- LabeledStatement: "LabeledStatement",
- LogicalExpression: "LogicalExpression",
- MemberExpression: "MemberExpression",
- MetaProperty: "MetaProperty",
- MethodDefinition: "MethodDefinition",
- NewExpression: "NewExpression",
- ObjectExpression: "ObjectExpression",
- ObjectPattern: "ObjectPattern",
- Program: "Program",
- Property: "Property",
- RestElement: "RestElement",
- ReturnStatement: "ReturnStatement",
- SequenceExpression: "SequenceExpression",
- SpreadElement: "SpreadElement",
- Super: "Super",
- SwitchCase: "SwitchCase",
- SwitchStatement: "SwitchStatement",
- TaggedTemplateExpression: "TaggedTemplateExpression",
- TemplateElement: "TemplateElement",
- TemplateLiteral: "TemplateLiteral",
- ThisExpression: "ThisExpression",
- ThrowStatement: "ThrowStatement",
- TryStatement: "TryStatement",
- UnaryExpression: "UnaryExpression",
- UpdateExpression: "UpdateExpression",
- VariableDeclaration: "VariableDeclaration",
- VariableDeclarator: "VariableDeclarator",
- WhileStatement: "WhileStatement",
- WithStatement: "WithStatement",
- YieldExpression: "YieldExpression"
- };
- },
- /* 3 */
- /***/
- function(module3, exports2, __webpack_require__) {
- "use strict";
- var __extends2 = this && this.__extends || function() {
- var extendStatics2 = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d, b) {
- d.__proto__ = b;
- } || function(d, b) {
- for (var p in b)
- if (b.hasOwnProperty(p))
- d[p] = b[p];
- };
- return function(d, b) {
- extendStatics2(d, b);
- function __() {
- this.constructor = d;
- }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
- };
- }();
- Object.defineProperty(exports2, "__esModule", { value: true });
- var character_1 = __webpack_require__(4);
- var JSXNode = __webpack_require__(5);
- var jsx_syntax_1 = __webpack_require__(6);
- var Node = __webpack_require__(7);
- var parser_1 = __webpack_require__(8);
- var token_1 = __webpack_require__(13);
- var xhtml_entities_1 = __webpack_require__(14);
- token_1.TokenName[
- 100
- /* Identifier */
- ] = "JSXIdentifier";
- token_1.TokenName[
- 101
- /* Text */
- ] = "JSXText";
- function getQualifiedElementName(elementName) {
- var qualifiedName;
- switch (elementName.type) {
- case jsx_syntax_1.JSXSyntax.JSXIdentifier:
- var id = elementName;
- qualifiedName = id.name;
- break;
- case jsx_syntax_1.JSXSyntax.JSXNamespacedName:
- var ns = elementName;
- qualifiedName = getQualifiedElementName(ns.namespace) + ":" + getQualifiedElementName(ns.name);
- break;
- case jsx_syntax_1.JSXSyntax.JSXMemberExpression:
- var expr = elementName;
- qualifiedName = getQualifiedElementName(expr.object) + "." + getQualifiedElementName(expr.property);
- break;
- default:
- break;
- }
- return qualifiedName;
- }
- var JSXParser = function(_super) {
- __extends2(JSXParser2, _super);
- function JSXParser2(code, options, delegate) {
- return _super.call(this, code, options, delegate) || this;
- }
- JSXParser2.prototype.parsePrimaryExpression = function() {
- return this.match("<") ? this.parseJSXRoot() : _super.prototype.parsePrimaryExpression.call(this);
- };
- JSXParser2.prototype.startJSX = function() {
- this.scanner.index = this.startMarker.index;
- this.scanner.lineNumber = this.startMarker.line;
- this.scanner.lineStart = this.startMarker.index - this.startMarker.column;
- };
- JSXParser2.prototype.finishJSX = function() {
- this.nextToken();
- };
- JSXParser2.prototype.reenterJSX = function() {
- this.startJSX();
- this.expectJSX("}");
- if (this.config.tokens) {
- this.tokens.pop();
- }
- };
- JSXParser2.prototype.createJSXNode = function() {
- this.collectComments();
- return {
- index: this.scanner.index,
- line: this.scanner.lineNumber,
- column: this.scanner.index - this.scanner.lineStart
- };
- };
- JSXParser2.prototype.createJSXChildNode = function() {
- return {
- index: this.scanner.index,
- line: this.scanner.lineNumber,
- column: this.scanner.index - this.scanner.lineStart
- };
- };
- JSXParser2.prototype.scanXHTMLEntity = function(quote) {
- var result = "&";
- var valid = true;
- var terminated = false;
- var numeric = false;
- var hex = false;
- while (!this.scanner.eof() && valid && !terminated) {
- var ch = this.scanner.source[this.scanner.index];
- if (ch === quote) {
- break;
- }
- terminated = ch === ";";
- result += ch;
- ++this.scanner.index;
- if (!terminated) {
- switch (result.length) {
- case 2:
- numeric = ch === "#";
- break;
- case 3:
- if (numeric) {
- hex = ch === "x";
- valid = hex || character_1.Character.isDecimalDigit(ch.charCodeAt(0));
- numeric = numeric && !hex;
- }
- break;
- default:
- valid = valid && !(numeric && !character_1.Character.isDecimalDigit(ch.charCodeAt(0)));
- valid = valid && !(hex && !character_1.Character.isHexDigit(ch.charCodeAt(0)));
- break;
- }
- }
- }
- if (valid && terminated && result.length > 2) {
- var str = result.substr(1, result.length - 2);
- if (numeric && str.length > 1) {
- result = String.fromCharCode(parseInt(str.substr(1), 10));
- } else if (hex && str.length > 2) {
- result = String.fromCharCode(parseInt("0" + str.substr(1), 16));
- } else if (!numeric && !hex && xhtml_entities_1.XHTMLEntities[str]) {
- result = xhtml_entities_1.XHTMLEntities[str];
- }
- }
- return result;
- };
- JSXParser2.prototype.lexJSX = function() {
- var cp = this.scanner.source.charCodeAt(this.scanner.index);
- if (cp === 60 || cp === 62 || cp === 47 || cp === 58 || cp === 61 || cp === 123 || cp === 125) {
- var value = this.scanner.source[this.scanner.index++];
- return {
- type: 7,
- value,
- lineNumber: this.scanner.lineNumber,
- lineStart: this.scanner.lineStart,
- start: this.scanner.index - 1,
- end: this.scanner.index
- };
- }
- if (cp === 34 || cp === 39) {
- var start = this.scanner.index;
- var quote = this.scanner.source[this.scanner.index++];
- var str = "";
- while (!this.scanner.eof()) {
- var ch = this.scanner.source[this.scanner.index++];
- if (ch === quote) {
- break;
- } else if (ch === "&") {
- str += this.scanXHTMLEntity(quote);
- } else {
- str += ch;
- }
- }
- return {
- type: 8,
- value: str,
- lineNumber: this.scanner.lineNumber,
- lineStart: this.scanner.lineStart,
- start,
- end: this.scanner.index
- };
- }
- if (cp === 46) {
- var n1 = this.scanner.source.charCodeAt(this.scanner.index + 1);
- var n2 = this.scanner.source.charCodeAt(this.scanner.index + 2);
- var value = n1 === 46 && n2 === 46 ? "..." : ".";
- var start = this.scanner.index;
- this.scanner.index += value.length;
- return {
- type: 7,
- value,
- lineNumber: this.scanner.lineNumber,
- lineStart: this.scanner.lineStart,
- start,
- end: this.scanner.index
- };
- }
- if (cp === 96) {
- return {
- type: 10,
- value: "",
- lineNumber: this.scanner.lineNumber,
- lineStart: this.scanner.lineStart,
- start: this.scanner.index,
- end: this.scanner.index
- };
- }
- if (character_1.Character.isIdentifierStart(cp) && cp !== 92) {
- var start = this.scanner.index;
- ++this.scanner.index;
- while (!this.scanner.eof()) {
- var ch = this.scanner.source.charCodeAt(this.scanner.index);
- if (character_1.Character.isIdentifierPart(ch) && ch !== 92) {
- ++this.scanner.index;
- } else if (ch === 45) {
- ++this.scanner.index;
- } else {
- break;
- }
- }
- var id = this.scanner.source.slice(start, this.scanner.index);
- return {
- type: 100,
- value: id,
- lineNumber: this.scanner.lineNumber,
- lineStart: this.scanner.lineStart,
- start,
- end: this.scanner.index
- };
- }
- return this.scanner.lex();
- };
- JSXParser2.prototype.nextJSXToken = function() {
- this.collectComments();
- this.startMarker.index = this.scanner.index;
- this.startMarker.line = this.scanner.lineNumber;
- this.startMarker.column = this.scanner.index - this.scanner.lineStart;
- var token = this.lexJSX();
- this.lastMarker.index = this.scanner.index;
- this.lastMarker.line = this.scanner.lineNumber;
- this.lastMarker.column = this.scanner.index - this.scanner.lineStart;
- if (this.config.tokens) {
- this.tokens.push(this.convertToken(token));
- }
- return token;
- };
- JSXParser2.prototype.nextJSXText = function() {
- this.startMarker.index = this.scanner.index;
- this.startMarker.line = this.scanner.lineNumber;
- this.startMarker.column = this.scanner.index - this.scanner.lineStart;
- var start = this.scanner.index;
- var text = "";
- while (!this.scanner.eof()) {
- var ch = this.scanner.source[this.scanner.index];
- if (ch === "{" || ch === "<") {
- break;
- }
- ++this.scanner.index;
- text += ch;
- if (character_1.Character.isLineTerminator(ch.charCodeAt(0))) {
- ++this.scanner.lineNumber;
- if (ch === "\r" && this.scanner.source[this.scanner.index] === "\n") {
- ++this.scanner.index;
- }
- this.scanner.lineStart = this.scanner.index;
- }
- }
- this.lastMarker.index = this.scanner.index;
- this.lastMarker.line = this.scanner.lineNumber;
- this.lastMarker.column = this.scanner.index - this.scanner.lineStart;
- var token = {
- type: 101,
- value: text,
- lineNumber: this.scanner.lineNumber,
- lineStart: this.scanner.lineStart,
- start,
- end: this.scanner.index
- };
- if (text.length > 0 && this.config.tokens) {
- this.tokens.push(this.convertToken(token));
- }
- return token;
- };
- JSXParser2.prototype.peekJSXToken = function() {
- var state = this.scanner.saveState();
- this.scanner.scanComments();
- var next = this.lexJSX();
- this.scanner.restoreState(state);
- return next;
- };
- JSXParser2.prototype.expectJSX = function(value) {
- var token = this.nextJSXToken();
- if (token.type !== 7 || token.value !== value) {
- this.throwUnexpectedToken(token);
- }
- };
- JSXParser2.prototype.matchJSX = function(value) {
- var next = this.peekJSXToken();
- return next.type === 7 && next.value === value;
- };
- JSXParser2.prototype.parseJSXIdentifier = function() {
- var node = this.createJSXNode();
- var token = this.nextJSXToken();
- if (token.type !== 100) {
- this.throwUnexpectedToken(token);
- }
- return this.finalize(node, new JSXNode.JSXIdentifier(token.value));
- };
- JSXParser2.prototype.parseJSXElementName = function() {
- var node = this.createJSXNode();
- var elementName = this.parseJSXIdentifier();
- if (this.matchJSX(":")) {
- var namespace = elementName;
- this.expectJSX(":");
- var name_1 = this.parseJSXIdentifier();
- elementName = this.finalize(node, new JSXNode.JSXNamespacedName(namespace, name_1));
- } else if (this.matchJSX(".")) {
- while (this.matchJSX(".")) {
- var object = elementName;
- this.expectJSX(".");
- var property = this.parseJSXIdentifier();
- elementName = this.finalize(node, new JSXNode.JSXMemberExpression(object, property));
- }
- }
- return elementName;
- };
- JSXParser2.prototype.parseJSXAttributeName = function() {
- var node = this.createJSXNode();
- var attributeName;
- var identifier = this.parseJSXIdentifier();
- if (this.matchJSX(":")) {
- var namespace = identifier;
- this.expectJSX(":");
- var name_2 = this.parseJSXIdentifier();
- attributeName = this.finalize(node, new JSXNode.JSXNamespacedName(namespace, name_2));
- } else {
- attributeName = identifier;
- }
- return attributeName;
- };
- JSXParser2.prototype.parseJSXStringLiteralAttribute = function() {
- var node = this.createJSXNode();
- var token = this.nextJSXToken();
- if (token.type !== 8) {
- this.throwUnexpectedToken(token);
- }
- var raw = this.getTokenRaw(token);
- return this.finalize(node, new Node.Literal(token.value, raw));
- };
- JSXParser2.prototype.parseJSXExpressionAttribute = function() {
- var node = this.createJSXNode();
- this.expectJSX("{");
- this.finishJSX();
- if (this.match("}")) {
- this.tolerateError("JSX attributes must only be assigned a non-empty expression");
- }
- var expression = this.parseAssignmentExpression();
- this.reenterJSX();
- return this.finalize(node, new JSXNode.JSXExpressionContainer(expression));
- };
- JSXParser2.prototype.parseJSXAttributeValue = function() {
- return this.matchJSX("{") ? this.parseJSXExpressionAttribute() : this.matchJSX("<") ? this.parseJSXElement() : this.parseJSXStringLiteralAttribute();
- };
- JSXParser2.prototype.parseJSXNameValueAttribute = function() {
- var node = this.createJSXNode();
- var name = this.parseJSXAttributeName();
- var value = null;
- if (this.matchJSX("=")) {
- this.expectJSX("=");
- value = this.parseJSXAttributeValue();
- }
- return this.finalize(node, new JSXNode.JSXAttribute(name, value));
- };
- JSXParser2.prototype.parseJSXSpreadAttribute = function() {
- var node = this.createJSXNode();
- this.expectJSX("{");
- this.expectJSX("...");
- this.finishJSX();
- var argument = this.parseAssignmentExpression();
- this.reenterJSX();
- return this.finalize(node, new JSXNode.JSXSpreadAttribute(argument));
- };
- JSXParser2.prototype.parseJSXAttributes = function() {
- var attributes = [];
- while (!this.matchJSX("/") && !this.matchJSX(">")) {
- var attribute = this.matchJSX("{") ? this.parseJSXSpreadAttribute() : this.parseJSXNameValueAttribute();
- attributes.push(attribute);
- }
- return attributes;
- };
- JSXParser2.prototype.parseJSXOpeningElement = function() {
- var node = this.createJSXNode();
- this.expectJSX("<");
- var name = this.parseJSXElementName();
- var attributes = this.parseJSXAttributes();
- var selfClosing = this.matchJSX("/");
- if (selfClosing) {
- this.expectJSX("/");
- }
- this.expectJSX(">");
- return this.finalize(node, new JSXNode.JSXOpeningElement(name, selfClosing, attributes));
- };
- JSXParser2.prototype.parseJSXBoundaryElement = function() {
- var node = this.createJSXNode();
- this.expectJSX("<");
- if (this.matchJSX("/")) {
- this.expectJSX("/");
- var name_3 = this.parseJSXElementName();
- this.expectJSX(">");
- return this.finalize(node, new JSXNode.JSXClosingElement(name_3));
- }
- var name = this.parseJSXElementName();
- var attributes = this.parseJSXAttributes();
- var selfClosing = this.matchJSX("/");
- if (selfClosing) {
- this.expectJSX("/");
- }
- this.expectJSX(">");
- return this.finalize(node, new JSXNode.JSXOpeningElement(name, selfClosing, attributes));
- };
- JSXParser2.prototype.parseJSXEmptyExpression = function() {
- var node = this.createJSXChildNode();
- this.collectComments();
- this.lastMarker.index = this.scanner.index;
- this.lastMarker.line = this.scanner.lineNumber;
- this.lastMarker.column = this.scanner.index - this.scanner.lineStart;
- return this.finalize(node, new JSXNode.JSXEmptyExpression());
- };
- JSXParser2.prototype.parseJSXExpressionContainer = function() {
- var node = this.createJSXNode();
- this.expectJSX("{");
- var expression;
- if (this.matchJSX("}")) {
- expression = this.parseJSXEmptyExpression();
- this.expectJSX("}");
- } else {
- this.finishJSX();
- expression = this.parseAssignmentExpression();
- this.reenterJSX();
- }
- return this.finalize(node, new JSXNode.JSXExpressionContainer(expression));
- };
- JSXParser2.prototype.parseJSXChildren = function() {
- var children = [];
- while (!this.scanner.eof()) {
- var node = this.createJSXChildNode();
- var token = this.nextJSXText();
- if (token.start < token.end) {
- var raw = this.getTokenRaw(token);
- var child = this.finalize(node, new JSXNode.JSXText(token.value, raw));
- children.push(child);
- }
- if (this.scanner.source[this.scanner.index] === "{") {
- var container = this.parseJSXExpressionContainer();
- children.push(container);
- } else {
- break;
- }
- }
- return children;
- };
- JSXParser2.prototype.parseComplexJSXElement = function(el) {
- var stack = [];
- while (!this.scanner.eof()) {
- el.children = el.children.concat(this.parseJSXChildren());
- var node = this.createJSXChildNode();
- var element = this.parseJSXBoundaryElement();
- if (element.type === jsx_syntax_1.JSXSyntax.JSXOpeningElement) {
- var opening = element;
- if (opening.selfClosing) {
- var child = this.finalize(node, new JSXNode.JSXElement(opening, [], null));
- el.children.push(child);
- } else {
- stack.push(el);
- el = { node, opening, closing: null, children: [] };
- }
- }
- if (element.type === jsx_syntax_1.JSXSyntax.JSXClosingElement) {
- el.closing = element;
- var open_1 = getQualifiedElementName(el.opening.name);
- var close_1 = getQualifiedElementName(el.closing.name);
- if (open_1 !== close_1) {
- this.tolerateError("Expected corresponding JSX closing tag for %0", open_1);
- }
- if (stack.length > 0) {
- var child = this.finalize(el.node, new JSXNode.JSXElement(el.opening, el.children, el.closing));
- el = stack[stack.length - 1];
- el.children.push(child);
- stack.pop();
- } else {
- break;
- }
- }
- }
- return el;
- };
- JSXParser2.prototype.parseJSXElement = function() {
- var node = this.createJSXNode();
- var opening = this.parseJSXOpeningElement();
- var children = [];
- var closing = null;
- if (!opening.selfClosing) {
- var el = this.parseComplexJSXElement({ node, opening, closing, children });
- children = el.children;
- closing = el.closing;
- }
- return this.finalize(node, new JSXNode.JSXElement(opening, children, closing));
- };
- JSXParser2.prototype.parseJSXRoot = function() {
- if (this.config.tokens) {
- this.tokens.pop();
- }
- this.startJSX();
- var element = this.parseJSXElement();
- this.finishJSX();
- return element;
- };
- JSXParser2.prototype.isStartOfExpression = function() {
- return _super.prototype.isStartOfExpression.call(this) || this.match("<");
- };
- return JSXParser2;
- }(parser_1.Parser);
- exports2.JSXParser = JSXParser;
- },
- /* 4 */
- /***/
- function(module3, exports2) {
- "use strict";
- Object.defineProperty(exports2, "__esModule", { value: true });
- var Regex = {
- // Unicode v8.0.0 NonAsciiIdentifierStart:
- NonAsciiIdentifierStart: /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309B-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]/,
- // Unicode v8.0.0 NonAsciiIdentifierPart:
- NonAsciiIdentifierPart: /[\xAA\xB5\xB7\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B4\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1369-\u1371\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/
- };
- exports2.Character = {
- /* tslint:disable:no-bitwise */
- fromCodePoint: function(cp) {
- return cp < 65536 ? String.fromCharCode(cp) : String.fromCharCode(55296 + (cp - 65536 >> 10)) + String.fromCharCode(56320 + (cp - 65536 & 1023));
- },
- // https://tc39.github.io/ecma262/#sec-white-space
- isWhiteSpace: function(cp) {
- return cp === 32 || cp === 9 || cp === 11 || cp === 12 || cp === 160 || cp >= 5760 && [5760, 8192, 8193, 8194, 8195, 8196, 8197, 8198, 8199, 8200, 8201, 8202, 8239, 8287, 12288, 65279].indexOf(cp) >= 0;
- },
- // https://tc39.github.io/ecma262/#sec-line-terminators
- isLineTerminator: function(cp) {
- return cp === 10 || cp === 13 || cp === 8232 || cp === 8233;
- },
- // https://tc39.github.io/ecma262/#sec-names-and-keywords
- isIdentifierStart: function(cp) {
- return cp === 36 || cp === 95 || cp >= 65 && cp <= 90 || cp >= 97 && cp <= 122 || cp === 92 || cp >= 128 && Regex.NonAsciiIdentifierStart.test(exports2.Character.fromCodePoint(cp));
- },
- isIdentifierPart: function(cp) {
- return cp === 36 || cp === 95 || cp >= 65 && cp <= 90 || cp >= 97 && cp <= 122 || cp >= 48 && cp <= 57 || cp === 92 || cp >= 128 && Regex.NonAsciiIdentifierPart.test(exports2.Character.fromCodePoint(cp));
- },
- // https://tc39.github.io/ecma262/#sec-literals-numeric-literals
- isDecimalDigit: function(cp) {
- return cp >= 48 && cp <= 57;
- },
- isHexDigit: function(cp) {
- return cp >= 48 && cp <= 57 || cp >= 65 && cp <= 70 || cp >= 97 && cp <= 102;
- },
- isOctalDigit: function(cp) {
- return cp >= 48 && cp <= 55;
- }
- };
- },
- /* 5 */
- /***/
- function(module3, exports2, __webpack_require__) {
- "use strict";
- Object.defineProperty(exports2, "__esModule", { value: true });
- var jsx_syntax_1 = __webpack_require__(6);
- var JSXClosingElement = function() {
- function JSXClosingElement2(name) {
- this.type = jsx_syntax_1.JSXSyntax.JSXClosingElement;
- this.name = name;
- }
- return JSXClosingElement2;
- }();
- exports2.JSXClosingElement = JSXClosingElement;
- var JSXElement = function() {
- function JSXElement2(openingElement, children, closingElement) {
- this.type = jsx_syntax_1.JSXSyntax.JSXElement;
- this.openingElement = openingElement;
- this.children = children;
- this.closingElement = closingElement;
- }
- return JSXElement2;
- }();
- exports2.JSXElement = JSXElement;
- var JSXEmptyExpression = function() {
- function JSXEmptyExpression2() {
- this.type = jsx_syntax_1.JSXSyntax.JSXEmptyExpression;
- }
- return JSXEmptyExpression2;
- }();
- exports2.JSXEmptyExpression = JSXEmptyExpression;
- var JSXExpressionContainer = function() {
- function JSXExpressionContainer2(expression) {
- this.type = jsx_syntax_1.JSXSyntax.JSXExpressionContainer;
- this.expression = expression;
- }
- return JSXExpressionContainer2;
- }();
- exports2.JSXExpressionContainer = JSXExpressionContainer;
- var JSXIdentifier = function() {
- function JSXIdentifier2(name) {
- this.type = jsx_syntax_1.JSXSyntax.JSXIdentifier;
- this.name = name;
- }
- return JSXIdentifier2;
- }();
- exports2.JSXIdentifier = JSXIdentifier;
- var JSXMemberExpression = function() {
- function JSXMemberExpression2(object, property) {
- this.type = jsx_syntax_1.JSXSyntax.JSXMemberExpression;
- this.object = object;
- this.property = property;
- }
- return JSXMemberExpression2;
- }();
- exports2.JSXMemberExpression = JSXMemberExpression;
- var JSXAttribute = function() {
- function JSXAttribute2(name, value) {
- this.type = jsx_syntax_1.JSXSyntax.JSXAttribute;
- this.name = name;
- this.value = value;
- }
- return JSXAttribute2;
- }();
- exports2.JSXAttribute = JSXAttribute;
- var JSXNamespacedName = function() {
- function JSXNamespacedName2(namespace, name) {
- this.type = jsx_syntax_1.JSXSyntax.JSXNamespacedName;
- this.namespace = namespace;
- this.name = name;
- }
- return JSXNamespacedName2;
- }();
- exports2.JSXNamespacedName = JSXNamespacedName;
- var JSXOpeningElement = function() {
- function JSXOpeningElement2(name, selfClosing, attributes) {
- this.type = jsx_syntax_1.JSXSyntax.JSXOpeningElement;
- this.name = name;
- this.selfClosing = selfClosing;
- this.attributes = attributes;
- }
- return JSXOpeningElement2;
- }();
- exports2.JSXOpeningElement = JSXOpeningElement;
- var JSXSpreadAttribute = function() {
- function JSXSpreadAttribute2(argument) {
- this.type = jsx_syntax_1.JSXSyntax.JSXSpreadAttribute;
- this.argument = argument;
- }
- return JSXSpreadAttribute2;
- }();
- exports2.JSXSpreadAttribute = JSXSpreadAttribute;
- var JSXText = function() {
- function JSXText2(value, raw) {
- this.type = jsx_syntax_1.JSXSyntax.JSXText;
- this.value = value;
- this.raw = raw;
- }
- return JSXText2;
- }();
- exports2.JSXText = JSXText;
- },
- /* 6 */
- /***/
- function(module3, exports2) {
- "use strict";
- Object.defineProperty(exports2, "__esModule", { value: true });
- exports2.JSXSyntax = {
- JSXAttribute: "JSXAttribute",
- JSXClosingElement: "JSXClosingElement",
- JSXElement: "JSXElement",
- JSXEmptyExpression: "JSXEmptyExpression",
- JSXExpressionContainer: "JSXExpressionContainer",
- JSXIdentifier: "JSXIdentifier",
- JSXMemberExpression: "JSXMemberExpression",
- JSXNamespacedName: "JSXNamespacedName",
- JSXOpeningElement: "JSXOpeningElement",
- JSXSpreadAttribute: "JSXSpreadAttribute",
- JSXText: "JSXText"
- };
- },
- /* 7 */
- /***/
- function(module3, exports2, __webpack_require__) {
- "use strict";
- Object.defineProperty(exports2, "__esModule", { value: true });
- var syntax_1 = __webpack_require__(2);
- var ArrayExpression = function() {
- function ArrayExpression2(elements) {
- this.type = syntax_1.Syntax.ArrayExpression;
- this.elements = elements;
- }
- return ArrayExpression2;
- }();
- exports2.ArrayExpression = ArrayExpression;
- var ArrayPattern = function() {
- function ArrayPattern2(elements) {
- this.type = syntax_1.Syntax.ArrayPattern;
- this.elements = elements;
- }
- return ArrayPattern2;
- }();
- exports2.ArrayPattern = ArrayPattern;
- var ArrowFunctionExpression = function() {
- function ArrowFunctionExpression2(params, body, expression) {
- this.type = syntax_1.Syntax.ArrowFunctionExpression;
- this.id = null;
- this.params = params;
- this.body = body;
- this.generator = false;
- this.expression = expression;
- this.async = false;
- }
- return ArrowFunctionExpression2;
- }();
- exports2.ArrowFunctionExpression = ArrowFunctionExpression;
- var AssignmentExpression = function() {
- function AssignmentExpression2(operator, left, right) {
- this.type = syntax_1.Syntax.AssignmentExpression;
- this.operator = operator;
- this.left = left;
- this.right = right;
- }
- return AssignmentExpression2;
- }();
- exports2.AssignmentExpression = AssignmentExpression;
- var AssignmentPattern = function() {
- function AssignmentPattern2(left, right) {
- this.type = syntax_1.Syntax.AssignmentPattern;
- this.left = left;
- this.right = right;
- }
- return AssignmentPattern2;
- }();
- exports2.AssignmentPattern = AssignmentPattern;
- var AsyncArrowFunctionExpression = function() {
- function AsyncArrowFunctionExpression2(params, body, expression) {
- this.type = syntax_1.Syntax.ArrowFunctionExpression;
- this.id = null;
- this.params = params;
- this.body = body;
- this.generator = false;
- this.expression = expression;
- this.async = true;
- }
- return AsyncArrowFunctionExpression2;
- }();
- exports2.AsyncArrowFunctionExpression = AsyncArrowFunctionExpression;
- var AsyncFunctionDeclaration = function() {
- function AsyncFunctionDeclaration2(id, params, body) {
- this.type = syntax_1.Syntax.FunctionDeclaration;
- this.id = id;
- this.params = params;
- this.body = body;
- this.generator = false;
- this.expression = false;
- this.async = true;
- }
- return AsyncFunctionDeclaration2;
- }();
- exports2.AsyncFunctionDeclaration = AsyncFunctionDeclaration;
- var AsyncFunctionExpression = function() {
- function AsyncFunctionExpression2(id, params, body) {
- this.type = syntax_1.Syntax.FunctionExpression;
- this.id = id;
- this.params = params;
- this.body = body;
- this.generator = false;
- this.expression = false;
- this.async = true;
- }
- return AsyncFunctionExpression2;
- }();
- exports2.AsyncFunctionExpression = AsyncFunctionExpression;
- var AwaitExpression = function() {
- function AwaitExpression2(argument) {
- this.type = syntax_1.Syntax.AwaitExpression;
- this.argument = argument;
- }
- return AwaitExpression2;
- }();
- exports2.AwaitExpression = AwaitExpression;
- var BinaryExpression = function() {
- function BinaryExpression2(operator, left, right) {
- var logical = operator === "||" || operator === "&&";
- this.type = logical ? syntax_1.Syntax.LogicalExpression : syntax_1.Syntax.BinaryExpression;
- this.operator = operator;
- this.left = left;
- this.right = right;
- }
- return BinaryExpression2;
- }();
- exports2.BinaryExpression = BinaryExpression;
- var BlockStatement = function() {
- function BlockStatement2(body) {
- this.type = syntax_1.Syntax.BlockStatement;
- this.body = body;
- }
- return BlockStatement2;
- }();
- exports2.BlockStatement = BlockStatement;
- var BreakStatement = function() {
- function BreakStatement2(label) {
- this.type = syntax_1.Syntax.BreakStatement;
- this.label = label;
- }
- return BreakStatement2;
- }();
- exports2.BreakStatement = BreakStatement;
- var CallExpression = function() {
- function CallExpression2(callee, args) {
- this.type = syntax_1.Syntax.CallExpression;
- this.callee = callee;
- this.arguments = args;
- }
- return CallExpression2;
- }();
- exports2.CallExpression = CallExpression;
- var CatchClause = function() {
- function CatchClause2(param, body) {
- this.type = syntax_1.Syntax.CatchClause;
- this.param = param;
- this.body = body;
- }
- return CatchClause2;
- }();
- exports2.CatchClause = CatchClause;
- var ClassBody = function() {
- function ClassBody2(body) {
- this.type = syntax_1.Syntax.ClassBody;
- this.body = body;
- }
- return ClassBody2;
- }();
- exports2.ClassBody = ClassBody;
- var ClassDeclaration = function() {
- function ClassDeclaration2(id, superClass, body) {
- this.type = syntax_1.Syntax.ClassDeclaration;
- this.id = id;
- this.superClass = superClass;
- this.body = body;
- }
- return ClassDeclaration2;
- }();
- exports2.ClassDeclaration = ClassDeclaration;
- var ClassExpression = function() {
- function ClassExpression2(id, superClass, body) {
- this.type = syntax_1.Syntax.ClassExpression;
- this.id = id;
- this.superClass = superClass;
- this.body = body;
- }
- return ClassExpression2;
- }();
- exports2.ClassExpression = ClassExpression;
- var ComputedMemberExpression = function() {
- function ComputedMemberExpression2(object, property) {
- this.type = syntax_1.Syntax.MemberExpression;
- this.computed = true;
- this.object = object;
- this.property = property;
- }
- return ComputedMemberExpression2;
- }();
- exports2.ComputedMemberExpression = ComputedMemberExpression;
- var ConditionalExpression = function() {
- function ConditionalExpression2(test, consequent, alternate) {
- this.type = syntax_1.Syntax.ConditionalExpression;
- this.test = test;
- this.consequent = consequent;
- this.alternate = alternate;
- }
- return ConditionalExpression2;
- }();
- exports2.ConditionalExpression = ConditionalExpression;
- var ContinueStatement = function() {
- function ContinueStatement2(label) {
- this.type = syntax_1.Syntax.ContinueStatement;
- this.label = label;
- }
- return ContinueStatement2;
- }();
- exports2.ContinueStatement = ContinueStatement;
- var DebuggerStatement = function() {
- function DebuggerStatement2() {
- this.type = syntax_1.Syntax.DebuggerStatement;
- }
- return DebuggerStatement2;
- }();
- exports2.DebuggerStatement = DebuggerStatement;
- var Directive = function() {
- function Directive2(expression, directive) {
- this.type = syntax_1.Syntax.ExpressionStatement;
- this.expression = expression;
- this.directive = directive;
- }
- return Directive2;
- }();
- exports2.Directive = Directive;
- var DoWhileStatement = function() {
- function DoWhileStatement2(body, test) {
- this.type = syntax_1.Syntax.DoWhileStatement;
- this.body = body;
- this.test = test;
- }
- return DoWhileStatement2;
- }();
- exports2.DoWhileStatement = DoWhileStatement;
- var EmptyStatement = function() {
- function EmptyStatement2() {
- this.type = syntax_1.Syntax.EmptyStatement;
- }
- return EmptyStatement2;
- }();
- exports2.EmptyStatement = EmptyStatement;
- var ExportAllDeclaration = function() {
- function ExportAllDeclaration2(source) {
- this.type = syntax_1.Syntax.ExportAllDeclaration;
- this.source = source;
- }
- return ExportAllDeclaration2;
- }();
- exports2.ExportAllDeclaration = ExportAllDeclaration;
- var ExportDefaultDeclaration = function() {
- function ExportDefaultDeclaration2(declaration) {
- this.type = syntax_1.Syntax.ExportDefaultDeclaration;
- this.declaration = declaration;
- }
- return ExportDefaultDeclaration2;
- }();
- exports2.ExportDefaultDeclaration = ExportDefaultDeclaration;
- var ExportNamedDeclaration = function() {
- function ExportNamedDeclaration2(declaration, specifiers, source) {
- this.type = syntax_1.Syntax.ExportNamedDeclaration;
- this.declaration = declaration;
- this.specifiers = specifiers;
- this.source = source;
- }
- return ExportNamedDeclaration2;
- }();
- exports2.ExportNamedDeclaration = ExportNamedDeclaration;
- var ExportSpecifier = function() {
- function ExportSpecifier2(local, exported) {
- this.type = syntax_1.Syntax.ExportSpecifier;
- this.exported = exported;
- this.local = local;
- }
- return ExportSpecifier2;
- }();
- exports2.ExportSpecifier = ExportSpecifier;
- var ExpressionStatement = function() {
- function ExpressionStatement2(expression) {
- this.type = syntax_1.Syntax.ExpressionStatement;
- this.expression = expression;
- }
- return ExpressionStatement2;
- }();
- exports2.ExpressionStatement = ExpressionStatement;
- var ForInStatement = function() {
- function ForInStatement2(left, right, body) {
- this.type = syntax_1.Syntax.ForInStatement;
- this.left = left;
- this.right = right;
- this.body = body;
- this.each = false;
- }
- return ForInStatement2;
- }();
- exports2.ForInStatement = ForInStatement;
- var ForOfStatement = function() {
- function ForOfStatement2(left, right, body) {
- this.type = syntax_1.Syntax.ForOfStatement;
- this.left = left;
- this.right = right;
- this.body = body;
- }
- return ForOfStatement2;
- }();
- exports2.ForOfStatement = ForOfStatement;
- var ForStatement = function() {
- function ForStatement2(init, test, update, body) {
- this.type = syntax_1.Syntax.ForStatement;
- this.init = init;
- this.test = test;
- this.update = update;
- this.body = body;
- }
- return ForStatement2;
- }();
- exports2.ForStatement = ForStatement;
- var FunctionDeclaration = function() {
- function FunctionDeclaration2(id, params, body, generator) {
- this.type = syntax_1.Syntax.FunctionDeclaration;
- this.id = id;
- this.params = params;
- this.body = body;
- this.generator = generator;
- this.expression = false;
- this.async = false;
- }
- return FunctionDeclaration2;
- }();
- exports2.FunctionDeclaration = FunctionDeclaration;
- var FunctionExpression = function() {
- function FunctionExpression2(id, params, body, generator) {
- this.type = syntax_1.Syntax.FunctionExpression;
- this.id = id;
- this.params = params;
- this.body = body;
- this.generator = generator;
- this.expression = false;
- this.async = false;
- }
- return FunctionExpression2;
- }();
- exports2.FunctionExpression = FunctionExpression;
- var Identifier = function() {
- function Identifier2(name) {
- this.type = syntax_1.Syntax.Identifier;
- this.name = name;
- }
- return Identifier2;
- }();
- exports2.Identifier = Identifier;
- var IfStatement = function() {
- function IfStatement2(test, consequent, alternate) {
- this.type = syntax_1.Syntax.IfStatement;
- this.test = test;
- this.consequent = consequent;
- this.alternate = alternate;
- }
- return IfStatement2;
- }();
- exports2.IfStatement = IfStatement;
- var ImportDeclaration = function() {
- function ImportDeclaration2(specifiers, source) {
- this.type = syntax_1.Syntax.ImportDeclaration;
- this.specifiers = specifiers;
- this.source = source;
- }
- return ImportDeclaration2;
- }();
- exports2.ImportDeclaration = ImportDeclaration;
- var ImportDefaultSpecifier = function() {
- function ImportDefaultSpecifier2(local) {
- this.type = syntax_1.Syntax.ImportDefaultSpecifier;
- this.local = local;
- }
- return ImportDefaultSpecifier2;
- }();
- exports2.ImportDefaultSpecifier = ImportDefaultSpecifier;
- var ImportNamespaceSpecifier = function() {
- function ImportNamespaceSpecifier2(local) {
- this.type = syntax_1.Syntax.ImportNamespaceSpecifier;
- this.local = local;
- }
- return ImportNamespaceSpecifier2;
- }();
- exports2.ImportNamespaceSpecifier = ImportNamespaceSpecifier;
- var ImportSpecifier = function() {
- function ImportSpecifier2(local, imported) {
- this.type = syntax_1.Syntax.ImportSpecifier;
- this.local = local;
- this.imported = imported;
- }
- return ImportSpecifier2;
- }();
- exports2.ImportSpecifier = ImportSpecifier;
- var LabeledStatement = function() {
- function LabeledStatement2(label, body) {
- this.type = syntax_1.Syntax.LabeledStatement;
- this.label = label;
- this.body = body;
- }
- return LabeledStatement2;
- }();
- exports2.LabeledStatement = LabeledStatement;
- var Literal = function() {
- function Literal2(value, raw) {
- this.type = syntax_1.Syntax.Literal;
- this.value = value;
- this.raw = raw;
- }
- return Literal2;
- }();
- exports2.Literal = Literal;
- var MetaProperty = function() {
- function MetaProperty2(meta, property) {
- this.type = syntax_1.Syntax.MetaProperty;
- this.meta = meta;
- this.property = property;
- }
- return MetaProperty2;
- }();
- exports2.MetaProperty = MetaProperty;
- var MethodDefinition = function() {
- function MethodDefinition2(key, computed, value, kind, isStatic) {
- this.type = syntax_1.Syntax.MethodDefinition;
- this.key = key;
- this.computed = computed;
- this.value = value;
- this.kind = kind;
- this.static = isStatic;
- }
- return MethodDefinition2;
- }();
- exports2.MethodDefinition = MethodDefinition;
- var Module2 = function() {
- function Module3(body) {
- this.type = syntax_1.Syntax.Program;
- this.body = body;
- this.sourceType = "module";
- }
- return Module3;
- }();
- exports2.Module = Module2;
- var NewExpression = function() {
- function NewExpression2(callee, args) {
- this.type = syntax_1.Syntax.NewExpression;
- this.callee = callee;
- this.arguments = args;
- }
- return NewExpression2;
- }();
- exports2.NewExpression = NewExpression;
- var ObjectExpression = function() {
- function ObjectExpression2(properties) {
- this.type = syntax_1.Syntax.ObjectExpression;
- this.properties = properties;
- }
- return ObjectExpression2;
- }();
- exports2.ObjectExpression = ObjectExpression;
- var ObjectPattern = function() {
- function ObjectPattern2(properties) {
- this.type = syntax_1.Syntax.ObjectPattern;
- this.properties = properties;
- }
- return ObjectPattern2;
- }();
- exports2.ObjectPattern = ObjectPattern;
- var Property = function() {
- function Property2(kind, key, computed, value, method, shorthand) {
- this.type = syntax_1.Syntax.Property;
- this.key = key;
- this.computed = computed;
- this.value = value;
- this.kind = kind;
- this.method = method;
- this.shorthand = shorthand;
- }
- return Property2;
- }();
- exports2.Property = Property;
- var RegexLiteral = function() {
- function RegexLiteral2(value, raw, pattern, flags) {
- this.type = syntax_1.Syntax.Literal;
- this.value = value;
- this.raw = raw;
- this.regex = { pattern, flags };
- }
- return RegexLiteral2;
- }();
- exports2.RegexLiteral = RegexLiteral;
- var RestElement = function() {
- function RestElement2(argument) {
- this.type = syntax_1.Syntax.RestElement;
- this.argument = argument;
- }
- return RestElement2;
- }();
- exports2.RestElement = RestElement;
- var ReturnStatement = function() {
- function ReturnStatement2(argument) {
- this.type = syntax_1.Syntax.ReturnStatement;
- this.argument = argument;
- }
- return ReturnStatement2;
- }();
- exports2.ReturnStatement = ReturnStatement;
- var Script = function() {
- function Script2(body) {
- this.type = syntax_1.Syntax.Program;
- this.body = body;
- this.sourceType = "script";
- }
- return Script2;
- }();
- exports2.Script = Script;
- var SequenceExpression = function() {
- function SequenceExpression2(expressions) {
- this.type = syntax_1.Syntax.SequenceExpression;
- this.expressions = expressions;
- }
- return SequenceExpression2;
- }();
- exports2.SequenceExpression = SequenceExpression;
- var SpreadElement = function() {
- function SpreadElement2(argument) {
- this.type = syntax_1.Syntax.SpreadElement;
- this.argument = argument;
- }
- return SpreadElement2;
- }();
- exports2.SpreadElement = SpreadElement;
- var StaticMemberExpression = function() {
- function StaticMemberExpression2(object, property) {
- this.type = syntax_1.Syntax.MemberExpression;
- this.computed = false;
- this.object = object;
- this.property = property;
- }
- return StaticMemberExpression2;
- }();
- exports2.StaticMemberExpression = StaticMemberExpression;
- var Super = function() {
- function Super2() {
- this.type = syntax_1.Syntax.Super;
- }
- return Super2;
- }();
- exports2.Super = Super;
- var SwitchCase = function() {
- function SwitchCase2(test, consequent) {
- this.type = syntax_1.Syntax.SwitchCase;
- this.test = test;
- this.consequent = consequent;
- }
- return SwitchCase2;
- }();
- exports2.SwitchCase = SwitchCase;
- var SwitchStatement = function() {
- function SwitchStatement2(discriminant, cases) {
- this.type = syntax_1.Syntax.SwitchStatement;
- this.discriminant = discriminant;
- this.cases = cases;
- }
- return SwitchStatement2;
- }();
- exports2.SwitchStatement = SwitchStatement;
- var TaggedTemplateExpression = function() {
- function TaggedTemplateExpression2(tag, quasi) {
- this.type = syntax_1.Syntax.TaggedTemplateExpression;
- this.tag = tag;
- this.quasi = quasi;
- }
- return TaggedTemplateExpression2;
- }();
- exports2.TaggedTemplateExpression = TaggedTemplateExpression;
- var TemplateElement = function() {
- function TemplateElement2(value, tail) {
- this.type = syntax_1.Syntax.TemplateElement;
- this.value = value;
- this.tail = tail;
- }
- return TemplateElement2;
- }();
- exports2.TemplateElement = TemplateElement;
- var TemplateLiteral = function() {
- function TemplateLiteral2(quasis, expressions) {
- this.type = syntax_1.Syntax.TemplateLiteral;
- this.quasis = quasis;
- this.expressions = expressions;
- }
- return TemplateLiteral2;
- }();
- exports2.TemplateLiteral = TemplateLiteral;
- var ThisExpression = function() {
- function ThisExpression2() {
- this.type = syntax_1.Syntax.ThisExpression;
- }
- return ThisExpression2;
- }();
- exports2.ThisExpression = ThisExpression;
- var ThrowStatement = function() {
- function ThrowStatement2(argument) {
- this.type = syntax_1.Syntax.ThrowStatement;
- this.argument = argument;
- }
- return ThrowStatement2;
- }();
- exports2.ThrowStatement = ThrowStatement;
- var TryStatement = function() {
- function TryStatement2(block, handler, finalizer) {
- this.type = syntax_1.Syntax.TryStatement;
- this.block = block;
- this.handler = handler;
- this.finalizer = finalizer;
- }
- return TryStatement2;
- }();
- exports2.TryStatement = TryStatement;
- var UnaryExpression = function() {
- function UnaryExpression2(operator, argument) {
- this.type = syntax_1.Syntax.UnaryExpression;
- this.operator = operator;
- this.argument = argument;
- this.prefix = true;
- }
- return UnaryExpression2;
- }();
- exports2.UnaryExpression = UnaryExpression;
- var UpdateExpression = function() {
- function UpdateExpression2(operator, argument, prefix) {
- this.type = syntax_1.Syntax.UpdateExpression;
- this.operator = operator;
- this.argument = argument;
- this.prefix = prefix;
- }
- return UpdateExpression2;
- }();
- exports2.UpdateExpression = UpdateExpression;
- var VariableDeclaration = function() {
- function VariableDeclaration2(declarations, kind) {
- this.type = syntax_1.Syntax.VariableDeclaration;
- this.declarations = declarations;
- this.kind = kind;
- }
- return VariableDeclaration2;
- }();
- exports2.VariableDeclaration = VariableDeclaration;
- var VariableDeclarator = function() {
- function VariableDeclarator2(id, init) {
- this.type = syntax_1.Syntax.VariableDeclarator;
- this.id = id;
- this.init = init;
- }
- return VariableDeclarator2;
- }();
- exports2.VariableDeclarator = VariableDeclarator;
- var WhileStatement = function() {
- function WhileStatement2(test, body) {
- this.type = syntax_1.Syntax.WhileStatement;
- this.test = test;
- this.body = body;
- }
- return WhileStatement2;
- }();
- exports2.WhileStatement = WhileStatement;
- var WithStatement = function() {
- function WithStatement2(object, body) {
- this.type = syntax_1.Syntax.WithStatement;
- this.object = object;
- this.body = body;
- }
- return WithStatement2;
- }();
- exports2.WithStatement = WithStatement;
- var YieldExpression = function() {
- function YieldExpression2(argument, delegate) {
- this.type = syntax_1.Syntax.YieldExpression;
- this.argument = argument;
- this.delegate = delegate;
- }
- return YieldExpression2;
- }();
- exports2.YieldExpression = YieldExpression;
- },
- /* 8 */
- /***/
- function(module3, exports2, __webpack_require__) {
- "use strict";
- Object.defineProperty(exports2, "__esModule", { value: true });
- var assert_1 = __webpack_require__(9);
- var error_handler_1 = __webpack_require__(10);
- var messages_1 = __webpack_require__(11);
- var Node = __webpack_require__(7);
- var scanner_1 = __webpack_require__(12);
- var syntax_1 = __webpack_require__(2);
- var token_1 = __webpack_require__(13);
- var ArrowParameterPlaceHolder = "ArrowParameterPlaceHolder";
- var Parser = function() {
- function Parser2(code, options, delegate) {
- if (options === void 0) {
- options = {};
- }
- this.config = {
- range: typeof options.range === "boolean" && options.range,
- loc: typeof options.loc === "boolean" && options.loc,
- source: null,
- tokens: typeof options.tokens === "boolean" && options.tokens,
- comment: typeof options.comment === "boolean" && options.comment,
- tolerant: typeof options.tolerant === "boolean" && options.tolerant
- };
- if (this.config.loc && options.source && options.source !== null) {
- this.config.source = String(options.source);
- }
- this.delegate = delegate;
- this.errorHandler = new error_handler_1.ErrorHandler();
- this.errorHandler.tolerant = this.config.tolerant;
- this.scanner = new scanner_1.Scanner(code, this.errorHandler);
- this.scanner.trackComment = this.config.comment;
- this.operatorPrecedence = {
- ")": 0,
- ";": 0,
- ",": 0,
- "=": 0,
- "]": 0,
- "||": 1,
- "&&": 2,
- "|": 3,
- "^": 4,
- "&": 5,
- "==": 6,
- "!=": 6,
- "===": 6,
- "!==": 6,
- "<": 7,
- ">": 7,
- "<=": 7,
- ">=": 7,
- "<<": 8,
- ">>": 8,
- ">>>": 8,
- "+": 9,
- "-": 9,
- "*": 11,
- "/": 11,
- "%": 11
- };
- this.lookahead = {
- type: 2,
- value: "",
- lineNumber: this.scanner.lineNumber,
- lineStart: 0,
- start: 0,
- end: 0
- };
- this.hasLineTerminator = false;
- this.context = {
- isModule: false,
- await: false,
- allowIn: true,
- allowStrictDirective: true,
- allowYield: true,
- firstCoverInitializedNameError: null,
- isAssignmentTarget: false,
- isBindingElement: false,
- inFunctionBody: false,
- inIteration: false,
- inSwitch: false,
- labelSet: {},
- strict: false
- };
- this.tokens = [];
- this.startMarker = {
- index: 0,
- line: this.scanner.lineNumber,
- column: 0
- };
- this.lastMarker = {
- index: 0,
- line: this.scanner.lineNumber,
- column: 0
- };
- this.nextToken();
- this.lastMarker = {
- index: this.scanner.index,
- line: this.scanner.lineNumber,
- column: this.scanner.index - this.scanner.lineStart
- };
- }
- Parser2.prototype.throwError = function(messageFormat) {
- var values = [];
- for (var _i = 1; _i < arguments.length; _i++) {
- values[_i - 1] = arguments[_i];
- }
- var args = Array.prototype.slice.call(arguments, 1);
- var msg = messageFormat.replace(/%(\d)/g, function(whole, idx) {
- assert_1.assert(idx < args.length, "Message reference must be in range");
- return args[idx];
- });
- var index = this.lastMarker.index;
- var line = this.lastMarker.line;
- var column = this.lastMarker.column + 1;
- throw this.errorHandler.createError(index, line, column, msg);
- };
- Parser2.prototype.tolerateError = function(messageFormat) {
- var values = [];
- for (var _i = 1; _i < arguments.length; _i++) {
- values[_i - 1] = arguments[_i];
- }
- var args = Array.prototype.slice.call(arguments, 1);
- var msg = messageFormat.replace(/%(\d)/g, function(whole, idx) {
- assert_1.assert(idx < args.length, "Message reference must be in range");
- return args[idx];
- });
- var index = this.lastMarker.index;
- var line = this.scanner.lineNumber;
- var column = this.lastMarker.column + 1;
- this.errorHandler.tolerateError(index, line, column, msg);
- };
- Parser2.prototype.unexpectedTokenError = function(token, message) {
- var msg = message || messages_1.Messages.UnexpectedToken;
- var value;
- if (token) {
- if (!message) {
- msg = token.type === 2 ? messages_1.Messages.UnexpectedEOS : token.type === 3 ? messages_1.Messages.UnexpectedIdentifier : token.type === 6 ? messages_1.Messages.UnexpectedNumber : token.type === 8 ? messages_1.Messages.UnexpectedString : token.type === 10 ? messages_1.Messages.UnexpectedTemplate : messages_1.Messages.UnexpectedToken;
- if (token.type === 4) {
- if (this.scanner.isFutureReservedWord(token.value)) {
- msg = messages_1.Messages.UnexpectedReserved;
- } else if (this.context.strict && this.scanner.isStrictModeReservedWord(token.value)) {
- msg = messages_1.Messages.StrictReservedWord;
- }
- }
- }
- value = token.value;
- } else {
- value = "ILLEGAL";
- }
- msg = msg.replace("%0", value);
- if (token && typeof token.lineNumber === "number") {
- var index = token.start;
- var line = token.lineNumber;
- var lastMarkerLineStart = this.lastMarker.index - this.lastMarker.column;
- var column = token.start - lastMarkerLineStart + 1;
- return this.errorHandler.createError(index, line, column, msg);
- } else {
- var index = this.lastMarker.index;
- var line = this.lastMarker.line;
- var column = this.lastMarker.column + 1;
- return this.errorHandler.createError(index, line, column, msg);
- }
- };
- Parser2.prototype.throwUnexpectedToken = function(token, message) {
- throw this.unexpectedTokenError(token, message);
- };
- Parser2.prototype.tolerateUnexpectedToken = function(token, message) {
- this.errorHandler.tolerate(this.unexpectedTokenError(token, message));
- };
- Parser2.prototype.collectComments = function() {
- if (!this.config.comment) {
- this.scanner.scanComments();
- } else {
- var comments = this.scanner.scanComments();
- if (comments.length > 0 && this.delegate) {
- for (var i = 0; i < comments.length; ++i) {
- var e = comments[i];
- var node = void 0;
- node = {
- type: e.multiLine ? "BlockComment" : "LineComment",
- value: this.scanner.source.slice(e.slice[0], e.slice[1])
- };
- if (this.config.range) {
- node.range = e.range;
- }
- if (this.config.loc) {
- node.loc = e.loc;
- }
- var metadata = {
- start: {
- line: e.loc.start.line,
- column: e.loc.start.column,
- offset: e.range[0]
- },
- end: {
- line: e.loc.end.line,
- column: e.loc.end.column,
- offset: e.range[1]
- }
- };
- this.delegate(node, metadata);
- }
- }
- }
- };
- Parser2.prototype.getTokenRaw = function(token) {
- return this.scanner.source.slice(token.start, token.end);
- };
- Parser2.prototype.convertToken = function(token) {
- var t = {
- type: token_1.TokenName[token.type],
- value: this.getTokenRaw(token)
- };
- if (this.config.range) {
- t.range = [token.start, token.end];
- }
- if (this.config.loc) {
- t.loc = {
- start: {
- line: this.startMarker.line,
- column: this.startMarker.column
- },
- end: {
- line: this.scanner.lineNumber,
- column: this.scanner.index - this.scanner.lineStart
- }
- };
- }
- if (token.type === 9) {
- var pattern = token.pattern;
- var flags = token.flags;
- t.regex = { pattern, flags };
- }
- return t;
- };
- Parser2.prototype.nextToken = function() {
- var token = this.lookahead;
- this.lastMarker.index = this.scanner.index;
- this.lastMarker.line = this.scanner.lineNumber;
- this.lastMarker.column = this.scanner.index - this.scanner.lineStart;
- this.collectComments();
- if (this.scanner.index !== this.startMarker.index) {
- this.startMarker.index = this.scanner.index;
- this.startMarker.line = this.scanner.lineNumber;
- this.startMarker.column = this.scanner.index - this.scanner.lineStart;
- }
- var next = this.scanner.lex();
- this.hasLineTerminator = token.lineNumber !== next.lineNumber;
- if (next && this.context.strict && next.type === 3) {
- if (this.scanner.isStrictModeReservedWord(next.value)) {
- next.type = 4;
- }
- }
- this.lookahead = next;
- if (this.config.tokens && next.type !== 2) {
- this.tokens.push(this.convertToken(next));
- }
- return token;
- };
- Parser2.prototype.nextRegexToken = function() {
- this.collectComments();
- var token = this.scanner.scanRegExp();
- if (this.config.tokens) {
- this.tokens.pop();
- this.tokens.push(this.convertToken(token));
- }
- this.lookahead = token;
- this.nextToken();
- return token;
- };
- Parser2.prototype.createNode = function() {
- return {
- index: this.startMarker.index,
- line: this.startMarker.line,
- column: this.startMarker.column
- };
- };
- Parser2.prototype.startNode = function(token, lastLineStart) {
- if (lastLineStart === void 0) {
- lastLineStart = 0;
- }
- var column = token.start - token.lineStart;
- var line = token.lineNumber;
- if (column < 0) {
- column += lastLineStart;
- line--;
- }
- return {
- index: token.start,
- line,
- column
- };
- };
- Parser2.prototype.finalize = function(marker, node) {
- if (this.config.range) {
- node.range = [marker.index, this.lastMarker.index];
- }
- if (this.config.loc) {
- node.loc = {
- start: {
- line: marker.line,
- column: marker.column
- },
- end: {
- line: this.lastMarker.line,
- column: this.lastMarker.column
- }
- };
- if (this.config.source) {
- node.loc.source = this.config.source;
- }
- }
- if (this.delegate) {
- var metadata = {
- start: {
- line: marker.line,
- column: marker.column,
- offset: marker.index
- },
- end: {
- line: this.lastMarker.line,
- column: this.lastMarker.column,
- offset: this.lastMarker.index
- }
- };
- this.delegate(node, metadata);
- }
- return node;
- };
- Parser2.prototype.expect = function(value) {
- var token = this.nextToken();
- if (token.type !== 7 || token.value !== value) {
- this.throwUnexpectedToken(token);
- }
- };
- Parser2.prototype.expectCommaSeparator = function() {
- if (this.config.tolerant) {
- var token = this.lookahead;
- if (token.type === 7 && token.value === ",") {
- this.nextToken();
- } else if (token.type === 7 && token.value === ";") {
- this.nextToken();
- this.tolerateUnexpectedToken(token);
- } else {
- this.tolerateUnexpectedToken(token, messages_1.Messages.UnexpectedToken);
- }
- } else {
- this.expect(",");
- }
- };
- Parser2.prototype.expectKeyword = function(keyword) {
- var token = this.nextToken();
- if (token.type !== 4 || token.value !== keyword) {
- this.throwUnexpectedToken(token);
- }
- };
- Parser2.prototype.match = function(value) {
- return this.lookahead.type === 7 && this.lookahead.value === value;
- };
- Parser2.prototype.matchKeyword = function(keyword) {
- return this.lookahead.type === 4 && this.lookahead.value === keyword;
- };
- Parser2.prototype.matchContextualKeyword = function(keyword) {
- return this.lookahead.type === 3 && this.lookahead.value === keyword;
- };
- Parser2.prototype.matchAssign = function() {
- if (this.lookahead.type !== 7) {
- return false;
- }
- var op = this.lookahead.value;
- return op === "=" || op === "*=" || op === "**=" || op === "/=" || op === "%=" || op === "+=" || op === "-=" || op === "<<=" || op === ">>=" || op === ">>>=" || op === "&=" || op === "^=" || op === "|=";
- };
- Parser2.prototype.isolateCoverGrammar = function(parseFunction) {
- var previousIsBindingElement = this.context.isBindingElement;
- var previousIsAssignmentTarget = this.context.isAssignmentTarget;
- var previousFirstCoverInitializedNameError = this.context.firstCoverInitializedNameError;
- this.context.isBindingElement = true;
- this.context.isAssignmentTarget = true;
- this.context.firstCoverInitializedNameError = null;
- var result = parseFunction.call(this);
- if (this.context.firstCoverInitializedNameError !== null) {
- this.throwUnexpectedToken(this.context.firstCoverInitializedNameError);
- }
- this.context.isBindingElement = previousIsBindingElement;
- this.context.isAssignmentTarget = previousIsAssignmentTarget;
- this.context.firstCoverInitializedNameError = previousFirstCoverInitializedNameError;
- return result;
- };
- Parser2.prototype.inheritCoverGrammar = function(parseFunction) {
- var previousIsBindingElement = this.context.isBindingElement;
- var previousIsAssignmentTarget = this.context.isAssignmentTarget;
- var previousFirstCoverInitializedNameError = this.context.firstCoverInitializedNameError;
- this.context.isBindingElement = true;
- this.context.isAssignmentTarget = true;
- this.context.firstCoverInitializedNameError = null;
- var result = parseFunction.call(this);
- this.context.isBindingElement = this.context.isBindingElement && previousIsBindingElement;
- this.context.isAssignmentTarget = this.context.isAssignmentTarget && previousIsAssignmentTarget;
- this.context.firstCoverInitializedNameError = previousFirstCoverInitializedNameError || this.context.firstCoverInitializedNameError;
- return result;
- };
- Parser2.prototype.consumeSemicolon = function() {
- if (this.match(";")) {
- this.nextToken();
- } else if (!this.hasLineTerminator) {
- if (this.lookahead.type !== 2 && !this.match("}")) {
- this.throwUnexpectedToken(this.lookahead);
- }
- this.lastMarker.index = this.startMarker.index;
- this.lastMarker.line = this.startMarker.line;
- this.lastMarker.column = this.startMarker.column;
- }
- };
- Parser2.prototype.parsePrimaryExpression = function() {
- var node = this.createNode();
- var expr;
- var token, raw;
- switch (this.lookahead.type) {
- case 3:
- if ((this.context.isModule || this.context.await) && this.lookahead.value === "await") {
- this.tolerateUnexpectedToken(this.lookahead);
- }
- expr = this.matchAsyncFunction() ? this.parseFunctionExpression() : this.finalize(node, new Node.Identifier(this.nextToken().value));
- break;
- case 6:
- case 8:
- if (this.context.strict && this.lookahead.octal) {
- this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.StrictOctalLiteral);
- }
- this.context.isAssignmentTarget = false;
- this.context.isBindingElement = false;
- token = this.nextToken();
- raw = this.getTokenRaw(token);
- expr = this.finalize(node, new Node.Literal(token.value, raw));
- break;
- case 1:
- this.context.isAssignmentTarget = false;
- this.context.isBindingElement = false;
- token = this.nextToken();
- raw = this.getTokenRaw(token);
- expr = this.finalize(node, new Node.Literal(token.value === "true", raw));
- break;
- case 5:
- this.context.isAssignmentTarget = false;
- this.context.isBindingElement = false;
- token = this.nextToken();
- raw = this.getTokenRaw(token);
- expr = this.finalize(node, new Node.Literal(null, raw));
- break;
- case 10:
- expr = this.parseTemplateLiteral();
- break;
- case 7:
- switch (this.lookahead.value) {
- case "(":
- this.context.isBindingElement = false;
- expr = this.inheritCoverGrammar(this.parseGroupExpression);
- break;
- case "[":
- expr = this.inheritCoverGrammar(this.parseArrayInitializer);
- break;
- case "{":
- expr = this.inheritCoverGrammar(this.parseObjectInitializer);
- break;
- case "/":
- case "/=":
- this.context.isAssignmentTarget = false;
- this.context.isBindingElement = false;
- this.scanner.index = this.startMarker.index;
- token = this.nextRegexToken();
- raw = this.getTokenRaw(token);
- expr = this.finalize(node, new Node.RegexLiteral(token.regex, raw, token.pattern, token.flags));
- break;
- default:
- expr = this.throwUnexpectedToken(this.nextToken());
- }
- break;
- case 4:
- if (!this.context.strict && this.context.allowYield && this.matchKeyword("yield")) {
- expr = this.parseIdentifierName();
- } else if (!this.context.strict && this.matchKeyword("let")) {
- expr = this.finalize(node, new Node.Identifier(this.nextToken().value));
- } else {
- this.context.isAssignmentTarget = false;
- this.context.isBindingElement = false;
- if (this.matchKeyword("function")) {
- expr = this.parseFunctionExpression();
- } else if (this.matchKeyword("this")) {
- this.nextToken();
- expr = this.finalize(node, new Node.ThisExpression());
- } else if (this.matchKeyword("class")) {
- expr = this.parseClassExpression();
- } else {
- expr = this.throwUnexpectedToken(this.nextToken());
- }
- }
- break;
- default:
- expr = this.throwUnexpectedToken(this.nextToken());
- }
- return expr;
- };
- Parser2.prototype.parseSpreadElement = function() {
- var node = this.createNode();
- this.expect("...");
- var arg = this.inheritCoverGrammar(this.parseAssignmentExpression);
- return this.finalize(node, new Node.SpreadElement(arg));
- };
- Parser2.prototype.parseArrayInitializer = function() {
- var node = this.createNode();
- var elements = [];
- this.expect("[");
- while (!this.match("]")) {
- if (this.match(",")) {
- this.nextToken();
- elements.push(null);
- } else if (this.match("...")) {
- var element = this.parseSpreadElement();
- if (!this.match("]")) {
- this.context.isAssignmentTarget = false;
- this.context.isBindingElement = false;
- this.expect(",");
- }
- elements.push(element);
- } else {
- elements.push(this.inheritCoverGrammar(this.parseAssignmentExpression));
- if (!this.match("]")) {
- this.expect(",");
- }
- }
- }
- this.expect("]");
- return this.finalize(node, new Node.ArrayExpression(elements));
- };
- Parser2.prototype.parsePropertyMethod = function(params) {
- this.context.isAssignmentTarget = false;
- this.context.isBindingElement = false;
- var previousStrict = this.context.strict;
- var previousAllowStrictDirective = this.context.allowStrictDirective;
- this.context.allowStrictDirective = params.simple;
- var body = this.isolateCoverGrammar(this.parseFunctionSourceElements);
- if (this.context.strict && params.firstRestricted) {
- this.tolerateUnexpectedToken(params.firstRestricted, params.message);
- }
- if (this.context.strict && params.stricted) {
- this.tolerateUnexpectedToken(params.stricted, params.message);
- }
- this.context.strict = previousStrict;
- this.context.allowStrictDirective = previousAllowStrictDirective;
- return body;
- };
- Parser2.prototype.parsePropertyMethodFunction = function() {
- var isGenerator = false;
- var node = this.createNode();
- var previousAllowYield = this.context.allowYield;
- this.context.allowYield = true;
- var params = this.parseFormalParameters();
- var method = this.parsePropertyMethod(params);
- this.context.allowYield = previousAllowYield;
- return this.finalize(node, new Node.FunctionExpression(null, params.params, method, isGenerator));
- };
- Parser2.prototype.parsePropertyMethodAsyncFunction = function() {
- var node = this.createNode();
- var previousAllowYield = this.context.allowYield;
- var previousAwait = this.context.await;
- this.context.allowYield = false;
- this.context.await = true;
- var params = this.parseFormalParameters();
- var method = this.parsePropertyMethod(params);
- this.context.allowYield = previousAllowYield;
- this.context.await = previousAwait;
- return this.finalize(node, new Node.AsyncFunctionExpression(null, params.params, method));
- };
- Parser2.prototype.parseObjectPropertyKey = function() {
- var node = this.createNode();
- var token = this.nextToken();
- var key;
- switch (token.type) {
- case 8:
- case 6:
- if (this.context.strict && token.octal) {
- this.tolerateUnexpectedToken(token, messages_1.Messages.StrictOctalLiteral);
- }
- var raw = this.getTokenRaw(token);
- key = this.finalize(node, new Node.Literal(token.value, raw));
- break;
- case 3:
- case 1:
- case 5:
- case 4:
- key = this.finalize(node, new Node.Identifier(token.value));
- break;
- case 7:
- if (token.value === "[") {
- key = this.isolateCoverGrammar(this.parseAssignmentExpression);
- this.expect("]");
- } else {
- key = this.throwUnexpectedToken(token);
- }
- break;
- default:
- key = this.throwUnexpectedToken(token);
- }
- return key;
- };
- Parser2.prototype.isPropertyKey = function(key, value) {
- return key.type === syntax_1.Syntax.Identifier && key.name === value || key.type === syntax_1.Syntax.Literal && key.value === value;
- };
- Parser2.prototype.parseObjectProperty = function(hasProto) {
- var node = this.createNode();
- var token = this.lookahead;
- var kind;
- var key = null;
- var value = null;
- var computed = false;
- var method = false;
- var shorthand = false;
- var isAsync = false;
- if (token.type === 3) {
- var id = token.value;
- this.nextToken();
- computed = this.match("[");
- isAsync = !this.hasLineTerminator && id === "async" && !this.match(":") && !this.match("(") && !this.match("*") && !this.match(",");
- key = isAsync ? this.parseObjectPropertyKey() : this.finalize(node, new Node.Identifier(id));
- } else if (this.match("*")) {
- this.nextToken();
- } else {
- computed = this.match("[");
- key = this.parseObjectPropertyKey();
- }
- var lookaheadPropertyKey = this.qualifiedPropertyName(this.lookahead);
- if (token.type === 3 && !isAsync && token.value === "get" && lookaheadPropertyKey) {
- kind = "get";
- computed = this.match("[");
- key = this.parseObjectPropertyKey();
- this.context.allowYield = false;
- value = this.parseGetterMethod();
- } else if (token.type === 3 && !isAsync && token.value === "set" && lookaheadPropertyKey) {
- kind = "set";
- computed = this.match("[");
- key = this.parseObjectPropertyKey();
- value = this.parseSetterMethod();
- } else if (token.type === 7 && token.value === "*" && lookaheadPropertyKey) {
- kind = "init";
- computed = this.match("[");
- key = this.parseObjectPropertyKey();
- value = this.parseGeneratorMethod();
- method = true;
- } else {
- if (!key) {
- this.throwUnexpectedToken(this.lookahead);
- }
- kind = "init";
- if (this.match(":") && !isAsync) {
- if (!computed && this.isPropertyKey(key, "__proto__")) {
- if (hasProto.value) {
- this.tolerateError(messages_1.Messages.DuplicateProtoProperty);
- }
- hasProto.value = true;
- }
- this.nextToken();
- value = this.inheritCoverGrammar(this.parseAssignmentExpression);
- } else if (this.match("(")) {
- value = isAsync ? this.parsePropertyMethodAsyncFunction() : this.parsePropertyMethodFunction();
- method = true;
- } else if (token.type === 3) {
- var id = this.finalize(node, new Node.Identifier(token.value));
- if (this.match("=")) {
- this.context.firstCoverInitializedNameError = this.lookahead;
- this.nextToken();
- shorthand = true;
- var init = this.isolateCoverGrammar(this.parseAssignmentExpression);
- value = this.finalize(node, new Node.AssignmentPattern(id, init));
- } else {
- shorthand = true;
- value = id;
- }
- } else {
- this.throwUnexpectedToken(this.nextToken());
- }
- }
- return this.finalize(node, new Node.Property(kind, key, computed, value, method, shorthand));
- };
- Parser2.prototype.parseObjectInitializer = function() {
- var node = this.createNode();
- this.expect("{");
- var properties = [];
- var hasProto = { value: false };
- while (!this.match("}")) {
- properties.push(this.parseObjectProperty(hasProto));
- if (!this.match("}")) {
- this.expectCommaSeparator();
- }
- }
- this.expect("}");
- return this.finalize(node, new Node.ObjectExpression(properties));
- };
- Parser2.prototype.parseTemplateHead = function() {
- assert_1.assert(this.lookahead.head, "Template literal must start with a template head");
- var node = this.createNode();
- var token = this.nextToken();
- var raw = token.value;
- var cooked = token.cooked;
- return this.finalize(node, new Node.TemplateElement({ raw, cooked }, token.tail));
- };
- Parser2.prototype.parseTemplateElement = function() {
- if (this.lookahead.type !== 10) {
- this.throwUnexpectedToken();
- }
- var node = this.createNode();
- var token = this.nextToken();
- var raw = token.value;
- var cooked = token.cooked;
- return this.finalize(node, new Node.TemplateElement({ raw, cooked }, token.tail));
- };
- Parser2.prototype.parseTemplateLiteral = function() {
- var node = this.createNode();
- var expressions = [];
- var quasis = [];
- var quasi = this.parseTemplateHead();
- quasis.push(quasi);
- while (!quasi.tail) {
- expressions.push(this.parseExpression());
- quasi = this.parseTemplateElement();
- quasis.push(quasi);
- }
- return this.finalize(node, new Node.TemplateLiteral(quasis, expressions));
- };
- Parser2.prototype.reinterpretExpressionAsPattern = function(expr) {
- switch (expr.type) {
- case syntax_1.Syntax.Identifier:
- case syntax_1.Syntax.MemberExpression:
- case syntax_1.Syntax.RestElement:
- case syntax_1.Syntax.AssignmentPattern:
- break;
- case syntax_1.Syntax.SpreadElement:
- expr.type = syntax_1.Syntax.RestElement;
- this.reinterpretExpressionAsPattern(expr.argument);
- break;
- case syntax_1.Syntax.ArrayExpression:
- expr.type = syntax_1.Syntax.ArrayPattern;
- for (var i = 0; i < expr.elements.length; i++) {
- if (expr.elements[i] !== null) {
- this.reinterpretExpressionAsPattern(expr.elements[i]);
- }
- }
- break;
- case syntax_1.Syntax.ObjectExpression:
- expr.type = syntax_1.Syntax.ObjectPattern;
- for (var i = 0; i < expr.properties.length; i++) {
- this.reinterpretExpressionAsPattern(expr.properties[i].value);
- }
- break;
- case syntax_1.Syntax.AssignmentExpression:
- expr.type = syntax_1.Syntax.AssignmentPattern;
- delete expr.operator;
- this.reinterpretExpressionAsPattern(expr.left);
- break;
- default:
- break;
- }
- };
- Parser2.prototype.parseGroupExpression = function() {
- var expr;
- this.expect("(");
- if (this.match(")")) {
- this.nextToken();
- if (!this.match("=>")) {
- this.expect("=>");
- }
- expr = {
- type: ArrowParameterPlaceHolder,
- params: [],
- async: false
- };
- } else {
- var startToken = this.lookahead;
- var params = [];
- if (this.match("...")) {
- expr = this.parseRestElement(params);
- this.expect(")");
- if (!this.match("=>")) {
- this.expect("=>");
- }
- expr = {
- type: ArrowParameterPlaceHolder,
- params: [expr],
- async: false
- };
- } else {
- var arrow = false;
- this.context.isBindingElement = true;
- expr = this.inheritCoverGrammar(this.parseAssignmentExpression);
- if (this.match(",")) {
- var expressions = [];
- this.context.isAssignmentTarget = false;
- expressions.push(expr);
- while (this.lookahead.type !== 2) {
- if (!this.match(",")) {
- break;
- }
- this.nextToken();
- if (this.match(")")) {
- this.nextToken();
- for (var i = 0; i < expressions.length; i++) {
- this.reinterpretExpressionAsPattern(expressions[i]);
- }
- arrow = true;
- expr = {
- type: ArrowParameterPlaceHolder,
- params: expressions,
- async: false
- };
- } else if (this.match("...")) {
- if (!this.context.isBindingElement) {
- this.throwUnexpectedToken(this.lookahead);
- }
- expressions.push(this.parseRestElement(params));
- this.expect(")");
- if (!this.match("=>")) {
- this.expect("=>");
- }
- this.context.isBindingElement = false;
- for (var i = 0; i < expressions.length; i++) {
- this.reinterpretExpressionAsPattern(expressions[i]);
- }
- arrow = true;
- expr = {
- type: ArrowParameterPlaceHolder,
- params: expressions,
- async: false
- };
- } else {
- expressions.push(this.inheritCoverGrammar(this.parseAssignmentExpression));
- }
- if (arrow) {
- break;
- }
- }
- if (!arrow) {
- expr = this.finalize(this.startNode(startToken), new Node.SequenceExpression(expressions));
- }
- }
- if (!arrow) {
- this.expect(")");
- if (this.match("=>")) {
- if (expr.type === syntax_1.Syntax.Identifier && expr.name === "yield") {
- arrow = true;
- expr = {
- type: ArrowParameterPlaceHolder,
- params: [expr],
- async: false
- };
- }
- if (!arrow) {
- if (!this.context.isBindingElement) {
- this.throwUnexpectedToken(this.lookahead);
- }
- if (expr.type === syntax_1.Syntax.SequenceExpression) {
- for (var i = 0; i < expr.expressions.length; i++) {
- this.reinterpretExpressionAsPattern(expr.expressions[i]);
- }
- } else {
- this.reinterpretExpressionAsPattern(expr);
- }
- var parameters = expr.type === syntax_1.Syntax.SequenceExpression ? expr.expressions : [expr];
- expr = {
- type: ArrowParameterPlaceHolder,
- params: parameters,
- async: false
- };
- }
- }
- this.context.isBindingElement = false;
- }
- }
- }
- return expr;
- };
- Parser2.prototype.parseArguments = function() {
- this.expect("(");
- var args = [];
- if (!this.match(")")) {
- while (true) {
- var expr = this.match("...") ? this.parseSpreadElement() : this.isolateCoverGrammar(this.parseAssignmentExpression);
- args.push(expr);
- if (this.match(")")) {
- break;
- }
- this.expectCommaSeparator();
- if (this.match(")")) {
- break;
- }
- }
- }
- this.expect(")");
- return args;
- };
- Parser2.prototype.isIdentifierName = function(token) {
- return token.type === 3 || token.type === 4 || token.type === 1 || token.type === 5;
- };
- Parser2.prototype.parseIdentifierName = function() {
- var node = this.createNode();
- var token = this.nextToken();
- if (!this.isIdentifierName(token)) {
- this.throwUnexpectedToken(token);
- }
- return this.finalize(node, new Node.Identifier(token.value));
- };
- Parser2.prototype.parseNewExpression = function() {
- var node = this.createNode();
- var id = this.parseIdentifierName();
- assert_1.assert(id.name === "new", "New expression must start with `new`");
- var expr;
- if (this.match(".")) {
- this.nextToken();
- if (this.lookahead.type === 3 && this.context.inFunctionBody && this.lookahead.value === "target") {
- var property = this.parseIdentifierName();
- expr = new Node.MetaProperty(id, property);
- } else {
- this.throwUnexpectedToken(this.lookahead);
- }
- } else {
- var callee = this.isolateCoverGrammar(this.parseLeftHandSideExpression);
- var args = this.match("(") ? this.parseArguments() : [];
- expr = new Node.NewExpression(callee, args);
- this.context.isAssignmentTarget = false;
- this.context.isBindingElement = false;
- }
- return this.finalize(node, expr);
- };
- Parser2.prototype.parseAsyncArgument = function() {
- var arg = this.parseAssignmentExpression();
- this.context.firstCoverInitializedNameError = null;
- return arg;
- };
- Parser2.prototype.parseAsyncArguments = function() {
- this.expect("(");
- var args = [];
- if (!this.match(")")) {
- while (true) {
- var expr = this.match("...") ? this.parseSpreadElement() : this.isolateCoverGrammar(this.parseAsyncArgument);
- args.push(expr);
- if (this.match(")")) {
- break;
- }
- this.expectCommaSeparator();
- if (this.match(")")) {
- break;
- }
- }
- }
- this.expect(")");
- return args;
- };
- Parser2.prototype.parseLeftHandSideExpressionAllowCall = function() {
- var startToken = this.lookahead;
- var maybeAsync = this.matchContextualKeyword("async");
- var previousAllowIn = this.context.allowIn;
- this.context.allowIn = true;
- var expr;
- if (this.matchKeyword("super") && this.context.inFunctionBody) {
- expr = this.createNode();
- this.nextToken();
- expr = this.finalize(expr, new Node.Super());
- if (!this.match("(") && !this.match(".") && !this.match("[")) {
- this.throwUnexpectedToken(this.lookahead);
- }
- } else {
- expr = this.inheritCoverGrammar(this.matchKeyword("new") ? this.parseNewExpression : this.parsePrimaryExpression);
- }
- while (true) {
- if (this.match(".")) {
- this.context.isBindingElement = false;
- this.context.isAssignmentTarget = true;
- this.expect(".");
- var property = this.parseIdentifierName();
- expr = this.finalize(this.startNode(startToken), new Node.StaticMemberExpression(expr, property));
- } else if (this.match("(")) {
- var asyncArrow = maybeAsync && startToken.lineNumber === this.lookahead.lineNumber;
- this.context.isBindingElement = false;
- this.context.isAssignmentTarget = false;
- var args = asyncArrow ? this.parseAsyncArguments() : this.parseArguments();
- expr = this.finalize(this.startNode(startToken), new Node.CallExpression(expr, args));
- if (asyncArrow && this.match("=>")) {
- for (var i = 0; i < args.length; ++i) {
- this.reinterpretExpressionAsPattern(args[i]);
- }
- expr = {
- type: ArrowParameterPlaceHolder,
- params: args,
- async: true
- };
- }
- } else if (this.match("[")) {
- this.context.isBindingElement = false;
- this.context.isAssignmentTarget = true;
- this.expect("[");
- var property = this.isolateCoverGrammar(this.parseExpression);
- this.expect("]");
- expr = this.finalize(this.startNode(startToken), new Node.ComputedMemberExpression(expr, property));
- } else if (this.lookahead.type === 10 && this.lookahead.head) {
- var quasi = this.parseTemplateLiteral();
- expr = this.finalize(this.startNode(startToken), new Node.TaggedTemplateExpression(expr, quasi));
- } else {
- break;
- }
- }
- this.context.allowIn = previousAllowIn;
- return expr;
- };
- Parser2.prototype.parseSuper = function() {
- var node = this.createNode();
- this.expectKeyword("super");
- if (!this.match("[") && !this.match(".")) {
- this.throwUnexpectedToken(this.lookahead);
- }
- return this.finalize(node, new Node.Super());
- };
- Parser2.prototype.parseLeftHandSideExpression = function() {
- assert_1.assert(this.context.allowIn, "callee of new expression always allow in keyword.");
- var node = this.startNode(this.lookahead);
- var expr = this.matchKeyword("super") && this.context.inFunctionBody ? this.parseSuper() : this.inheritCoverGrammar(this.matchKeyword("new") ? this.parseNewExpression : this.parsePrimaryExpression);
- while (true) {
- if (this.match("[")) {
- this.context.isBindingElement = false;
- this.context.isAssignmentTarget = true;
- this.expect("[");
- var property = this.isolateCoverGrammar(this.parseExpression);
- this.expect("]");
- expr = this.finalize(node, new Node.ComputedMemberExpression(expr, property));
- } else if (this.match(".")) {
- this.context.isBindingElement = false;
- this.context.isAssignmentTarget = true;
- this.expect(".");
- var property = this.parseIdentifierName();
- expr = this.finalize(node, new Node.StaticMemberExpression(expr, property));
- } else if (this.lookahead.type === 10 && this.lookahead.head) {
- var quasi = this.parseTemplateLiteral();
- expr = this.finalize(node, new Node.TaggedTemplateExpression(expr, quasi));
- } else {
- break;
- }
- }
- return expr;
- };
- Parser2.prototype.parseUpdateExpression = function() {
- var expr;
- var startToken = this.lookahead;
- if (this.match("++") || this.match("--")) {
- var node = this.startNode(startToken);
- var token = this.nextToken();
- expr = this.inheritCoverGrammar(this.parseUnaryExpression);
- if (this.context.strict && expr.type === syntax_1.Syntax.Identifier && this.scanner.isRestrictedWord(expr.name)) {
- this.tolerateError(messages_1.Messages.StrictLHSPrefix);
- }
- if (!this.context.isAssignmentTarget) {
- this.tolerateError(messages_1.Messages.InvalidLHSInAssignment);
- }
- var prefix = true;
- expr = this.finalize(node, new Node.UpdateExpression(token.value, expr, prefix));
- this.context.isAssignmentTarget = false;
- this.context.isBindingElement = false;
- } else {
- expr = this.inheritCoverGrammar(this.parseLeftHandSideExpressionAllowCall);
- if (!this.hasLineTerminator && this.lookahead.type === 7) {
- if (this.match("++") || this.match("--")) {
- if (this.context.strict && expr.type === syntax_1.Syntax.Identifier && this.scanner.isRestrictedWord(expr.name)) {
- this.tolerateError(messages_1.Messages.StrictLHSPostfix);
- }
- if (!this.context.isAssignmentTarget) {
- this.tolerateError(messages_1.Messages.InvalidLHSInAssignment);
- }
- this.context.isAssignmentTarget = false;
- this.context.isBindingElement = false;
- var operator = this.nextToken().value;
- var prefix = false;
- expr = this.finalize(this.startNode(startToken), new Node.UpdateExpression(operator, expr, prefix));
- }
- }
- }
- return expr;
- };
- Parser2.prototype.parseAwaitExpression = function() {
- var node = this.createNode();
- this.nextToken();
- var argument = this.parseUnaryExpression();
- return this.finalize(node, new Node.AwaitExpression(argument));
- };
- Parser2.prototype.parseUnaryExpression = function() {
- var expr;
- if (this.match("+") || this.match("-") || this.match("~") || this.match("!") || this.matchKeyword("delete") || this.matchKeyword("void") || this.matchKeyword("typeof")) {
- var node = this.startNode(this.lookahead);
- var token = this.nextToken();
- expr = this.inheritCoverGrammar(this.parseUnaryExpression);
- expr = this.finalize(node, new Node.UnaryExpression(token.value, expr));
- if (this.context.strict && expr.operator === "delete" && expr.argument.type === syntax_1.Syntax.Identifier) {
- this.tolerateError(messages_1.Messages.StrictDelete);
- }
- this.context.isAssignmentTarget = false;
- this.context.isBindingElement = false;
- } else if (this.context.await && this.matchContextualKeyword("await")) {
- expr = this.parseAwaitExpression();
- } else {
- expr = this.parseUpdateExpression();
- }
- return expr;
- };
- Parser2.prototype.parseExponentiationExpression = function() {
- var startToken = this.lookahead;
- var expr = this.inheritCoverGrammar(this.parseUnaryExpression);
- if (expr.type !== syntax_1.Syntax.UnaryExpression && this.match("**")) {
- this.nextToken();
- this.context.isAssignmentTarget = false;
- this.context.isBindingElement = false;
- var left = expr;
- var right = this.isolateCoverGrammar(this.parseExponentiationExpression);
- expr = this.finalize(this.startNode(startToken), new Node.BinaryExpression("**", left, right));
- }
- return expr;
- };
- Parser2.prototype.binaryPrecedence = function(token) {
- var op = token.value;
- var precedence;
- if (token.type === 7) {
- precedence = this.operatorPrecedence[op] || 0;
- } else if (token.type === 4) {
- precedence = op === "instanceof" || this.context.allowIn && op === "in" ? 7 : 0;
- } else {
- precedence = 0;
- }
- return precedence;
- };
- Parser2.prototype.parseBinaryExpression = function() {
- var startToken = this.lookahead;
- var expr = this.inheritCoverGrammar(this.parseExponentiationExpression);
- var token = this.lookahead;
- var prec = this.binaryPrecedence(token);
- if (prec > 0) {
- this.nextToken();
- this.context.isAssignmentTarget = false;
- this.context.isBindingElement = false;
- var markers = [startToken, this.lookahead];
- var left = expr;
- var right = this.isolateCoverGrammar(this.parseExponentiationExpression);
- var stack = [left, token.value, right];
- var precedences = [prec];
- while (true) {
- prec = this.binaryPrecedence(this.lookahead);
- if (prec <= 0) {
- break;
- }
- while (stack.length > 2 && prec <= precedences[precedences.length - 1]) {
- right = stack.pop();
- var operator = stack.pop();
- precedences.pop();
- left = stack.pop();
- markers.pop();
- var node = this.startNode(markers[markers.length - 1]);
- stack.push(this.finalize(node, new Node.BinaryExpression(operator, left, right)));
- }
- stack.push(this.nextToken().value);
- precedences.push(prec);
- markers.push(this.lookahead);
- stack.push(this.isolateCoverGrammar(this.parseExponentiationExpression));
- }
- var i = stack.length - 1;
- expr = stack[i];
- var lastMarker = markers.pop();
- while (i > 1) {
- var marker = markers.pop();
- var lastLineStart = lastMarker && lastMarker.lineStart;
- var node = this.startNode(marker, lastLineStart);
- var operator = stack[i - 1];
- expr = this.finalize(node, new Node.BinaryExpression(operator, stack[i - 2], expr));
- i -= 2;
- lastMarker = marker;
- }
- }
- return expr;
- };
- Parser2.prototype.parseConditionalExpression = function() {
- var startToken = this.lookahead;
- var expr = this.inheritCoverGrammar(this.parseBinaryExpression);
- if (this.match("?")) {
- this.nextToken();
- var previousAllowIn = this.context.allowIn;
- this.context.allowIn = true;
- var consequent = this.isolateCoverGrammar(this.parseAssignmentExpression);
- this.context.allowIn = previousAllowIn;
- this.expect(":");
- var alternate = this.isolateCoverGrammar(this.parseAssignmentExpression);
- expr = this.finalize(this.startNode(startToken), new Node.ConditionalExpression(expr, consequent, alternate));
- this.context.isAssignmentTarget = false;
- this.context.isBindingElement = false;
- }
- return expr;
- };
- Parser2.prototype.checkPatternParam = function(options, param) {
- switch (param.type) {
- case syntax_1.Syntax.Identifier:
- this.validateParam(options, param, param.name);
- break;
- case syntax_1.Syntax.RestElement:
- this.checkPatternParam(options, param.argument);
- break;
- case syntax_1.Syntax.AssignmentPattern:
- this.checkPatternParam(options, param.left);
- break;
- case syntax_1.Syntax.ArrayPattern:
- for (var i = 0; i < param.elements.length; i++) {
- if (param.elements[i] !== null) {
- this.checkPatternParam(options, param.elements[i]);
- }
- }
- break;
- case syntax_1.Syntax.ObjectPattern:
- for (var i = 0; i < param.properties.length; i++) {
- this.checkPatternParam(options, param.properties[i].value);
- }
- break;
- default:
- break;
- }
- options.simple = options.simple && param instanceof Node.Identifier;
- };
- Parser2.prototype.reinterpretAsCoverFormalsList = function(expr) {
- var params = [expr];
- var options;
- var asyncArrow = false;
- switch (expr.type) {
- case syntax_1.Syntax.Identifier:
- break;
- case ArrowParameterPlaceHolder:
- params = expr.params;
- asyncArrow = expr.async;
- break;
- default:
- return null;
- }
- options = {
- simple: true,
- paramSet: {}
- };
- for (var i = 0; i < params.length; ++i) {
- var param = params[i];
- if (param.type === syntax_1.Syntax.AssignmentPattern) {
- if (param.right.type === syntax_1.Syntax.YieldExpression) {
- if (param.right.argument) {
- this.throwUnexpectedToken(this.lookahead);
- }
- param.right.type = syntax_1.Syntax.Identifier;
- param.right.name = "yield";
- delete param.right.argument;
- delete param.right.delegate;
- }
- } else if (asyncArrow && param.type === syntax_1.Syntax.Identifier && param.name === "await") {
- this.throwUnexpectedToken(this.lookahead);
- }
- this.checkPatternParam(options, param);
- params[i] = param;
- }
- if (this.context.strict || !this.context.allowYield) {
- for (var i = 0; i < params.length; ++i) {
- var param = params[i];
- if (param.type === syntax_1.Syntax.YieldExpression) {
- this.throwUnexpectedToken(this.lookahead);
- }
- }
- }
- if (options.message === messages_1.Messages.StrictParamDupe) {
- var token = this.context.strict ? options.stricted : options.firstRestricted;
- this.throwUnexpectedToken(token, options.message);
- }
- return {
- simple: options.simple,
- params,
- stricted: options.stricted,
- firstRestricted: options.firstRestricted,
- message: options.message
- };
- };
- Parser2.prototype.parseAssignmentExpression = function() {
- var expr;
- if (!this.context.allowYield && this.matchKeyword("yield")) {
- expr = this.parseYieldExpression();
- } else {
- var startToken = this.lookahead;
- var token = startToken;
- expr = this.parseConditionalExpression();
- if (token.type === 3 && token.lineNumber === this.lookahead.lineNumber && token.value === "async") {
- if (this.lookahead.type === 3 || this.matchKeyword("yield")) {
- var arg = this.parsePrimaryExpression();
- this.reinterpretExpressionAsPattern(arg);
- expr = {
- type: ArrowParameterPlaceHolder,
- params: [arg],
- async: true
- };
- }
- }
- if (expr.type === ArrowParameterPlaceHolder || this.match("=>")) {
- this.context.isAssignmentTarget = false;
- this.context.isBindingElement = false;
- var isAsync = expr.async;
- var list = this.reinterpretAsCoverFormalsList(expr);
- if (list) {
- if (this.hasLineTerminator) {
- this.tolerateUnexpectedToken(this.lookahead);
- }
- this.context.firstCoverInitializedNameError = null;
- var previousStrict = this.context.strict;
- var previousAllowStrictDirective = this.context.allowStrictDirective;
- this.context.allowStrictDirective = list.simple;
- var previousAllowYield = this.context.allowYield;
- var previousAwait = this.context.await;
- this.context.allowYield = true;
- this.context.await = isAsync;
- var node = this.startNode(startToken);
- this.expect("=>");
- var body = void 0;
- if (this.match("{")) {
- var previousAllowIn = this.context.allowIn;
- this.context.allowIn = true;
- body = this.parseFunctionSourceElements();
- this.context.allowIn = previousAllowIn;
- } else {
- body = this.isolateCoverGrammar(this.parseAssignmentExpression);
- }
- var expression = body.type !== syntax_1.Syntax.BlockStatement;
- if (this.context.strict && list.firstRestricted) {
- this.throwUnexpectedToken(list.firstRestricted, list.message);
- }
- if (this.context.strict && list.stricted) {
- this.tolerateUnexpectedToken(list.stricted, list.message);
- }
- expr = isAsync ? this.finalize(node, new Node.AsyncArrowFunctionExpression(list.params, body, expression)) : this.finalize(node, new Node.ArrowFunctionExpression(list.params, body, expression));
- this.context.strict = previousStrict;
- this.context.allowStrictDirective = previousAllowStrictDirective;
- this.context.allowYield = previousAllowYield;
- this.context.await = previousAwait;
- }
- } else {
- if (this.matchAssign()) {
- if (!this.context.isAssignmentTarget) {
- this.tolerateError(messages_1.Messages.InvalidLHSInAssignment);
- }
- if (this.context.strict && expr.type === syntax_1.Syntax.Identifier) {
- var id = expr;
- if (this.scanner.isRestrictedWord(id.name)) {
- this.tolerateUnexpectedToken(token, messages_1.Messages.StrictLHSAssignment);
- }
- if (this.scanner.isStrictModeReservedWord(id.name)) {
- this.tolerateUnexpectedToken(token, messages_1.Messages.StrictReservedWord);
- }
- }
- if (!this.match("=")) {
- this.context.isAssignmentTarget = false;
- this.context.isBindingElement = false;
- } else {
- this.reinterpretExpressionAsPattern(expr);
- }
- token = this.nextToken();
- var operator = token.value;
- var right = this.isolateCoverGrammar(this.parseAssignmentExpression);
- expr = this.finalize(this.startNode(startToken), new Node.AssignmentExpression(operator, expr, right));
- this.context.firstCoverInitializedNameError = null;
- }
- }
- }
- return expr;
- };
- Parser2.prototype.parseExpression = function() {
- var startToken = this.lookahead;
- var expr = this.isolateCoverGrammar(this.parseAssignmentExpression);
- if (this.match(",")) {
- var expressions = [];
- expressions.push(expr);
- while (this.lookahead.type !== 2) {
- if (!this.match(",")) {
- break;
- }
- this.nextToken();
- expressions.push(this.isolateCoverGrammar(this.parseAssignmentExpression));
- }
- expr = this.finalize(this.startNode(startToken), new Node.SequenceExpression(expressions));
- }
- return expr;
- };
- Parser2.prototype.parseStatementListItem = function() {
- var statement;
- this.context.isAssignmentTarget = true;
- this.context.isBindingElement = true;
- if (this.lookahead.type === 4) {
- switch (this.lookahead.value) {
- case "export":
- if (!this.context.isModule) {
- this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.IllegalExportDeclaration);
- }
- statement = this.parseExportDeclaration();
- break;
- case "import":
- if (!this.context.isModule) {
- this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.IllegalImportDeclaration);
- }
- statement = this.parseImportDeclaration();
- break;
- case "const":
- statement = this.parseLexicalDeclaration({ inFor: false });
- break;
- case "function":
- statement = this.parseFunctionDeclaration();
- break;
- case "class":
- statement = this.parseClassDeclaration();
- break;
- case "let":
- statement = this.isLexicalDeclaration() ? this.parseLexicalDeclaration({ inFor: false }) : this.parseStatement();
- break;
- default:
- statement = this.parseStatement();
- break;
- }
- } else {
- statement = this.parseStatement();
- }
- return statement;
- };
- Parser2.prototype.parseBlock = function() {
- var node = this.createNode();
- this.expect("{");
- var block = [];
- while (true) {
- if (this.match("}")) {
- break;
- }
- block.push(this.parseStatementListItem());
- }
- this.expect("}");
- return this.finalize(node, new Node.BlockStatement(block));
- };
- Parser2.prototype.parseLexicalBinding = function(kind, options) {
- var node = this.createNode();
- var params = [];
- var id = this.parsePattern(params, kind);
- if (this.context.strict && id.type === syntax_1.Syntax.Identifier) {
- if (this.scanner.isRestrictedWord(id.name)) {
- this.tolerateError(messages_1.Messages.StrictVarName);
- }
- }
- var init = null;
- if (kind === "const") {
- if (!this.matchKeyword("in") && !this.matchContextualKeyword("of")) {
- if (this.match("=")) {
- this.nextToken();
- init = this.isolateCoverGrammar(this.parseAssignmentExpression);
- } else {
- this.throwError(messages_1.Messages.DeclarationMissingInitializer, "const");
- }
- }
- } else if (!options.inFor && id.type !== syntax_1.Syntax.Identifier || this.match("=")) {
- this.expect("=");
- init = this.isolateCoverGrammar(this.parseAssignmentExpression);
- }
- return this.finalize(node, new Node.VariableDeclarator(id, init));
- };
- Parser2.prototype.parseBindingList = function(kind, options) {
- var list = [this.parseLexicalBinding(kind, options)];
- while (this.match(",")) {
- this.nextToken();
- list.push(this.parseLexicalBinding(kind, options));
- }
- return list;
- };
- Parser2.prototype.isLexicalDeclaration = function() {
- var state = this.scanner.saveState();
- this.scanner.scanComments();
- var next = this.scanner.lex();
- this.scanner.restoreState(state);
- return next.type === 3 || next.type === 7 && next.value === "[" || next.type === 7 && next.value === "{" || next.type === 4 && next.value === "let" || next.type === 4 && next.value === "yield";
- };
- Parser2.prototype.parseLexicalDeclaration = function(options) {
- var node = this.createNode();
- var kind = this.nextToken().value;
- assert_1.assert(kind === "let" || kind === "const", "Lexical declaration must be either let or const");
- var declarations = this.parseBindingList(kind, options);
- this.consumeSemicolon();
- return this.finalize(node, new Node.VariableDeclaration(declarations, kind));
- };
- Parser2.prototype.parseBindingRestElement = function(params, kind) {
- var node = this.createNode();
- this.expect("...");
- var arg = this.parsePattern(params, kind);
- return this.finalize(node, new Node.RestElement(arg));
- };
- Parser2.prototype.parseArrayPattern = function(params, kind) {
- var node = this.createNode();
- this.expect("[");
- var elements = [];
- while (!this.match("]")) {
- if (this.match(",")) {
- this.nextToken();
- elements.push(null);
- } else {
- if (this.match("...")) {
- elements.push(this.parseBindingRestElement(params, kind));
- break;
- } else {
- elements.push(this.parsePatternWithDefault(params, kind));
- }
- if (!this.match("]")) {
- this.expect(",");
- }
- }
- }
- this.expect("]");
- return this.finalize(node, new Node.ArrayPattern(elements));
- };
- Parser2.prototype.parsePropertyPattern = function(params, kind) {
- var node = this.createNode();
- var computed = false;
- var shorthand = false;
- var method = false;
- var key;
- var value;
- if (this.lookahead.type === 3) {
- var keyToken = this.lookahead;
- key = this.parseVariableIdentifier();
- var init = this.finalize(node, new Node.Identifier(keyToken.value));
- if (this.match("=")) {
- params.push(keyToken);
- shorthand = true;
- this.nextToken();
- var expr = this.parseAssignmentExpression();
- value = this.finalize(this.startNode(keyToken), new Node.AssignmentPattern(init, expr));
- } else if (!this.match(":")) {
- params.push(keyToken);
- shorthand = true;
- value = init;
- } else {
- this.expect(":");
- value = this.parsePatternWithDefault(params, kind);
- }
- } else {
- computed = this.match("[");
- key = this.parseObjectPropertyKey();
- this.expect(":");
- value = this.parsePatternWithDefault(params, kind);
- }
- return this.finalize(node, new Node.Property("init", key, computed, value, method, shorthand));
- };
- Parser2.prototype.parseObjectPattern = function(params, kind) {
- var node = this.createNode();
- var properties = [];
- this.expect("{");
- while (!this.match("}")) {
- properties.push(this.parsePropertyPattern(params, kind));
- if (!this.match("}")) {
- this.expect(",");
- }
- }
- this.expect("}");
- return this.finalize(node, new Node.ObjectPattern(properties));
- };
- Parser2.prototype.parsePattern = function(params, kind) {
- var pattern;
- if (this.match("[")) {
- pattern = this.parseArrayPattern(params, kind);
- } else if (this.match("{")) {
- pattern = this.parseObjectPattern(params, kind);
- } else {
- if (this.matchKeyword("let") && (kind === "const" || kind === "let")) {
- this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.LetInLexicalBinding);
- }
- params.push(this.lookahead);
- pattern = this.parseVariableIdentifier(kind);
- }
- return pattern;
- };
- Parser2.prototype.parsePatternWithDefault = function(params, kind) {
- var startToken = this.lookahead;
- var pattern = this.parsePattern(params, kind);
- if (this.match("=")) {
- this.nextToken();
- var previousAllowYield = this.context.allowYield;
- this.context.allowYield = true;
- var right = this.isolateCoverGrammar(this.parseAssignmentExpression);
- this.context.allowYield = previousAllowYield;
- pattern = this.finalize(this.startNode(startToken), new Node.AssignmentPattern(pattern, right));
- }
- return pattern;
- };
- Parser2.prototype.parseVariableIdentifier = function(kind) {
- var node = this.createNode();
- var token = this.nextToken();
- if (token.type === 4 && token.value === "yield") {
- if (this.context.strict) {
- this.tolerateUnexpectedToken(token, messages_1.Messages.StrictReservedWord);
- } else if (!this.context.allowYield) {
- this.throwUnexpectedToken(token);
- }
- } else if (token.type !== 3) {
- if (this.context.strict && token.type === 4 && this.scanner.isStrictModeReservedWord(token.value)) {
- this.tolerateUnexpectedToken(token, messages_1.Messages.StrictReservedWord);
- } else {
- if (this.context.strict || token.value !== "let" || kind !== "var") {
- this.throwUnexpectedToken(token);
- }
- }
- } else if ((this.context.isModule || this.context.await) && token.type === 3 && token.value === "await") {
- this.tolerateUnexpectedToken(token);
- }
- return this.finalize(node, new Node.Identifier(token.value));
- };
- Parser2.prototype.parseVariableDeclaration = function(options) {
- var node = this.createNode();
- var params = [];
- var id = this.parsePattern(params, "var");
- if (this.context.strict && id.type === syntax_1.Syntax.Identifier) {
- if (this.scanner.isRestrictedWord(id.name)) {
- this.tolerateError(messages_1.Messages.StrictVarName);
- }
- }
- var init = null;
- if (this.match("=")) {
- this.nextToken();
- init = this.isolateCoverGrammar(this.parseAssignmentExpression);
- } else if (id.type !== syntax_1.Syntax.Identifier && !options.inFor) {
- this.expect("=");
- }
- return this.finalize(node, new Node.VariableDeclarator(id, init));
- };
- Parser2.prototype.parseVariableDeclarationList = function(options) {
- var opt = { inFor: options.inFor };
- var list = [];
- list.push(this.parseVariableDeclaration(opt));
- while (this.match(",")) {
- this.nextToken();
- list.push(this.parseVariableDeclaration(opt));
- }
- return list;
- };
- Parser2.prototype.parseVariableStatement = function() {
- var node = this.createNode();
- this.expectKeyword("var");
- var declarations = this.parseVariableDeclarationList({ inFor: false });
- this.consumeSemicolon();
- return this.finalize(node, new Node.VariableDeclaration(declarations, "var"));
- };
- Parser2.prototype.parseEmptyStatement = function() {
- var node = this.createNode();
- this.expect(";");
- return this.finalize(node, new Node.EmptyStatement());
- };
- Parser2.prototype.parseExpressionStatement = function() {
- var node = this.createNode();
- var expr = this.parseExpression();
- this.consumeSemicolon();
- return this.finalize(node, new Node.ExpressionStatement(expr));
- };
- Parser2.prototype.parseIfClause = function() {
- if (this.context.strict && this.matchKeyword("function")) {
- this.tolerateError(messages_1.Messages.StrictFunction);
- }
- return this.parseStatement();
- };
- Parser2.prototype.parseIfStatement = function() {
- var node = this.createNode();
- var consequent;
- var alternate = null;
- this.expectKeyword("if");
- this.expect("(");
- var test = this.parseExpression();
- if (!this.match(")") && this.config.tolerant) {
- this.tolerateUnexpectedToken(this.nextToken());
- consequent = this.finalize(this.createNode(), new Node.EmptyStatement());
- } else {
- this.expect(")");
- consequent = this.parseIfClause();
- if (this.matchKeyword("else")) {
- this.nextToken();
- alternate = this.parseIfClause();
- }
- }
- return this.finalize(node, new Node.IfStatement(test, consequent, alternate));
- };
- Parser2.prototype.parseDoWhileStatement = function() {
- var node = this.createNode();
- this.expectKeyword("do");
- var previousInIteration = this.context.inIteration;
- this.context.inIteration = true;
- var body = this.parseStatement();
- this.context.inIteration = previousInIteration;
- this.expectKeyword("while");
- this.expect("(");
- var test = this.parseExpression();
- if (!this.match(")") && this.config.tolerant) {
- this.tolerateUnexpectedToken(this.nextToken());
- } else {
- this.expect(")");
- if (this.match(";")) {
- this.nextToken();
- }
- }
- return this.finalize(node, new Node.DoWhileStatement(body, test));
- };
- Parser2.prototype.parseWhileStatement = function() {
- var node = this.createNode();
- var body;
- this.expectKeyword("while");
- this.expect("(");
- var test = this.parseExpression();
- if (!this.match(")") && this.config.tolerant) {
- this.tolerateUnexpectedToken(this.nextToken());
- body = this.finalize(this.createNode(), new Node.EmptyStatement());
- } else {
- this.expect(")");
- var previousInIteration = this.context.inIteration;
- this.context.inIteration = true;
- body = this.parseStatement();
- this.context.inIteration = previousInIteration;
- }
- return this.finalize(node, new Node.WhileStatement(test, body));
- };
- Parser2.prototype.parseForStatement = function() {
- var init = null;
- var test = null;
- var update = null;
- var forIn = true;
- var left, right;
- var node = this.createNode();
- this.expectKeyword("for");
- this.expect("(");
- if (this.match(";")) {
- this.nextToken();
- } else {
- if (this.matchKeyword("var")) {
- init = this.createNode();
- this.nextToken();
- var previousAllowIn = this.context.allowIn;
- this.context.allowIn = false;
- var declarations = this.parseVariableDeclarationList({ inFor: true });
- this.context.allowIn = previousAllowIn;
- if (declarations.length === 1 && this.matchKeyword("in")) {
- var decl = declarations[0];
- if (decl.init && (decl.id.type === syntax_1.Syntax.ArrayPattern || decl.id.type === syntax_1.Syntax.ObjectPattern || this.context.strict)) {
- this.tolerateError(messages_1.Messages.ForInOfLoopInitializer, "for-in");
- }
- init = this.finalize(init, new Node.VariableDeclaration(declarations, "var"));
- this.nextToken();
- left = init;
- right = this.parseExpression();
- init = null;
- } else if (declarations.length === 1 && declarations[0].init === null && this.matchContextualKeyword("of")) {
- init = this.finalize(init, new Node.VariableDeclaration(declarations, "var"));
- this.nextToken();
- left = init;
- right = this.parseAssignmentExpression();
- init = null;
- forIn = false;
- } else {
- init = this.finalize(init, new Node.VariableDeclaration(declarations, "var"));
- this.expect(";");
- }
- } else if (this.matchKeyword("const") || this.matchKeyword("let")) {
- init = this.createNode();
- var kind = this.nextToken().value;
- if (!this.context.strict && this.lookahead.value === "in") {
- init = this.finalize(init, new Node.Identifier(kind));
- this.nextToken();
- left = init;
- right = this.parseExpression();
- init = null;
- } else {
- var previousAllowIn = this.context.allowIn;
- this.context.allowIn = false;
- var declarations = this.parseBindingList(kind, { inFor: true });
- this.context.allowIn = previousAllowIn;
- if (declarations.length === 1 && declarations[0].init === null && this.matchKeyword("in")) {
- init = this.finalize(init, new Node.VariableDeclaration(declarations, kind));
- this.nextToken();
- left = init;
- right = this.parseExpression();
- init = null;
- } else if (declarations.length === 1 && declarations[0].init === null && this.matchContextualKeyword("of")) {
- init = this.finalize(init, new Node.VariableDeclaration(declarations, kind));
- this.nextToken();
- left = init;
- right = this.parseAssignmentExpression();
- init = null;
- forIn = false;
- } else {
- this.consumeSemicolon();
- init = this.finalize(init, new Node.VariableDeclaration(declarations, kind));
- }
- }
- } else {
- var initStartToken = this.lookahead;
- var previousAllowIn = this.context.allowIn;
- this.context.allowIn = false;
- init = this.inheritCoverGrammar(this.parseAssignmentExpression);
- this.context.allowIn = previousAllowIn;
- if (this.matchKeyword("in")) {
- if (!this.context.isAssignmentTarget || init.type === syntax_1.Syntax.AssignmentExpression) {
- this.tolerateError(messages_1.Messages.InvalidLHSInForIn);
- }
- this.nextToken();
- this.reinterpretExpressionAsPattern(init);
- left = init;
- right = this.parseExpression();
- init = null;
- } else if (this.matchContextualKeyword("of")) {
- if (!this.context.isAssignmentTarget || init.type === syntax_1.Syntax.AssignmentExpression) {
- this.tolerateError(messages_1.Messages.InvalidLHSInForLoop);
- }
- this.nextToken();
- this.reinterpretExpressionAsPattern(init);
- left = init;
- right = this.parseAssignmentExpression();
- init = null;
- forIn = false;
- } else {
- if (this.match(",")) {
- var initSeq = [init];
- while (this.match(",")) {
- this.nextToken();
- initSeq.push(this.isolateCoverGrammar(this.parseAssignmentExpression));
- }
- init = this.finalize(this.startNode(initStartToken), new Node.SequenceExpression(initSeq));
- }
- this.expect(";");
- }
- }
- }
- if (typeof left === "undefined") {
- if (!this.match(";")) {
- test = this.parseExpression();
- }
- this.expect(";");
- if (!this.match(")")) {
- update = this.parseExpression();
- }
- }
- var body;
- if (!this.match(")") && this.config.tolerant) {
- this.tolerateUnexpectedToken(this.nextToken());
- body = this.finalize(this.createNode(), new Node.EmptyStatement());
- } else {
- this.expect(")");
- var previousInIteration = this.context.inIteration;
- this.context.inIteration = true;
- body = this.isolateCoverGrammar(this.parseStatement);
- this.context.inIteration = previousInIteration;
- }
- return typeof left === "undefined" ? this.finalize(node, new Node.ForStatement(init, test, update, body)) : forIn ? this.finalize(node, new Node.ForInStatement(left, right, body)) : this.finalize(node, new Node.ForOfStatement(left, right, body));
- };
- Parser2.prototype.parseContinueStatement = function() {
- var node = this.createNode();
- this.expectKeyword("continue");
- var label = null;
- if (this.lookahead.type === 3 && !this.hasLineTerminator) {
- var id = this.parseVariableIdentifier();
- label = id;
- var key = "$" + id.name;
- if (!Object.prototype.hasOwnProperty.call(this.context.labelSet, key)) {
- this.throwError(messages_1.Messages.UnknownLabel, id.name);
- }
- }
- this.consumeSemicolon();
- if (label === null && !this.context.inIteration) {
- this.throwError(messages_1.Messages.IllegalContinue);
- }
- return this.finalize(node, new Node.ContinueStatement(label));
- };
- Parser2.prototype.parseBreakStatement = function() {
- var node = this.createNode();
- this.expectKeyword("break");
- var label = null;
- if (this.lookahead.type === 3 && !this.hasLineTerminator) {
- var id = this.parseVariableIdentifier();
- var key = "$" + id.name;
- if (!Object.prototype.hasOwnProperty.call(this.context.labelSet, key)) {
- this.throwError(messages_1.Messages.UnknownLabel, id.name);
- }
- label = id;
- }
- this.consumeSemicolon();
- if (label === null && !this.context.inIteration && !this.context.inSwitch) {
- this.throwError(messages_1.Messages.IllegalBreak);
- }
- return this.finalize(node, new Node.BreakStatement(label));
- };
- Parser2.prototype.parseReturnStatement = function() {
- if (!this.context.inFunctionBody) {
- this.tolerateError(messages_1.Messages.IllegalReturn);
- }
- var node = this.createNode();
- this.expectKeyword("return");
- var hasArgument = !this.match(";") && !this.match("}") && !this.hasLineTerminator && this.lookahead.type !== 2 || this.lookahead.type === 8 || this.lookahead.type === 10;
- var argument = hasArgument ? this.parseExpression() : null;
- this.consumeSemicolon();
- return this.finalize(node, new Node.ReturnStatement(argument));
- };
- Parser2.prototype.parseWithStatement = function() {
- if (this.context.strict) {
- this.tolerateError(messages_1.Messages.StrictModeWith);
- }
- var node = this.createNode();
- var body;
- this.expectKeyword("with");
- this.expect("(");
- var object = this.parseExpression();
- if (!this.match(")") && this.config.tolerant) {
- this.tolerateUnexpectedToken(this.nextToken());
- body = this.finalize(this.createNode(), new Node.EmptyStatement());
- } else {
- this.expect(")");
- body = this.parseStatement();
- }
- return this.finalize(node, new Node.WithStatement(object, body));
- };
- Parser2.prototype.parseSwitchCase = function() {
- var node = this.createNode();
- var test;
- if (this.matchKeyword("default")) {
- this.nextToken();
- test = null;
- } else {
- this.expectKeyword("case");
- test = this.parseExpression();
- }
- this.expect(":");
- var consequent = [];
- while (true) {
- if (this.match("}") || this.matchKeyword("default") || this.matchKeyword("case")) {
- break;
- }
- consequent.push(this.parseStatementListItem());
- }
- return this.finalize(node, new Node.SwitchCase(test, consequent));
- };
- Parser2.prototype.parseSwitchStatement = function() {
- var node = this.createNode();
- this.expectKeyword("switch");
- this.expect("(");
- var discriminant = this.parseExpression();
- this.expect(")");
- var previousInSwitch = this.context.inSwitch;
- this.context.inSwitch = true;
- var cases = [];
- var defaultFound = false;
- this.expect("{");
- while (true) {
- if (this.match("}")) {
- break;
- }
- var clause = this.parseSwitchCase();
- if (clause.test === null) {
- if (defaultFound) {
- this.throwError(messages_1.Messages.MultipleDefaultsInSwitch);
- }
- defaultFound = true;
- }
- cases.push(clause);
- }
- this.expect("}");
- this.context.inSwitch = previousInSwitch;
- return this.finalize(node, new Node.SwitchStatement(discriminant, cases));
- };
- Parser2.prototype.parseLabelledStatement = function() {
- var node = this.createNode();
- var expr = this.parseExpression();
- var statement;
- if (expr.type === syntax_1.Syntax.Identifier && this.match(":")) {
- this.nextToken();
- var id = expr;
- var key = "$" + id.name;
- if (Object.prototype.hasOwnProperty.call(this.context.labelSet, key)) {
- this.throwError(messages_1.Messages.Redeclaration, "Label", id.name);
- }
- this.context.labelSet[key] = true;
- var body = void 0;
- if (this.matchKeyword("class")) {
- this.tolerateUnexpectedToken(this.lookahead);
- body = this.parseClassDeclaration();
- } else if (this.matchKeyword("function")) {
- var token = this.lookahead;
- var declaration = this.parseFunctionDeclaration();
- if (this.context.strict) {
- this.tolerateUnexpectedToken(token, messages_1.Messages.StrictFunction);
- } else if (declaration.generator) {
- this.tolerateUnexpectedToken(token, messages_1.Messages.GeneratorInLegacyContext);
- }
- body = declaration;
- } else {
- body = this.parseStatement();
- }
- delete this.context.labelSet[key];
- statement = new Node.LabeledStatement(id, body);
- } else {
- this.consumeSemicolon();
- statement = new Node.ExpressionStatement(expr);
- }
- return this.finalize(node, statement);
- };
- Parser2.prototype.parseThrowStatement = function() {
- var node = this.createNode();
- this.expectKeyword("throw");
- if (this.hasLineTerminator) {
- this.throwError(messages_1.Messages.NewlineAfterThrow);
- }
- var argument = this.parseExpression();
- this.consumeSemicolon();
- return this.finalize(node, new Node.ThrowStatement(argument));
- };
- Parser2.prototype.parseCatchClause = function() {
- var node = this.createNode();
- this.expectKeyword("catch");
- this.expect("(");
- if (this.match(")")) {
- this.throwUnexpectedToken(this.lookahead);
- }
- var params = [];
- var param = this.parsePattern(params);
- var paramMap = {};
- for (var i = 0; i < params.length; i++) {
- var key = "$" + params[i].value;
- if (Object.prototype.hasOwnProperty.call(paramMap, key)) {
- this.tolerateError(messages_1.Messages.DuplicateBinding, params[i].value);
- }
- paramMap[key] = true;
- }
- if (this.context.strict && param.type === syntax_1.Syntax.Identifier) {
- if (this.scanner.isRestrictedWord(param.name)) {
- this.tolerateError(messages_1.Messages.StrictCatchVariable);
- }
- }
- this.expect(")");
- var body = this.parseBlock();
- return this.finalize(node, new Node.CatchClause(param, body));
- };
- Parser2.prototype.parseFinallyClause = function() {
- this.expectKeyword("finally");
- return this.parseBlock();
- };
- Parser2.prototype.parseTryStatement = function() {
- var node = this.createNode();
- this.expectKeyword("try");
- var block = this.parseBlock();
- var handler = this.matchKeyword("catch") ? this.parseCatchClause() : null;
- var finalizer = this.matchKeyword("finally") ? this.parseFinallyClause() : null;
- if (!handler && !finalizer) {
- this.throwError(messages_1.Messages.NoCatchOrFinally);
- }
- return this.finalize(node, new Node.TryStatement(block, handler, finalizer));
- };
- Parser2.prototype.parseDebuggerStatement = function() {
- var node = this.createNode();
- this.expectKeyword("debugger");
- this.consumeSemicolon();
- return this.finalize(node, new Node.DebuggerStatement());
- };
- Parser2.prototype.parseStatement = function() {
- var statement;
- switch (this.lookahead.type) {
- case 1:
- case 5:
- case 6:
- case 8:
- case 10:
- case 9:
- statement = this.parseExpressionStatement();
- break;
- case 7:
- var value = this.lookahead.value;
- if (value === "{") {
- statement = this.parseBlock();
- } else if (value === "(") {
- statement = this.parseExpressionStatement();
- } else if (value === ";") {
- statement = this.parseEmptyStatement();
- } else {
- statement = this.parseExpressionStatement();
- }
- break;
- case 3:
- statement = this.matchAsyncFunction() ? this.parseFunctionDeclaration() : this.parseLabelledStatement();
- break;
- case 4:
- switch (this.lookahead.value) {
- case "break":
- statement = this.parseBreakStatement();
- break;
- case "continue":
- statement = this.parseContinueStatement();
- break;
- case "debugger":
- statement = this.parseDebuggerStatement();
- break;
- case "do":
- statement = this.parseDoWhileStatement();
- break;
- case "for":
- statement = this.parseForStatement();
- break;
- case "function":
- statement = this.parseFunctionDeclaration();
- break;
- case "if":
- statement = this.parseIfStatement();
- break;
- case "return":
- statement = this.parseReturnStatement();
- break;
- case "switch":
- statement = this.parseSwitchStatement();
- break;
- case "throw":
- statement = this.parseThrowStatement();
- break;
- case "try":
- statement = this.parseTryStatement();
- break;
- case "var":
- statement = this.parseVariableStatement();
- break;
- case "while":
- statement = this.parseWhileStatement();
- break;
- case "with":
- statement = this.parseWithStatement();
- break;
- default:
- statement = this.parseExpressionStatement();
- break;
- }
- break;
- default:
- statement = this.throwUnexpectedToken(this.lookahead);
- }
- return statement;
- };
- Parser2.prototype.parseFunctionSourceElements = function() {
- var node = this.createNode();
- this.expect("{");
- var body = this.parseDirectivePrologues();
- var previousLabelSet = this.context.labelSet;
- var previousInIteration = this.context.inIteration;
- var previousInSwitch = this.context.inSwitch;
- var previousInFunctionBody = this.context.inFunctionBody;
- this.context.labelSet = {};
- this.context.inIteration = false;
- this.context.inSwitch = false;
- this.context.inFunctionBody = true;
- while (this.lookahead.type !== 2) {
- if (this.match("}")) {
- break;
- }
- body.push(this.parseStatementListItem());
- }
- this.expect("}");
- this.context.labelSet = previousLabelSet;
- this.context.inIteration = previousInIteration;
- this.context.inSwitch = previousInSwitch;
- this.context.inFunctionBody = previousInFunctionBody;
- return this.finalize(node, new Node.BlockStatement(body));
- };
- Parser2.prototype.validateParam = function(options, param, name) {
- var key = "$" + name;
- if (this.context.strict) {
- if (this.scanner.isRestrictedWord(name)) {
- options.stricted = param;
- options.message = messages_1.Messages.StrictParamName;
- }
- if (Object.prototype.hasOwnProperty.call(options.paramSet, key)) {
- options.stricted = param;
- options.message = messages_1.Messages.StrictParamDupe;
- }
- } else if (!options.firstRestricted) {
- if (this.scanner.isRestrictedWord(name)) {
- options.firstRestricted = param;
- options.message = messages_1.Messages.StrictParamName;
- } else if (this.scanner.isStrictModeReservedWord(name)) {
- options.firstRestricted = param;
- options.message = messages_1.Messages.StrictReservedWord;
- } else if (Object.prototype.hasOwnProperty.call(options.paramSet, key)) {
- options.stricted = param;
- options.message = messages_1.Messages.StrictParamDupe;
- }
- }
- if (typeof Object.defineProperty === "function") {
- Object.defineProperty(options.paramSet, key, { value: true, enumerable: true, writable: true, configurable: true });
- } else {
- options.paramSet[key] = true;
- }
- };
- Parser2.prototype.parseRestElement = function(params) {
- var node = this.createNode();
- this.expect("...");
- var arg = this.parsePattern(params);
- if (this.match("=")) {
- this.throwError(messages_1.Messages.DefaultRestParameter);
- }
- if (!this.match(")")) {
- this.throwError(messages_1.Messages.ParameterAfterRestParameter);
- }
- return this.finalize(node, new Node.RestElement(arg));
- };
- Parser2.prototype.parseFormalParameter = function(options) {
- var params = [];
- var param = this.match("...") ? this.parseRestElement(params) : this.parsePatternWithDefault(params);
- for (var i = 0; i < params.length; i++) {
- this.validateParam(options, params[i], params[i].value);
- }
- options.simple = options.simple && param instanceof Node.Identifier;
- options.params.push(param);
- };
- Parser2.prototype.parseFormalParameters = function(firstRestricted) {
- var options;
- options = {
- simple: true,
- params: [],
- firstRestricted
- };
- this.expect("(");
- if (!this.match(")")) {
- options.paramSet = {};
- while (this.lookahead.type !== 2) {
- this.parseFormalParameter(options);
- if (this.match(")")) {
- break;
- }
- this.expect(",");
- if (this.match(")")) {
- break;
- }
- }
- }
- this.expect(")");
- return {
- simple: options.simple,
- params: options.params,
- stricted: options.stricted,
- firstRestricted: options.firstRestricted,
- message: options.message
- };
- };
- Parser2.prototype.matchAsyncFunction = function() {
- var match = this.matchContextualKeyword("async");
- if (match) {
- var state = this.scanner.saveState();
- this.scanner.scanComments();
- var next = this.scanner.lex();
- this.scanner.restoreState(state);
- match = state.lineNumber === next.lineNumber && next.type === 4 && next.value === "function";
- }
- return match;
- };
- Parser2.prototype.parseFunctionDeclaration = function(identifierIsOptional) {
- var node = this.createNode();
- var isAsync = this.matchContextualKeyword("async");
- if (isAsync) {
- this.nextToken();
- }
- this.expectKeyword("function");
- var isGenerator = isAsync ? false : this.match("*");
- if (isGenerator) {
- this.nextToken();
- }
- var message;
- var id = null;
- var firstRestricted = null;
- if (!identifierIsOptional || !this.match("(")) {
- var token = this.lookahead;
- id = this.parseVariableIdentifier();
- if (this.context.strict) {
- if (this.scanner.isRestrictedWord(token.value)) {
- this.tolerateUnexpectedToken(token, messages_1.Messages.StrictFunctionName);
- }
- } else {
- if (this.scanner.isRestrictedWord(token.value)) {
- firstRestricted = token;
- message = messages_1.Messages.StrictFunctionName;
- } else if (this.scanner.isStrictModeReservedWord(token.value)) {
- firstRestricted = token;
- message = messages_1.Messages.StrictReservedWord;
- }
- }
- }
- var previousAllowAwait = this.context.await;
- var previousAllowYield = this.context.allowYield;
- this.context.await = isAsync;
- this.context.allowYield = !isGenerator;
- var formalParameters = this.parseFormalParameters(firstRestricted);
- var params = formalParameters.params;
- var stricted = formalParameters.stricted;
- firstRestricted = formalParameters.firstRestricted;
- if (formalParameters.message) {
- message = formalParameters.message;
- }
- var previousStrict = this.context.strict;
- var previousAllowStrictDirective = this.context.allowStrictDirective;
- this.context.allowStrictDirective = formalParameters.simple;
- var body = this.parseFunctionSourceElements();
- if (this.context.strict && firstRestricted) {
- this.throwUnexpectedToken(firstRestricted, message);
- }
- if (this.context.strict && stricted) {
- this.tolerateUnexpectedToken(stricted, message);
- }
- this.context.strict = previousStrict;
- this.context.allowStrictDirective = previousAllowStrictDirective;
- this.context.await = previousAllowAwait;
- this.context.allowYield = previousAllowYield;
- return isAsync ? this.finalize(node, new Node.AsyncFunctionDeclaration(id, params, body)) : this.finalize(node, new Node.FunctionDeclaration(id, params, body, isGenerator));
- };
- Parser2.prototype.parseFunctionExpression = function() {
- var node = this.createNode();
- var isAsync = this.matchContextualKeyword("async");
- if (isAsync) {
- this.nextToken();
- }
- this.expectKeyword("function");
- var isGenerator = isAsync ? false : this.match("*");
- if (isGenerator) {
- this.nextToken();
- }
- var message;
- var id = null;
- var firstRestricted;
- var previousAllowAwait = this.context.await;
- var previousAllowYield = this.context.allowYield;
- this.context.await = isAsync;
- this.context.allowYield = !isGenerator;
- if (!this.match("(")) {
- var token = this.lookahead;
- id = !this.context.strict && !isGenerator && this.matchKeyword("yield") ? this.parseIdentifierName() : this.parseVariableIdentifier();
- if (this.context.strict) {
- if (this.scanner.isRestrictedWord(token.value)) {
- this.tolerateUnexpectedToken(token, messages_1.Messages.StrictFunctionName);
- }
- } else {
- if (this.scanner.isRestrictedWord(token.value)) {
- firstRestricted = token;
- message = messages_1.Messages.StrictFunctionName;
- } else if (this.scanner.isStrictModeReservedWord(token.value)) {
- firstRestricted = token;
- message = messages_1.Messages.StrictReservedWord;
- }
- }
- }
- var formalParameters = this.parseFormalParameters(firstRestricted);
- var params = formalParameters.params;
- var stricted = formalParameters.stricted;
- firstRestricted = formalParameters.firstRestricted;
- if (formalParameters.message) {
- message = formalParameters.message;
- }
- var previousStrict = this.context.strict;
- var previousAllowStrictDirective = this.context.allowStrictDirective;
- this.context.allowStrictDirective = formalParameters.simple;
- var body = this.parseFunctionSourceElements();
- if (this.context.strict && firstRestricted) {
- this.throwUnexpectedToken(firstRestricted, message);
- }
- if (this.context.strict && stricted) {
- this.tolerateUnexpectedToken(stricted, message);
- }
- this.context.strict = previousStrict;
- this.context.allowStrictDirective = previousAllowStrictDirective;
- this.context.await = previousAllowAwait;
- this.context.allowYield = previousAllowYield;
- return isAsync ? this.finalize(node, new Node.AsyncFunctionExpression(id, params, body)) : this.finalize(node, new Node.FunctionExpression(id, params, body, isGenerator));
- };
- Parser2.prototype.parseDirective = function() {
- var token = this.lookahead;
- var node = this.createNode();
- var expr = this.parseExpression();
- var directive = expr.type === syntax_1.Syntax.Literal ? this.getTokenRaw(token).slice(1, -1) : null;
- this.consumeSemicolon();
- return this.finalize(node, directive ? new Node.Directive(expr, directive) : new Node.ExpressionStatement(expr));
- };
- Parser2.prototype.parseDirectivePrologues = function() {
- var firstRestricted = null;
- var body = [];
- while (true) {
- var token = this.lookahead;
- if (token.type !== 8) {
- break;
- }
- var statement = this.parseDirective();
- body.push(statement);
- var directive = statement.directive;
- if (typeof directive !== "string") {
- break;
- }
- if (directive === "use strict") {
- this.context.strict = true;
- if (firstRestricted) {
- this.tolerateUnexpectedToken(firstRestricted, messages_1.Messages.StrictOctalLiteral);
- }
- if (!this.context.allowStrictDirective) {
- this.tolerateUnexpectedToken(token, messages_1.Messages.IllegalLanguageModeDirective);
- }
- } else {
- if (!firstRestricted && token.octal) {
- firstRestricted = token;
- }
- }
- }
- return body;
- };
- Parser2.prototype.qualifiedPropertyName = function(token) {
- switch (token.type) {
- case 3:
- case 8:
- case 1:
- case 5:
- case 6:
- case 4:
- return true;
- case 7:
- return token.value === "[";
- default:
- break;
- }
- return false;
- };
- Parser2.prototype.parseGetterMethod = function() {
- var node = this.createNode();
- var isGenerator = false;
- var previousAllowYield = this.context.allowYield;
- this.context.allowYield = !isGenerator;
- var formalParameters = this.parseFormalParameters();
- if (formalParameters.params.length > 0) {
- this.tolerateError(messages_1.Messages.BadGetterArity);
- }
- var method = this.parsePropertyMethod(formalParameters);
- this.context.allowYield = previousAllowYield;
- return this.finalize(node, new Node.FunctionExpression(null, formalParameters.params, method, isGenerator));
- };
- Parser2.prototype.parseSetterMethod = function() {
- var node = this.createNode();
- var isGenerator = false;
- var previousAllowYield = this.context.allowYield;
- this.context.allowYield = !isGenerator;
- var formalParameters = this.parseFormalParameters();
- if (formalParameters.params.length !== 1) {
- this.tolerateError(messages_1.Messages.BadSetterArity);
- } else if (formalParameters.params[0] instanceof Node.RestElement) {
- this.tolerateError(messages_1.Messages.BadSetterRestParameter);
- }
- var method = this.parsePropertyMethod(formalParameters);
- this.context.allowYield = previousAllowYield;
- return this.finalize(node, new Node.FunctionExpression(null, formalParameters.params, method, isGenerator));
- };
- Parser2.prototype.parseGeneratorMethod = function() {
- var node = this.createNode();
- var isGenerator = true;
- var previousAllowYield = this.context.allowYield;
- this.context.allowYield = true;
- var params = this.parseFormalParameters();
- this.context.allowYield = false;
- var method = this.parsePropertyMethod(params);
- this.context.allowYield = previousAllowYield;
- return this.finalize(node, new Node.FunctionExpression(null, params.params, method, isGenerator));
- };
- Parser2.prototype.isStartOfExpression = function() {
- var start = true;
- var value = this.lookahead.value;
- switch (this.lookahead.type) {
- case 7:
- start = value === "[" || value === "(" || value === "{" || value === "+" || value === "-" || value === "!" || value === "~" || value === "++" || value === "--" || value === "/" || value === "/=";
- break;
- case 4:
- start = value === "class" || value === "delete" || value === "function" || value === "let" || value === "new" || value === "super" || value === "this" || value === "typeof" || value === "void" || value === "yield";
- break;
- default:
- break;
- }
- return start;
- };
- Parser2.prototype.parseYieldExpression = function() {
- var node = this.createNode();
- this.expectKeyword("yield");
- var argument = null;
- var delegate = false;
- if (!this.hasLineTerminator) {
- var previousAllowYield = this.context.allowYield;
- this.context.allowYield = false;
- delegate = this.match("*");
- if (delegate) {
- this.nextToken();
- argument = this.parseAssignmentExpression();
- } else if (this.isStartOfExpression()) {
- argument = this.parseAssignmentExpression();
- }
- this.context.allowYield = previousAllowYield;
- }
- return this.finalize(node, new Node.YieldExpression(argument, delegate));
- };
- Parser2.prototype.parseClassElement = function(hasConstructor) {
- var token = this.lookahead;
- var node = this.createNode();
- var kind = "";
- var key = null;
- var value = null;
- var computed = false;
- var method = false;
- var isStatic = false;
- var isAsync = false;
- if (this.match("*")) {
- this.nextToken();
- } else {
- computed = this.match("[");
- key = this.parseObjectPropertyKey();
- var id = key;
- if (id.name === "static" && (this.qualifiedPropertyName(this.lookahead) || this.match("*"))) {
- token = this.lookahead;
- isStatic = true;
- computed = this.match("[");
- if (this.match("*")) {
- this.nextToken();
- } else {
- key = this.parseObjectPropertyKey();
- }
- }
- if (token.type === 3 && !this.hasLineTerminator && token.value === "async") {
- var punctuator = this.lookahead.value;
- if (punctuator !== ":" && punctuator !== "(" && punctuator !== "*") {
- isAsync = true;
- token = this.lookahead;
- key = this.parseObjectPropertyKey();
- if (token.type === 3 && token.value === "constructor") {
- this.tolerateUnexpectedToken(token, messages_1.Messages.ConstructorIsAsync);
- }
- }
- }
- }
- var lookaheadPropertyKey = this.qualifiedPropertyName(this.lookahead);
- if (token.type === 3) {
- if (token.value === "get" && lookaheadPropertyKey) {
- kind = "get";
- computed = this.match("[");
- key = this.parseObjectPropertyKey();
- this.context.allowYield = false;
- value = this.parseGetterMethod();
- } else if (token.value === "set" && lookaheadPropertyKey) {
- kind = "set";
- computed = this.match("[");
- key = this.parseObjectPropertyKey();
- value = this.parseSetterMethod();
- }
- } else if (token.type === 7 && token.value === "*" && lookaheadPropertyKey) {
- kind = "init";
- computed = this.match("[");
- key = this.parseObjectPropertyKey();
- value = this.parseGeneratorMethod();
- method = true;
- }
- if (!kind && key && this.match("(")) {
- kind = "init";
- value = isAsync ? this.parsePropertyMethodAsyncFunction() : this.parsePropertyMethodFunction();
- method = true;
- }
- if (!kind) {
- this.throwUnexpectedToken(this.lookahead);
- }
- if (kind === "init") {
- kind = "method";
- }
- if (!computed) {
- if (isStatic && this.isPropertyKey(key, "prototype")) {
- this.throwUnexpectedToken(token, messages_1.Messages.StaticPrototype);
- }
- if (!isStatic && this.isPropertyKey(key, "constructor")) {
- if (kind !== "method" || !method || value && value.generator) {
- this.throwUnexpectedToken(token, messages_1.Messages.ConstructorSpecialMethod);
- }
- if (hasConstructor.value) {
- this.throwUnexpectedToken(token, messages_1.Messages.DuplicateConstructor);
- } else {
- hasConstructor.value = true;
- }
- kind = "constructor";
- }
- }
- return this.finalize(node, new Node.MethodDefinition(key, computed, value, kind, isStatic));
- };
- Parser2.prototype.parseClassElementList = function() {
- var body = [];
- var hasConstructor = { value: false };
- this.expect("{");
- while (!this.match("}")) {
- if (this.match(";")) {
- this.nextToken();
- } else {
- body.push(this.parseClassElement(hasConstructor));
- }
- }
- this.expect("}");
- return body;
- };
- Parser2.prototype.parseClassBody = function() {
- var node = this.createNode();
- var elementList = this.parseClassElementList();
- return this.finalize(node, new Node.ClassBody(elementList));
- };
- Parser2.prototype.parseClassDeclaration = function(identifierIsOptional) {
- var node = this.createNode();
- var previousStrict = this.context.strict;
- this.context.strict = true;
- this.expectKeyword("class");
- var id = identifierIsOptional && this.lookahead.type !== 3 ? null : this.parseVariableIdentifier();
- var superClass = null;
- if (this.matchKeyword("extends")) {
- this.nextToken();
- superClass = this.isolateCoverGrammar(this.parseLeftHandSideExpressionAllowCall);
- }
- var classBody = this.parseClassBody();
- this.context.strict = previousStrict;
- return this.finalize(node, new Node.ClassDeclaration(id, superClass, classBody));
- };
- Parser2.prototype.parseClassExpression = function() {
- var node = this.createNode();
- var previousStrict = this.context.strict;
- this.context.strict = true;
- this.expectKeyword("class");
- var id = this.lookahead.type === 3 ? this.parseVariableIdentifier() : null;
- var superClass = null;
- if (this.matchKeyword("extends")) {
- this.nextToken();
- superClass = this.isolateCoverGrammar(this.parseLeftHandSideExpressionAllowCall);
- }
- var classBody = this.parseClassBody();
- this.context.strict = previousStrict;
- return this.finalize(node, new Node.ClassExpression(id, superClass, classBody));
- };
- Parser2.prototype.parseModule = function() {
- this.context.strict = true;
- this.context.isModule = true;
- this.scanner.isModule = true;
- var node = this.createNode();
- var body = this.parseDirectivePrologues();
- while (this.lookahead.type !== 2) {
- body.push(this.parseStatementListItem());
- }
- return this.finalize(node, new Node.Module(body));
- };
- Parser2.prototype.parseScript = function() {
- var node = this.createNode();
- var body = this.parseDirectivePrologues();
- while (this.lookahead.type !== 2) {
- body.push(this.parseStatementListItem());
- }
- return this.finalize(node, new Node.Script(body));
- };
- Parser2.prototype.parseModuleSpecifier = function() {
- var node = this.createNode();
- if (this.lookahead.type !== 8) {
- this.throwError(messages_1.Messages.InvalidModuleSpecifier);
- }
- var token = this.nextToken();
- var raw = this.getTokenRaw(token);
- return this.finalize(node, new Node.Literal(token.value, raw));
- };
- Parser2.prototype.parseImportSpecifier = function() {
- var node = this.createNode();
- var imported;
- var local;
- if (this.lookahead.type === 3) {
- imported = this.parseVariableIdentifier();
- local = imported;
- if (this.matchContextualKeyword("as")) {
- this.nextToken();
- local = this.parseVariableIdentifier();
- }
- } else {
- imported = this.parseIdentifierName();
- local = imported;
- if (this.matchContextualKeyword("as")) {
- this.nextToken();
- local = this.parseVariableIdentifier();
- } else {
- this.throwUnexpectedToken(this.nextToken());
- }
- }
- return this.finalize(node, new Node.ImportSpecifier(local, imported));
- };
- Parser2.prototype.parseNamedImports = function() {
- this.expect("{");
- var specifiers = [];
- while (!this.match("}")) {
- specifiers.push(this.parseImportSpecifier());
- if (!this.match("}")) {
- this.expect(",");
- }
- }
- this.expect("}");
- return specifiers;
- };
- Parser2.prototype.parseImportDefaultSpecifier = function() {
- var node = this.createNode();
- var local = this.parseIdentifierName();
- return this.finalize(node, new Node.ImportDefaultSpecifier(local));
- };
- Parser2.prototype.parseImportNamespaceSpecifier = function() {
- var node = this.createNode();
- this.expect("*");
- if (!this.matchContextualKeyword("as")) {
- this.throwError(messages_1.Messages.NoAsAfterImportNamespace);
- }
- this.nextToken();
- var local = this.parseIdentifierName();
- return this.finalize(node, new Node.ImportNamespaceSpecifier(local));
- };
- Parser2.prototype.parseImportDeclaration = function() {
- if (this.context.inFunctionBody) {
- this.throwError(messages_1.Messages.IllegalImportDeclaration);
- }
- var node = this.createNode();
- this.expectKeyword("import");
- var src;
- var specifiers = [];
- if (this.lookahead.type === 8) {
- src = this.parseModuleSpecifier();
- } else {
- if (this.match("{")) {
- specifiers = specifiers.concat(this.parseNamedImports());
- } else if (this.match("*")) {
- specifiers.push(this.parseImportNamespaceSpecifier());
- } else if (this.isIdentifierName(this.lookahead) && !this.matchKeyword("default")) {
- specifiers.push(this.parseImportDefaultSpecifier());
- if (this.match(",")) {
- this.nextToken();
- if (this.match("*")) {
- specifiers.push(this.parseImportNamespaceSpecifier());
- } else if (this.match("{")) {
- specifiers = specifiers.concat(this.parseNamedImports());
- } else {
- this.throwUnexpectedToken(this.lookahead);
- }
- }
- } else {
- this.throwUnexpectedToken(this.nextToken());
- }
- if (!this.matchContextualKeyword("from")) {
- var message = this.lookahead.value ? messages_1.Messages.UnexpectedToken : messages_1.Messages.MissingFromClause;
- this.throwError(message, this.lookahead.value);
- }
- this.nextToken();
- src = this.parseModuleSpecifier();
- }
- this.consumeSemicolon();
- return this.finalize(node, new Node.ImportDeclaration(specifiers, src));
- };
- Parser2.prototype.parseExportSpecifier = function() {
- var node = this.createNode();
- var local = this.parseIdentifierName();
- var exported = local;
- if (this.matchContextualKeyword("as")) {
- this.nextToken();
- exported = this.parseIdentifierName();
- }
- return this.finalize(node, new Node.ExportSpecifier(local, exported));
- };
- Parser2.prototype.parseExportDeclaration = function() {
- if (this.context.inFunctionBody) {
- this.throwError(messages_1.Messages.IllegalExportDeclaration);
- }
- var node = this.createNode();
- this.expectKeyword("export");
- var exportDeclaration;
- if (this.matchKeyword("default")) {
- this.nextToken();
- if (this.matchKeyword("function")) {
- var declaration = this.parseFunctionDeclaration(true);
- exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration));
- } else if (this.matchKeyword("class")) {
- var declaration = this.parseClassDeclaration(true);
- exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration));
- } else if (this.matchContextualKeyword("async")) {
- var declaration = this.matchAsyncFunction() ? this.parseFunctionDeclaration(true) : this.parseAssignmentExpression();
- exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration));
- } else {
- if (this.matchContextualKeyword("from")) {
- this.throwError(messages_1.Messages.UnexpectedToken, this.lookahead.value);
- }
- var declaration = this.match("{") ? this.parseObjectInitializer() : this.match("[") ? this.parseArrayInitializer() : this.parseAssignmentExpression();
- this.consumeSemicolon();
- exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration));
- }
- } else if (this.match("*")) {
- this.nextToken();
- if (!this.matchContextualKeyword("from")) {
- var message = this.lookahead.value ? messages_1.Messages.UnexpectedToken : messages_1.Messages.MissingFromClause;
- this.throwError(message, this.lookahead.value);
- }
- this.nextToken();
- var src = this.parseModuleSpecifier();
- this.consumeSemicolon();
- exportDeclaration = this.finalize(node, new Node.ExportAllDeclaration(src));
- } else if (this.lookahead.type === 4) {
- var declaration = void 0;
- switch (this.lookahead.value) {
- case "let":
- case "const":
- declaration = this.parseLexicalDeclaration({ inFor: false });
- break;
- case "var":
- case "class":
- case "function":
- declaration = this.parseStatementListItem();
- break;
- default:
- this.throwUnexpectedToken(this.lookahead);
- }
- exportDeclaration = this.finalize(node, new Node.ExportNamedDeclaration(declaration, [], null));
- } else if (this.matchAsyncFunction()) {
- var declaration = this.parseFunctionDeclaration();
- exportDeclaration = this.finalize(node, new Node.ExportNamedDeclaration(declaration, [], null));
- } else {
- var specifiers = [];
- var source = null;
- var isExportFromIdentifier = false;
- this.expect("{");
- while (!this.match("}")) {
- isExportFromIdentifier = isExportFromIdentifier || this.matchKeyword("default");
- specifiers.push(this.parseExportSpecifier());
- if (!this.match("}")) {
- this.expect(",");
- }
- }
- this.expect("}");
- if (this.matchContextualKeyword("from")) {
- this.nextToken();
- source = this.parseModuleSpecifier();
- this.consumeSemicolon();
- } else if (isExportFromIdentifier) {
- var message = this.lookahead.value ? messages_1.Messages.UnexpectedToken : messages_1.Messages.MissingFromClause;
- this.throwError(message, this.lookahead.value);
- } else {
- this.consumeSemicolon();
- }
- exportDeclaration = this.finalize(node, new Node.ExportNamedDeclaration(null, specifiers, source));
- }
- return exportDeclaration;
- };
- return Parser2;
- }();
- exports2.Parser = Parser;
- },
- /* 9 */
- /***/
- function(module3, exports2) {
- "use strict";
- Object.defineProperty(exports2, "__esModule", { value: true });
- function assert2(condition, message) {
- if (!condition) {
- throw new Error("ASSERT: " + message);
- }
- }
- exports2.assert = assert2;
- },
- /* 10 */
- /***/
- function(module3, exports2) {
- "use strict";
- Object.defineProperty(exports2, "__esModule", { value: true });
- var ErrorHandler = function() {
- function ErrorHandler2() {
- this.errors = [];
- this.tolerant = false;
- }
- ErrorHandler2.prototype.recordError = function(error) {
- this.errors.push(error);
- };
- ErrorHandler2.prototype.tolerate = function(error) {
- if (this.tolerant) {
- this.recordError(error);
- } else {
- throw error;
- }
- };
- ErrorHandler2.prototype.constructError = function(msg, column) {
- var error = new Error(msg);
- try {
- throw error;
- } catch (base) {
- if (Object.create && Object.defineProperty) {
- error = Object.create(base);
- Object.defineProperty(error, "column", { value: column });
- }
- }
- return error;
- };
- ErrorHandler2.prototype.createError = function(index, line, col, description) {
- var msg = "Line " + line + ": " + description;
- var error = this.constructError(msg, col);
- error.index = index;
- error.lineNumber = line;
- error.description = description;
- return error;
- };
- ErrorHandler2.prototype.throwError = function(index, line, col, description) {
- throw this.createError(index, line, col, description);
- };
- ErrorHandler2.prototype.tolerateError = function(index, line, col, description) {
- var error = this.createError(index, line, col, description);
- if (this.tolerant) {
- this.recordError(error);
- } else {
- throw error;
- }
- };
- return ErrorHandler2;
- }();
- exports2.ErrorHandler = ErrorHandler;
- },
- /* 11 */
- /***/
- function(module3, exports2) {
- "use strict";
- Object.defineProperty(exports2, "__esModule", { value: true });
- exports2.Messages = {
- BadGetterArity: "Getter must not have any formal parameters",
- BadSetterArity: "Setter must have exactly one formal parameter",
- BadSetterRestParameter: "Setter function argument must not be a rest parameter",
- ConstructorIsAsync: "Class constructor may not be an async method",
- ConstructorSpecialMethod: "Class constructor may not be an accessor",
- DeclarationMissingInitializer: "Missing initializer in %0 declaration",
- DefaultRestParameter: "Unexpected token =",
- DuplicateBinding: "Duplicate binding %0",
- DuplicateConstructor: "A class may only have one constructor",
- DuplicateProtoProperty: "Duplicate __proto__ fields are not allowed in object literals",
- ForInOfLoopInitializer: "%0 loop variable declaration may not have an initializer",
- GeneratorInLegacyContext: "Generator declarations are not allowed in legacy contexts",
- IllegalBreak: "Illegal break statement",
- IllegalContinue: "Illegal continue statement",
- IllegalExportDeclaration: "Unexpected token",
- IllegalImportDeclaration: "Unexpected token",
- IllegalLanguageModeDirective: "Illegal 'use strict' directive in function with non-simple parameter list",
- IllegalReturn: "Illegal return statement",
- InvalidEscapedReservedWord: "Keyword must not contain escaped characters",
- InvalidHexEscapeSequence: "Invalid hexadecimal escape sequence",
- InvalidLHSInAssignment: "Invalid left-hand side in assignment",
- InvalidLHSInForIn: "Invalid left-hand side in for-in",
- InvalidLHSInForLoop: "Invalid left-hand side in for-loop",
- InvalidModuleSpecifier: "Unexpected token",
- InvalidRegExp: "Invalid regular expression",
- LetInLexicalBinding: "let is disallowed as a lexically bound name",
- MissingFromClause: "Unexpected token",
- MultipleDefaultsInSwitch: "More than one default clause in switch statement",
- NewlineAfterThrow: "Illegal newline after throw",
- NoAsAfterImportNamespace: "Unexpected token",
- NoCatchOrFinally: "Missing catch or finally after try",
- ParameterAfterRestParameter: "Rest parameter must be last formal parameter",
- Redeclaration: "%0 '%1' has already been declared",
- StaticPrototype: "Classes may not have static property named prototype",
- StrictCatchVariable: "Catch variable may not be eval or arguments in strict mode",
- StrictDelete: "Delete of an unqualified identifier in strict mode.",
- StrictFunction: "In strict mode code, functions can only be declared at top level or inside a block",
- StrictFunctionName: "Function name may not be eval or arguments in strict mode",
- StrictLHSAssignment: "Assignment to eval or arguments is not allowed in strict mode",
- StrictLHSPostfix: "Postfix increment/decrement may not have eval or arguments operand in strict mode",
- StrictLHSPrefix: "Prefix increment/decrement may not have eval or arguments operand in strict mode",
- StrictModeWith: "Strict mode code may not include a with statement",
- StrictOctalLiteral: "Octal literals are not allowed in strict mode.",
- StrictParamDupe: "Strict mode function may not have duplicate parameter names",
- StrictParamName: "Parameter name eval or arguments is not allowed in strict mode",
- StrictReservedWord: "Use of future reserved word in strict mode",
- StrictVarName: "Variable name may not be eval or arguments in strict mode",
- TemplateOctalLiteral: "Octal literals are not allowed in template strings.",
- UnexpectedEOS: "Unexpected end of input",
- UnexpectedIdentifier: "Unexpected identifier",
- UnexpectedNumber: "Unexpected number",
- UnexpectedReserved: "Unexpected reserved word",
- UnexpectedString: "Unexpected string",
- UnexpectedTemplate: "Unexpected quasi %0",
- UnexpectedToken: "Unexpected token %0",
- UnexpectedTokenIllegal: "Unexpected token ILLEGAL",
- UnknownLabel: "Undefined label '%0'",
- UnterminatedRegExp: "Invalid regular expression: missing /"
- };
- },
- /* 12 */
- /***/
- function(module3, exports2, __webpack_require__) {
- "use strict";
- Object.defineProperty(exports2, "__esModule", { value: true });
- var assert_1 = __webpack_require__(9);
- var character_1 = __webpack_require__(4);
- var messages_1 = __webpack_require__(11);
- function hexValue(ch) {
- return "0123456789abcdef".indexOf(ch.toLowerCase());
- }
- function octalValue(ch) {
- return "01234567".indexOf(ch);
- }
- var Scanner = function() {
- function Scanner2(code, handler) {
- this.source = code;
- this.errorHandler = handler;
- this.trackComment = false;
- this.isModule = false;
- this.length = code.length;
- this.index = 0;
- this.lineNumber = code.length > 0 ? 1 : 0;
- this.lineStart = 0;
- this.curlyStack = [];
- }
- Scanner2.prototype.saveState = function() {
- return {
- index: this.index,
- lineNumber: this.lineNumber,
- lineStart: this.lineStart
- };
- };
- Scanner2.prototype.restoreState = function(state) {
- this.index = state.index;
- this.lineNumber = state.lineNumber;
- this.lineStart = state.lineStart;
- };
- Scanner2.prototype.eof = function() {
- return this.index >= this.length;
- };
- Scanner2.prototype.throwUnexpectedToken = function(message) {
- if (message === void 0) {
- message = messages_1.Messages.UnexpectedTokenIllegal;
- }
- return this.errorHandler.throwError(this.index, this.lineNumber, this.index - this.lineStart + 1, message);
- };
- Scanner2.prototype.tolerateUnexpectedToken = function(message) {
- if (message === void 0) {
- message = messages_1.Messages.UnexpectedTokenIllegal;
- }
- this.errorHandler.tolerateError(this.index, this.lineNumber, this.index - this.lineStart + 1, message);
- };
- Scanner2.prototype.skipSingleLineComment = function(offset) {
- var comments = [];
- var start, loc;
- if (this.trackComment) {
- comments = [];
- start = this.index - offset;
- loc = {
- start: {
- line: this.lineNumber,
- column: this.index - this.lineStart - offset
- },
- end: {}
- };
- }
- while (!this.eof()) {
- var ch = this.source.charCodeAt(this.index);
- ++this.index;
- if (character_1.Character.isLineTerminator(ch)) {
- if (this.trackComment) {
- loc.end = {
- line: this.lineNumber,
- column: this.index - this.lineStart - 1
- };
- var entry = {
- multiLine: false,
- slice: [start + offset, this.index - 1],
- range: [start, this.index - 1],
- loc
- };
- comments.push(entry);
- }
- if (ch === 13 && this.source.charCodeAt(this.index) === 10) {
- ++this.index;
- }
- ++this.lineNumber;
- this.lineStart = this.index;
- return comments;
- }
- }
- if (this.trackComment) {
- loc.end = {
- line: this.lineNumber,
- column: this.index - this.lineStart
- };
- var entry = {
- multiLine: false,
- slice: [start + offset, this.index],
- range: [start, this.index],
- loc
- };
- comments.push(entry);
- }
- return comments;
- };
- Scanner2.prototype.skipMultiLineComment = function() {
- var comments = [];
- var start, loc;
- if (this.trackComment) {
- comments = [];
- start = this.index - 2;
- loc = {
- start: {
- line: this.lineNumber,
- column: this.index - this.lineStart - 2
- },
- end: {}
- };
- }
- while (!this.eof()) {
- var ch = this.source.charCodeAt(this.index);
- if (character_1.Character.isLineTerminator(ch)) {
- if (ch === 13 && this.source.charCodeAt(this.index + 1) === 10) {
- ++this.index;
- }
- ++this.lineNumber;
- ++this.index;
- this.lineStart = this.index;
- } else if (ch === 42) {
- if (this.source.charCodeAt(this.index + 1) === 47) {
- this.index += 2;
- if (this.trackComment) {
- loc.end = {
- line: this.lineNumber,
- column: this.index - this.lineStart
- };
- var entry = {
- multiLine: true,
- slice: [start + 2, this.index - 2],
- range: [start, this.index],
- loc
- };
- comments.push(entry);
- }
- return comments;
- }
- ++this.index;
- } else {
- ++this.index;
- }
- }
- if (this.trackComment) {
- loc.end = {
- line: this.lineNumber,
- column: this.index - this.lineStart
- };
- var entry = {
- multiLine: true,
- slice: [start + 2, this.index],
- range: [start, this.index],
- loc
- };
- comments.push(entry);
- }
- this.tolerateUnexpectedToken();
- return comments;
- };
- Scanner2.prototype.scanComments = function() {
- var comments;
- if (this.trackComment) {
- comments = [];
- }
- var start = this.index === 0;
- while (!this.eof()) {
- var ch = this.source.charCodeAt(this.index);
- if (character_1.Character.isWhiteSpace(ch)) {
- ++this.index;
- } else if (character_1.Character.isLineTerminator(ch)) {
- ++this.index;
- if (ch === 13 && this.source.charCodeAt(this.index) === 10) {
- ++this.index;
- }
- ++this.lineNumber;
- this.lineStart = this.index;
- start = true;
- } else if (ch === 47) {
- ch = this.source.charCodeAt(this.index + 1);
- if (ch === 47) {
- this.index += 2;
- var comment = this.skipSingleLineComment(2);
- if (this.trackComment) {
- comments = comments.concat(comment);
- }
- start = true;
- } else if (ch === 42) {
- this.index += 2;
- var comment = this.skipMultiLineComment();
- if (this.trackComment) {
- comments = comments.concat(comment);
- }
- } else {
- break;
- }
- } else if (start && ch === 45) {
- if (this.source.charCodeAt(this.index + 1) === 45 && this.source.charCodeAt(this.index + 2) === 62) {
- this.index += 3;
- var comment = this.skipSingleLineComment(3);
- if (this.trackComment) {
- comments = comments.concat(comment);
- }
- } else {
- break;
- }
- } else if (ch === 60 && !this.isModule) {
- if (this.source.slice(this.index + 1, this.index + 4) === "!--") {
- this.index += 4;
- var comment = this.skipSingleLineComment(4);
- if (this.trackComment) {
- comments = comments.concat(comment);
- }
- } else {
- break;
- }
- } else {
- break;
- }
- }
- return comments;
- };
- Scanner2.prototype.isFutureReservedWord = function(id) {
- switch (id) {
- case "enum":
- case "export":
- case "import":
- case "super":
- return true;
- default:
- return false;
- }
- };
- Scanner2.prototype.isStrictModeReservedWord = function(id) {
- switch (id) {
- case "implements":
- case "interface":
- case "package":
- case "private":
- case "protected":
- case "public":
- case "static":
- case "yield":
- case "let":
- return true;
- default:
- return false;
- }
- };
- Scanner2.prototype.isRestrictedWord = function(id) {
- return id === "eval" || id === "arguments";
- };
- Scanner2.prototype.isKeyword = function(id) {
- switch (id.length) {
- case 2:
- return id === "if" || id === "in" || id === "do";
- case 3:
- return id === "var" || id === "for" || id === "new" || id === "try" || id === "let";
- case 4:
- return id === "this" || id === "else" || id === "case" || id === "void" || id === "with" || id === "enum";
- case 5:
- return id === "while" || id === "break" || id === "catch" || id === "throw" || id === "const" || id === "yield" || id === "class" || id === "super";
- case 6:
- return id === "return" || id === "typeof" || id === "delete" || id === "switch" || id === "export" || id === "import";
- case 7:
- return id === "default" || id === "finally" || id === "extends";
- case 8:
- return id === "function" || id === "continue" || id === "debugger";
- case 10:
- return id === "instanceof";
- default:
- return false;
- }
- };
- Scanner2.prototype.codePointAt = function(i) {
- var cp = this.source.charCodeAt(i);
- if (cp >= 55296 && cp <= 56319) {
- var second = this.source.charCodeAt(i + 1);
- if (second >= 56320 && second <= 57343) {
- var first = cp;
- cp = (first - 55296) * 1024 + second - 56320 + 65536;
- }
- }
- return cp;
- };
- Scanner2.prototype.scanHexEscape = function(prefix) {
- var len = prefix === "u" ? 4 : 2;
- var code = 0;
- for (var i = 0; i < len; ++i) {
- if (!this.eof() && character_1.Character.isHexDigit(this.source.charCodeAt(this.index))) {
- code = code * 16 + hexValue(this.source[this.index++]);
- } else {
- return null;
- }
- }
- return String.fromCharCode(code);
- };
- Scanner2.prototype.scanUnicodeCodePointEscape = function() {
- var ch = this.source[this.index];
- var code = 0;
- if (ch === "}") {
- this.throwUnexpectedToken();
- }
- while (!this.eof()) {
- ch = this.source[this.index++];
- if (!character_1.Character.isHexDigit(ch.charCodeAt(0))) {
- break;
- }
- code = code * 16 + hexValue(ch);
- }
- if (code > 1114111 || ch !== "}") {
- this.throwUnexpectedToken();
- }
- return character_1.Character.fromCodePoint(code);
- };
- Scanner2.prototype.getIdentifier = function() {
- var start = this.index++;
- while (!this.eof()) {
- var ch = this.source.charCodeAt(this.index);
- if (ch === 92) {
- this.index = start;
- return this.getComplexIdentifier();
- } else if (ch >= 55296 && ch < 57343) {
- this.index = start;
- return this.getComplexIdentifier();
- }
- if (character_1.Character.isIdentifierPart(ch)) {
- ++this.index;
- } else {
- break;
- }
- }
- return this.source.slice(start, this.index);
- };
- Scanner2.prototype.getComplexIdentifier = function() {
- var cp = this.codePointAt(this.index);
- var id = character_1.Character.fromCodePoint(cp);
- this.index += id.length;
- var ch;
- if (cp === 92) {
- if (this.source.charCodeAt(this.index) !== 117) {
- this.throwUnexpectedToken();
- }
- ++this.index;
- if (this.source[this.index] === "{") {
- ++this.index;
- ch = this.scanUnicodeCodePointEscape();
- } else {
- ch = this.scanHexEscape("u");
- if (ch === null || ch === "\\" || !character_1.Character.isIdentifierStart(ch.charCodeAt(0))) {
- this.throwUnexpectedToken();
- }
- }
- id = ch;
- }
- while (!this.eof()) {
- cp = this.codePointAt(this.index);
- if (!character_1.Character.isIdentifierPart(cp)) {
- break;
- }
- ch = character_1.Character.fromCodePoint(cp);
- id += ch;
- this.index += ch.length;
- if (cp === 92) {
- id = id.substr(0, id.length - 1);
- if (this.source.charCodeAt(this.index) !== 117) {
- this.throwUnexpectedToken();
- }
- ++this.index;
- if (this.source[this.index] === "{") {
- ++this.index;
- ch = this.scanUnicodeCodePointEscape();
- } else {
- ch = this.scanHexEscape("u");
- if (ch === null || ch === "\\" || !character_1.Character.isIdentifierPart(ch.charCodeAt(0))) {
- this.throwUnexpectedToken();
- }
- }
- id += ch;
- }
- }
- return id;
- };
- Scanner2.prototype.octalToDecimal = function(ch) {
- var octal = ch !== "0";
- var code = octalValue(ch);
- if (!this.eof() && character_1.Character.isOctalDigit(this.source.charCodeAt(this.index))) {
- octal = true;
- code = code * 8 + octalValue(this.source[this.index++]);
- if ("0123".indexOf(ch) >= 0 && !this.eof() && character_1.Character.isOctalDigit(this.source.charCodeAt(this.index))) {
- code = code * 8 + octalValue(this.source[this.index++]);
- }
- }
- return {
- code,
- octal
- };
- };
- Scanner2.prototype.scanIdentifier = function() {
- var type;
- var start = this.index;
- var id = this.source.charCodeAt(start) === 92 ? this.getComplexIdentifier() : this.getIdentifier();
- if (id.length === 1) {
- type = 3;
- } else if (this.isKeyword(id)) {
- type = 4;
- } else if (id === "null") {
- type = 5;
- } else if (id === "true" || id === "false") {
- type = 1;
- } else {
- type = 3;
- }
- if (type !== 3 && start + id.length !== this.index) {
- var restore = this.index;
- this.index = start;
- this.tolerateUnexpectedToken(messages_1.Messages.InvalidEscapedReservedWord);
- this.index = restore;
- }
- return {
- type,
- value: id,
- lineNumber: this.lineNumber,
- lineStart: this.lineStart,
- start,
- end: this.index
- };
- };
- Scanner2.prototype.scanPunctuator = function() {
- var start = this.index;
- var str = this.source[this.index];
- switch (str) {
- case "(":
- case "{":
- if (str === "{") {
- this.curlyStack.push("{");
- }
- ++this.index;
- break;
- case ".":
- ++this.index;
- if (this.source[this.index] === "." && this.source[this.index + 1] === ".") {
- this.index += 2;
- str = "...";
- }
- break;
- case "}":
- ++this.index;
- this.curlyStack.pop();
- break;
- case ")":
- case ";":
- case ",":
- case "[":
- case "]":
- case ":":
- case "?":
- case "~":
- ++this.index;
- break;
- default:
- str = this.source.substr(this.index, 4);
- if (str === ">>>=") {
- this.index += 4;
- } else {
- str = str.substr(0, 3);
- if (str === "===" || str === "!==" || str === ">>>" || str === "<<=" || str === ">>=" || str === "**=") {
- this.index += 3;
- } else {
- str = str.substr(0, 2);
- if (str === "&&" || str === "||" || str === "==" || str === "!=" || str === "+=" || str === "-=" || str === "*=" || str === "/=" || str === "++" || str === "--" || str === "<<" || str === ">>" || str === "&=" || str === "|=" || str === "^=" || str === "%=" || str === "<=" || str === ">=" || str === "=>" || str === "**") {
- this.index += 2;
- } else {
- str = this.source[this.index];
- if ("<>=!+-*%&|^/".indexOf(str) >= 0) {
- ++this.index;
- }
- }
- }
- }
- }
- if (this.index === start) {
- this.throwUnexpectedToken();
- }
- return {
- type: 7,
- value: str,
- lineNumber: this.lineNumber,
- lineStart: this.lineStart,
- start,
- end: this.index
- };
- };
- Scanner2.prototype.scanHexLiteral = function(start) {
- var num = "";
- while (!this.eof()) {
- if (!character_1.Character.isHexDigit(this.source.charCodeAt(this.index))) {
- break;
- }
- num += this.source[this.index++];
- }
- if (num.length === 0) {
- this.throwUnexpectedToken();
- }
- if (character_1.Character.isIdentifierStart(this.source.charCodeAt(this.index))) {
- this.throwUnexpectedToken();
- }
- return {
- type: 6,
- value: parseInt("0x" + num, 16),
- lineNumber: this.lineNumber,
- lineStart: this.lineStart,
- start,
- end: this.index
- };
- };
- Scanner2.prototype.scanBinaryLiteral = function(start) {
- var num = "";
- var ch;
- while (!this.eof()) {
- ch = this.source[this.index];
- if (ch !== "0" && ch !== "1") {
- break;
- }
- num += this.source[this.index++];
- }
- if (num.length === 0) {
- this.throwUnexpectedToken();
- }
- if (!this.eof()) {
- ch = this.source.charCodeAt(this.index);
- if (character_1.Character.isIdentifierStart(ch) || character_1.Character.isDecimalDigit(ch)) {
- this.throwUnexpectedToken();
- }
- }
- return {
- type: 6,
- value: parseInt(num, 2),
- lineNumber: this.lineNumber,
- lineStart: this.lineStart,
- start,
- end: this.index
- };
- };
- Scanner2.prototype.scanOctalLiteral = function(prefix, start) {
- var num = "";
- var octal = false;
- if (character_1.Character.isOctalDigit(prefix.charCodeAt(0))) {
- octal = true;
- num = "0" + this.source[this.index++];
- } else {
- ++this.index;
- }
- while (!this.eof()) {
- if (!character_1.Character.isOctalDigit(this.source.charCodeAt(this.index))) {
- break;
- }
- num += this.source[this.index++];
- }
- if (!octal && num.length === 0) {
- this.throwUnexpectedToken();
- }
- if (character_1.Character.isIdentifierStart(this.source.charCodeAt(this.index)) || character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index))) {
- this.throwUnexpectedToken();
- }
- return {
- type: 6,
- value: parseInt(num, 8),
- octal,
- lineNumber: this.lineNumber,
- lineStart: this.lineStart,
- start,
- end: this.index
- };
- };
- Scanner2.prototype.isImplicitOctalLiteral = function() {
- for (var i = this.index + 1; i < this.length; ++i) {
- var ch = this.source[i];
- if (ch === "8" || ch === "9") {
- return false;
- }
- if (!character_1.Character.isOctalDigit(ch.charCodeAt(0))) {
- return true;
- }
- }
- return true;
- };
- Scanner2.prototype.scanNumericLiteral = function() {
- var start = this.index;
- var ch = this.source[start];
- assert_1.assert(character_1.Character.isDecimalDigit(ch.charCodeAt(0)) || ch === ".", "Numeric literal must start with a decimal digit or a decimal point");
- var num = "";
- if (ch !== ".") {
- num = this.source[this.index++];
- ch = this.source[this.index];
- if (num === "0") {
- if (ch === "x" || ch === "X") {
- ++this.index;
- return this.scanHexLiteral(start);
- }
- if (ch === "b" || ch === "B") {
- ++this.index;
- return this.scanBinaryLiteral(start);
- }
- if (ch === "o" || ch === "O") {
- return this.scanOctalLiteral(ch, start);
- }
- if (ch && character_1.Character.isOctalDigit(ch.charCodeAt(0))) {
- if (this.isImplicitOctalLiteral()) {
- return this.scanOctalLiteral(ch, start);
- }
- }
- }
- while (character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index))) {
- num += this.source[this.index++];
- }
- ch = this.source[this.index];
- }
- if (ch === ".") {
- num += this.source[this.index++];
- while (character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index))) {
- num += this.source[this.index++];
- }
- ch = this.source[this.index];
- }
- if (ch === "e" || ch === "E") {
- num += this.source[this.index++];
- ch = this.source[this.index];
- if (ch === "+" || ch === "-") {
- num += this.source[this.index++];
- }
- if (character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index))) {
- while (character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index))) {
- num += this.source[this.index++];
- }
- } else {
- this.throwUnexpectedToken();
- }
- }
- if (character_1.Character.isIdentifierStart(this.source.charCodeAt(this.index))) {
- this.throwUnexpectedToken();
- }
- return {
- type: 6,
- value: parseFloat(num),
- lineNumber: this.lineNumber,
- lineStart: this.lineStart,
- start,
- end: this.index
- };
- };
- Scanner2.prototype.scanStringLiteral = function() {
- var start = this.index;
- var quote = this.source[start];
- assert_1.assert(quote === "'" || quote === '"', "String literal must starts with a quote");
- ++this.index;
- var octal = false;
- var str = "";
- while (!this.eof()) {
- var ch = this.source[this.index++];
- if (ch === quote) {
- quote = "";
- break;
- } else if (ch === "\\") {
- ch = this.source[this.index++];
- if (!ch || !character_1.Character.isLineTerminator(ch.charCodeAt(0))) {
- switch (ch) {
- case "u":
- if (this.source[this.index] === "{") {
- ++this.index;
- str += this.scanUnicodeCodePointEscape();
- } else {
- var unescaped_1 = this.scanHexEscape(ch);
- if (unescaped_1 === null) {
- this.throwUnexpectedToken();
- }
- str += unescaped_1;
- }
- break;
- case "x":
- var unescaped = this.scanHexEscape(ch);
- if (unescaped === null) {
- this.throwUnexpectedToken(messages_1.Messages.InvalidHexEscapeSequence);
- }
- str += unescaped;
- break;
- case "n":
- str += "\n";
- break;
- case "r":
- str += "\r";
- break;
- case "t":
- str += " ";
- break;
- case "b":
- str += "\b";
- break;
- case "f":
- str += "\f";
- break;
- case "v":
- str += "\v";
- break;
- case "8":
- case "9":
- str += ch;
- this.tolerateUnexpectedToken();
- break;
- default:
- if (ch && character_1.Character.isOctalDigit(ch.charCodeAt(0))) {
- var octToDec = this.octalToDecimal(ch);
- octal = octToDec.octal || octal;
- str += String.fromCharCode(octToDec.code);
- } else {
- str += ch;
- }
- break;
- }
- } else {
- ++this.lineNumber;
- if (ch === "\r" && this.source[this.index] === "\n") {
- ++this.index;
- }
- this.lineStart = this.index;
- }
- } else if (character_1.Character.isLineTerminator(ch.charCodeAt(0))) {
- break;
- } else {
- str += ch;
- }
- }
- if (quote !== "") {
- this.index = start;
- this.throwUnexpectedToken();
- }
- return {
- type: 8,
- value: str,
- octal,
- lineNumber: this.lineNumber,
- lineStart: this.lineStart,
- start,
- end: this.index
- };
- };
- Scanner2.prototype.scanTemplate = function() {
- var cooked = "";
- var terminated = false;
- var start = this.index;
- var head = this.source[start] === "`";
- var tail = false;
- var rawOffset = 2;
- ++this.index;
- while (!this.eof()) {
- var ch = this.source[this.index++];
- if (ch === "`") {
- rawOffset = 1;
- tail = true;
- terminated = true;
- break;
- } else if (ch === "$") {
- if (this.source[this.index] === "{") {
- this.curlyStack.push("${");
- ++this.index;
- terminated = true;
- break;
- }
- cooked += ch;
- } else if (ch === "\\") {
- ch = this.source[this.index++];
- if (!character_1.Character.isLineTerminator(ch.charCodeAt(0))) {
- switch (ch) {
- case "n":
- cooked += "\n";
- break;
- case "r":
- cooked += "\r";
- break;
- case "t":
- cooked += " ";
- break;
- case "u":
- if (this.source[this.index] === "{") {
- ++this.index;
- cooked += this.scanUnicodeCodePointEscape();
- } else {
- var restore = this.index;
- var unescaped_2 = this.scanHexEscape(ch);
- if (unescaped_2 !== null) {
- cooked += unescaped_2;
- } else {
- this.index = restore;
- cooked += ch;
- }
- }
- break;
- case "x":
- var unescaped = this.scanHexEscape(ch);
- if (unescaped === null) {
- this.throwUnexpectedToken(messages_1.Messages.InvalidHexEscapeSequence);
- }
- cooked += unescaped;
- break;
- case "b":
- cooked += "\b";
- break;
- case "f":
- cooked += "\f";
- break;
- case "v":
- cooked += "\v";
- break;
- default:
- if (ch === "0") {
- if (character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index))) {
- this.throwUnexpectedToken(messages_1.Messages.TemplateOctalLiteral);
- }
- cooked += "\0";
- } else if (character_1.Character.isOctalDigit(ch.charCodeAt(0))) {
- this.throwUnexpectedToken(messages_1.Messages.TemplateOctalLiteral);
- } else {
- cooked += ch;
- }
- break;
- }
- } else {
- ++this.lineNumber;
- if (ch === "\r" && this.source[this.index] === "\n") {
- ++this.index;
- }
- this.lineStart = this.index;
- }
- } else if (character_1.Character.isLineTerminator(ch.charCodeAt(0))) {
- ++this.lineNumber;
- if (ch === "\r" && this.source[this.index] === "\n") {
- ++this.index;
- }
- this.lineStart = this.index;
- cooked += "\n";
- } else {
- cooked += ch;
- }
- }
- if (!terminated) {
- this.throwUnexpectedToken();
- }
- if (!head) {
- this.curlyStack.pop();
- }
- return {
- type: 10,
- value: this.source.slice(start + 1, this.index - rawOffset),
- cooked,
- head,
- tail,
- lineNumber: this.lineNumber,
- lineStart: this.lineStart,
- start,
- end: this.index
- };
- };
- Scanner2.prototype.testRegExp = function(pattern, flags) {
- var astralSubstitute = "\uFFFF";
- var tmp = pattern;
- var self2 = this;
- if (flags.indexOf("u") >= 0) {
- tmp = tmp.replace(/\\u\{([0-9a-fA-F]+)\}|\\u([a-fA-F0-9]{4})/g, function($0, $1, $2) {
- var codePoint = parseInt($1 || $2, 16);
- if (codePoint > 1114111) {
- self2.throwUnexpectedToken(messages_1.Messages.InvalidRegExp);
- }
- if (codePoint <= 65535) {
- return String.fromCharCode(codePoint);
- }
- return astralSubstitute;
- }).replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g, astralSubstitute);
- }
- try {
- RegExp(tmp);
- } catch (e) {
- this.throwUnexpectedToken(messages_1.Messages.InvalidRegExp);
- }
- try {
- return new RegExp(pattern, flags);
- } catch (exception) {
- return null;
- }
- };
- Scanner2.prototype.scanRegExpBody = function() {
- var ch = this.source[this.index];
- assert_1.assert(ch === "/", "Regular expression literal must start with a slash");
- var str = this.source[this.index++];
- var classMarker = false;
- var terminated = false;
- while (!this.eof()) {
- ch = this.source[this.index++];
- str += ch;
- if (ch === "\\") {
- ch = this.source[this.index++];
- if (character_1.Character.isLineTerminator(ch.charCodeAt(0))) {
- this.throwUnexpectedToken(messages_1.Messages.UnterminatedRegExp);
- }
- str += ch;
- } else if (character_1.Character.isLineTerminator(ch.charCodeAt(0))) {
- this.throwUnexpectedToken(messages_1.Messages.UnterminatedRegExp);
- } else if (classMarker) {
- if (ch === "]") {
- classMarker = false;
- }
- } else {
- if (ch === "/") {
- terminated = true;
- break;
- } else if (ch === "[") {
- classMarker = true;
- }
- }
- }
- if (!terminated) {
- this.throwUnexpectedToken(messages_1.Messages.UnterminatedRegExp);
- }
- return str.substr(1, str.length - 2);
- };
- Scanner2.prototype.scanRegExpFlags = function() {
- var str = "";
- var flags = "";
- while (!this.eof()) {
- var ch = this.source[this.index];
- if (!character_1.Character.isIdentifierPart(ch.charCodeAt(0))) {
- break;
- }
- ++this.index;
- if (ch === "\\" && !this.eof()) {
- ch = this.source[this.index];
- if (ch === "u") {
- ++this.index;
- var restore = this.index;
- var char = this.scanHexEscape("u");
- if (char !== null) {
- flags += char;
- for (str += "\\u"; restore < this.index; ++restore) {
- str += this.source[restore];
- }
- } else {
- this.index = restore;
- flags += "u";
- str += "\\u";
- }
- this.tolerateUnexpectedToken();
- } else {
- str += "\\";
- this.tolerateUnexpectedToken();
- }
- } else {
- flags += ch;
- str += ch;
- }
- }
- return flags;
- };
- Scanner2.prototype.scanRegExp = function() {
- var start = this.index;
- var pattern = this.scanRegExpBody();
- var flags = this.scanRegExpFlags();
- var value = this.testRegExp(pattern, flags);
- return {
- type: 9,
- value: "",
- pattern,
- flags,
- regex: value,
- lineNumber: this.lineNumber,
- lineStart: this.lineStart,
- start,
- end: this.index
- };
- };
- Scanner2.prototype.lex = function() {
- if (this.eof()) {
- return {
- type: 2,
- value: "",
- lineNumber: this.lineNumber,
- lineStart: this.lineStart,
- start: this.index,
- end: this.index
- };
- }
- var cp = this.source.charCodeAt(this.index);
- if (character_1.Character.isIdentifierStart(cp)) {
- return this.scanIdentifier();
- }
- if (cp === 40 || cp === 41 || cp === 59) {
- return this.scanPunctuator();
- }
- if (cp === 39 || cp === 34) {
- return this.scanStringLiteral();
- }
- if (cp === 46) {
- if (character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index + 1))) {
- return this.scanNumericLiteral();
- }
- return this.scanPunctuator();
- }
- if (character_1.Character.isDecimalDigit(cp)) {
- return this.scanNumericLiteral();
- }
- if (cp === 96 || cp === 125 && this.curlyStack[this.curlyStack.length - 1] === "${") {
- return this.scanTemplate();
- }
- if (cp >= 55296 && cp < 57343) {
- if (character_1.Character.isIdentifierStart(this.codePointAt(this.index))) {
- return this.scanIdentifier();
- }
- }
- return this.scanPunctuator();
- };
- return Scanner2;
- }();
- exports2.Scanner = Scanner;
- },
- /* 13 */
- /***/
- function(module3, exports2) {
- "use strict";
- Object.defineProperty(exports2, "__esModule", { value: true });
- exports2.TokenName = {};
- exports2.TokenName[
- 1
- /* BooleanLiteral */
- ] = "Boolean";
- exports2.TokenName[
- 2
- /* EOF */
- ] = "";
- exports2.TokenName[
- 3
- /* Identifier */
- ] = "Identifier";
- exports2.TokenName[
- 4
- /* Keyword */
- ] = "Keyword";
- exports2.TokenName[
- 5
- /* NullLiteral */
- ] = "Null";
- exports2.TokenName[
- 6
- /* NumericLiteral */
- ] = "Numeric";
- exports2.TokenName[
- 7
- /* Punctuator */
- ] = "Punctuator";
- exports2.TokenName[
- 8
- /* StringLiteral */
- ] = "String";
- exports2.TokenName[
- 9
- /* RegularExpression */
- ] = "RegularExpression";
- exports2.TokenName[
- 10
- /* Template */
- ] = "Template";
- },
- /* 14 */
- /***/
- function(module3, exports2) {
- "use strict";
- Object.defineProperty(exports2, "__esModule", { value: true });
- exports2.XHTMLEntities = {
- quot: '"',
- amp: "&",
- apos: "'",
- gt: ">",
- nbsp: "\xA0",
- iexcl: "\xA1",
- cent: "\xA2",
- pound: "\xA3",
- curren: "\xA4",
- yen: "\xA5",
- brvbar: "\xA6",
- sect: "\xA7",
- uml: "\xA8",
- copy: "\xA9",
- ordf: "\xAA",
- laquo: "\xAB",
- not: "\xAC",
- shy: "\xAD",
- reg: "\xAE",
- macr: "\xAF",
- deg: "\xB0",
- plusmn: "\xB1",
- sup2: "\xB2",
- sup3: "\xB3",
- acute: "\xB4",
- micro: "\xB5",
- para: "\xB6",
- middot: "\xB7",
- cedil: "\xB8",
- sup1: "\xB9",
- ordm: "\xBA",
- raquo: "\xBB",
- frac14: "\xBC",
- frac12: "\xBD",
- frac34: "\xBE",
- iquest: "\xBF",
- Agrave: "\xC0",
- Aacute: "\xC1",
- Acirc: "\xC2",
- Atilde: "\xC3",
- Auml: "\xC4",
- Aring: "\xC5",
- AElig: "\xC6",
- Ccedil: "\xC7",
- Egrave: "\xC8",
- Eacute: "\xC9",
- Ecirc: "\xCA",
- Euml: "\xCB",
- Igrave: "\xCC",
- Iacute: "\xCD",
- Icirc: "\xCE",
- Iuml: "\xCF",
- ETH: "\xD0",
- Ntilde: "\xD1",
- Ograve: "\xD2",
- Oacute: "\xD3",
- Ocirc: "\xD4",
- Otilde: "\xD5",
- Ouml: "\xD6",
- times: "\xD7",
- Oslash: "\xD8",
- Ugrave: "\xD9",
- Uacute: "\xDA",
- Ucirc: "\xDB",
- Uuml: "\xDC",
- Yacute: "\xDD",
- THORN: "\xDE",
- szlig: "\xDF",
- agrave: "\xE0",
- aacute: "\xE1",
- acirc: "\xE2",
- atilde: "\xE3",
- auml: "\xE4",
- aring: "\xE5",
- aelig: "\xE6",
- ccedil: "\xE7",
- egrave: "\xE8",
- eacute: "\xE9",
- ecirc: "\xEA",
- euml: "\xEB",
- igrave: "\xEC",
- iacute: "\xED",
- icirc: "\xEE",
- iuml: "\xEF",
- eth: "\xF0",
- ntilde: "\xF1",
- ograve: "\xF2",
- oacute: "\xF3",
- ocirc: "\xF4",
- otilde: "\xF5",
- ouml: "\xF6",
- divide: "\xF7",
- oslash: "\xF8",
- ugrave: "\xF9",
- uacute: "\xFA",
- ucirc: "\xFB",
- uuml: "\xFC",
- yacute: "\xFD",
- thorn: "\xFE",
- yuml: "\xFF",
- OElig: "\u0152",
- oelig: "\u0153",
- Scaron: "\u0160",
- scaron: "\u0161",
- Yuml: "\u0178",
- fnof: "\u0192",
- circ: "\u02C6",
- tilde: "\u02DC",
- Alpha: "\u0391",
- Beta: "\u0392",
- Gamma: "\u0393",
- Delta: "\u0394",
- Epsilon: "\u0395",
- Zeta: "\u0396",
- Eta: "\u0397",
- Theta: "\u0398",
- Iota: "\u0399",
- Kappa: "\u039A",
- Lambda: "\u039B",
- Mu: "\u039C",
- Nu: "\u039D",
- Xi: "\u039E",
- Omicron: "\u039F",
- Pi: "\u03A0",
- Rho: "\u03A1",
- Sigma: "\u03A3",
- Tau: "\u03A4",
- Upsilon: "\u03A5",
- Phi: "\u03A6",
- Chi: "\u03A7",
- Psi: "\u03A8",
- Omega: "\u03A9",
- alpha: "\u03B1",
- beta: "\u03B2",
- gamma: "\u03B3",
- delta: "\u03B4",
- epsilon: "\u03B5",
- zeta: "\u03B6",
- eta: "\u03B7",
- theta: "\u03B8",
- iota: "\u03B9",
- kappa: "\u03BA",
- lambda: "\u03BB",
- mu: "\u03BC",
- nu: "\u03BD",
- xi: "\u03BE",
- omicron: "\u03BF",
- pi: "\u03C0",
- rho: "\u03C1",
- sigmaf: "\u03C2",
- sigma: "\u03C3",
- tau: "\u03C4",
- upsilon: "\u03C5",
- phi: "\u03C6",
- chi: "\u03C7",
- psi: "\u03C8",
- omega: "\u03C9",
- thetasym: "\u03D1",
- upsih: "\u03D2",
- piv: "\u03D6",
- ensp: "\u2002",
- emsp: "\u2003",
- thinsp: "\u2009",
- zwnj: "\u200C",
- zwj: "\u200D",
- lrm: "\u200E",
- rlm: "\u200F",
- ndash: "\u2013",
- mdash: "\u2014",
- lsquo: "\u2018",
- rsquo: "\u2019",
- sbquo: "\u201A",
- ldquo: "\u201C",
- rdquo: "\u201D",
- bdquo: "\u201E",
- dagger: "\u2020",
- Dagger: "\u2021",
- bull: "\u2022",
- hellip: "\u2026",
- permil: "\u2030",
- prime: "\u2032",
- Prime: "\u2033",
- lsaquo: "\u2039",
- rsaquo: "\u203A",
- oline: "\u203E",
- frasl: "\u2044",
- euro: "\u20AC",
- image: "\u2111",
- weierp: "\u2118",
- real: "\u211C",
- trade: "\u2122",
- alefsym: "\u2135",
- larr: "\u2190",
- uarr: "\u2191",
- rarr: "\u2192",
- darr: "\u2193",
- harr: "\u2194",
- crarr: "\u21B5",
- lArr: "\u21D0",
- uArr: "\u21D1",
- rArr: "\u21D2",
- dArr: "\u21D3",
- hArr: "\u21D4",
- forall: "\u2200",
- part: "\u2202",
- exist: "\u2203",
- empty: "\u2205",
- nabla: "\u2207",
- isin: "\u2208",
- notin: "\u2209",
- ni: "\u220B",
- prod: "\u220F",
- sum: "\u2211",
- minus: "\u2212",
- lowast: "\u2217",
- radic: "\u221A",
- prop: "\u221D",
- infin: "\u221E",
- ang: "\u2220",
- and: "\u2227",
- or: "\u2228",
- cap: "\u2229",
- cup: "\u222A",
- int: "\u222B",
- there4: "\u2234",
- sim: "\u223C",
- cong: "\u2245",
- asymp: "\u2248",
- ne: "\u2260",
- equiv: "\u2261",
- le: "\u2264",
- ge: "\u2265",
- sub: "\u2282",
- sup: "\u2283",
- nsub: "\u2284",
- sube: "\u2286",
- supe: "\u2287",
- oplus: "\u2295",
- otimes: "\u2297",
- perp: "\u22A5",
- sdot: "\u22C5",
- lceil: "\u2308",
- rceil: "\u2309",
- lfloor: "\u230A",
- rfloor: "\u230B",
- loz: "\u25CA",
- spades: "\u2660",
- clubs: "\u2663",
- hearts: "\u2665",
- diams: "\u2666",
- lang: "\u27E8",
- rang: "\u27E9"
- };
- },
- /* 15 */
- /***/
- function(module3, exports2, __webpack_require__) {
- "use strict";
- Object.defineProperty(exports2, "__esModule", { value: true });
- var error_handler_1 = __webpack_require__(10);
- var scanner_1 = __webpack_require__(12);
- var token_1 = __webpack_require__(13);
- var Reader = function() {
- function Reader2() {
- this.values = [];
- this.curly = this.paren = -1;
- }
- Reader2.prototype.beforeFunctionExpression = function(t) {
- return [
- "(",
- "{",
- "[",
- "in",
- "typeof",
- "instanceof",
- "new",
- "return",
- "case",
- "delete",
- "throw",
- "void",
- // assignment operators
- "=",
- "+=",
- "-=",
- "*=",
- "**=",
- "/=",
- "%=",
- "<<=",
- ">>=",
- ">>>=",
- "&=",
- "|=",
- "^=",
- ",",
- // binary/unary operators
- "+",
- "-",
- "*",
- "**",
- "/",
- "%",
- "++",
- "--",
- "<<",
- ">>",
- ">>>",
- "&",
- "|",
- "^",
- "!",
- "~",
- "&&",
- "||",
- "?",
- ":",
- "===",
- "==",
- ">=",
- "<=",
- "<",
- ">",
- "!=",
- "!=="
- ].indexOf(t) >= 0;
- };
- Reader2.prototype.isRegexStart = function() {
- var previous = this.values[this.values.length - 1];
- var regex = previous !== null;
- switch (previous) {
- case "this":
- case "]":
- regex = false;
- break;
- case ")":
- var keyword = this.values[this.paren - 1];
- regex = keyword === "if" || keyword === "while" || keyword === "for" || keyword === "with";
- break;
- case "}":
- regex = false;
- if (this.values[this.curly - 3] === "function") {
- var check = this.values[this.curly - 4];
- regex = check ? !this.beforeFunctionExpression(check) : false;
- } else if (this.values[this.curly - 4] === "function") {
- var check = this.values[this.curly - 5];
- regex = check ? !this.beforeFunctionExpression(check) : true;
- }
- break;
- default:
- break;
- }
- return regex;
- };
- Reader2.prototype.push = function(token) {
- if (token.type === 7 || token.type === 4) {
- if (token.value === "{") {
- this.curly = this.values.length;
- } else if (token.value === "(") {
- this.paren = this.values.length;
- }
- this.values.push(token.value);
- } else {
- this.values.push(null);
- }
- };
- return Reader2;
- }();
- var Tokenizer = function() {
- function Tokenizer2(code, config) {
- this.errorHandler = new error_handler_1.ErrorHandler();
- this.errorHandler.tolerant = config ? typeof config.tolerant === "boolean" && config.tolerant : false;
- this.scanner = new scanner_1.Scanner(code, this.errorHandler);
- this.scanner.trackComment = config ? typeof config.comment === "boolean" && config.comment : false;
- this.trackRange = config ? typeof config.range === "boolean" && config.range : false;
- this.trackLoc = config ? typeof config.loc === "boolean" && config.loc : false;
- this.buffer = [];
- this.reader = new Reader();
- }
- Tokenizer2.prototype.errors = function() {
- return this.errorHandler.errors;
- };
- Tokenizer2.prototype.getNextToken = function() {
- if (this.buffer.length === 0) {
- var comments = this.scanner.scanComments();
- if (this.scanner.trackComment) {
- for (var i = 0; i < comments.length; ++i) {
- var e = comments[i];
- var value = this.scanner.source.slice(e.slice[0], e.slice[1]);
- var comment = {
- type: e.multiLine ? "BlockComment" : "LineComment",
- value
- };
- if (this.trackRange) {
- comment.range = e.range;
- }
- if (this.trackLoc) {
- comment.loc = e.loc;
- }
- this.buffer.push(comment);
- }
- }
- if (!this.scanner.eof()) {
- var loc = void 0;
- if (this.trackLoc) {
- loc = {
- start: {
- line: this.scanner.lineNumber,
- column: this.scanner.index - this.scanner.lineStart
- },
- end: {}
- };
- }
- var startRegex = this.scanner.source[this.scanner.index] === "/" && this.reader.isRegexStart();
- var token = startRegex ? this.scanner.scanRegExp() : this.scanner.lex();
- this.reader.push(token);
- var entry = {
- type: token_1.TokenName[token.type],
- value: this.scanner.source.slice(token.start, token.end)
- };
- if (this.trackRange) {
- entry.range = [token.start, token.end];
- }
- if (this.trackLoc) {
- loc.end = {
- line: this.scanner.lineNumber,
- column: this.scanner.index - this.scanner.lineStart
- };
- entry.loc = loc;
- }
- if (token.type === 9) {
- var pattern = token.pattern;
- var flags = token.flags;
- entry.regex = { pattern, flags };
- }
- this.buffer.push(entry);
- }
- }
- return this.buffer.shift();
- };
- return Tokenizer2;
- }();
- exports2.Tokenizer = Tokenizer;
- }
- /******/
- ])
- );
- });
- }
-});
-
-// .yarn/cache/tslib-npm-2.6.2-4fc8c068d9-e03a8a4271.zip/node_modules/tslib/tslib.es6.mjs
-var tslib_es6_exports = {};
-__export(tslib_es6_exports, {
- __addDisposableResource: () => __addDisposableResource,
- __assign: () => __assign,
- __asyncDelegator: () => __asyncDelegator,
- __asyncGenerator: () => __asyncGenerator,
- __asyncValues: () => __asyncValues,
- __await: () => __await,
- __awaiter: () => __awaiter,
- __classPrivateFieldGet: () => __classPrivateFieldGet,
- __classPrivateFieldIn: () => __classPrivateFieldIn,
- __classPrivateFieldSet: () => __classPrivateFieldSet,
- __createBinding: () => __createBinding,
- __decorate: () => __decorate,
- __disposeResources: () => __disposeResources,
- __esDecorate: () => __esDecorate,
- __exportStar: () => __exportStar,
- __extends: () => __extends,
- __generator: () => __generator,
- __importDefault: () => __importDefault,
- __importStar: () => __importStar,
- __makeTemplateObject: () => __makeTemplateObject,
- __metadata: () => __metadata,
- __param: () => __param,
- __propKey: () => __propKey,
- __read: () => __read,
- __rest: () => __rest,
- __runInitializers: () => __runInitializers,
- __setFunctionName: () => __setFunctionName,
- __spread: () => __spread,
- __spreadArray: () => __spreadArray,
- __spreadArrays: () => __spreadArrays,
- __values: () => __values,
- default: () => tslib_es6_default
-});
-function __extends(d, b) {
- if (typeof b !== "function" && b !== null)
- throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
- extendStatics(d, b);
- function __() {
- this.constructor = d;
- }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-}
-function __rest(s, e) {
- var t = {};
- for (var p in s)
- if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
- t[p] = s[p];
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
- t[p[i]] = s[p[i]];
- }
- return t;
-}
-function __decorate(decorators, target, key, desc) {
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
- r = Reflect.decorate(decorators, target, key, desc);
- else
- for (var i = decorators.length - 1; i >= 0; i--)
- if (d = decorators[i])
- r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
- return c > 3 && r && Object.defineProperty(target, key, r), r;
-}
-function __param(paramIndex, decorator) {
- return function(target, key) {
- decorator(target, key, paramIndex);
- };
-}
-function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
- function accept(f) {
- if (f !== void 0 && typeof f !== "function")
- throw new TypeError("Function expected");
- return f;
- }
- var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
- var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
- var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
- var _, done = false;
- for (var i = decorators.length - 1; i >= 0; i--) {
- var context = {};
- for (var p in contextIn)
- context[p] = p === "access" ? {} : contextIn[p];
- for (var p in contextIn.access)
- context.access[p] = contextIn.access[p];
- context.addInitializer = function(f) {
- if (done)
- throw new TypeError("Cannot add initializers after decoration has completed");
- extraInitializers.push(accept(f || null));
- };
- var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
- if (kind === "accessor") {
- if (result === void 0)
- continue;
- if (result === null || typeof result !== "object")
- throw new TypeError("Object expected");
- if (_ = accept(result.get))
- descriptor.get = _;
- if (_ = accept(result.set))
- descriptor.set = _;
- if (_ = accept(result.init))
- initializers.unshift(_);
- } else if (_ = accept(result)) {
- if (kind === "field")
- initializers.unshift(_);
- else
- descriptor[key] = _;
- }
- }
- if (target)
- Object.defineProperty(target, contextIn.name, descriptor);
- done = true;
-}
-function __runInitializers(thisArg, initializers, value) {
- var useValue = arguments.length > 2;
- for (var i = 0; i < initializers.length; i++) {
- value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
- }
- return useValue ? value : void 0;
-}
-function __propKey(x) {
- return typeof x === "symbol" ? x : "".concat(x);
-}
-function __setFunctionName(f, name, prefix) {
- if (typeof name === "symbol")
- name = name.description ? "[".concat(name.description, "]") : "";
- return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name });
-}
-function __metadata(metadataKey, metadataValue) {
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function")
- return Reflect.metadata(metadataKey, metadataValue);
-}
-function __awaiter(thisArg, _arguments, P, generator) {
- function adopt(value) {
- return value instanceof P ? value : new P(function(resolve) {
- resolve(value);
- });
- }
- return new (P || (P = Promise))(function(resolve, reject) {
- function fulfilled(value) {
- try {
- step(generator.next(value));
- } catch (e) {
- reject(e);
- }
- }
- function rejected(value) {
- try {
- step(generator["throw"](value));
- } catch (e) {
- reject(e);
- }
- }
- function step(result) {
- result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
- }
- step((generator = generator.apply(thisArg, _arguments || [])).next());
- });
-}
-function __generator(thisArg, body) {
- var _ = { label: 0, sent: function() {
- if (t[0] & 1)
- throw t[1];
- return t[1];
- }, trys: [], ops: [] }, f, y, t, g;
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() {
- return this;
- }), g;
- function verb(n) {
- return function(v) {
- return step([n, v]);
- };
- }
- function step(op) {
- if (f)
- throw new TypeError("Generator is already executing.");
- while (g && (g = 0, op[0] && (_ = 0)), _)
- try {
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done)
- return t;
- if (y = 0, t)
- op = [op[0] & 2, t.value];
- switch (op[0]) {
- case 0:
- case 1:
- t = op;
- break;
- case 4:
- _.label++;
- return { value: op[1], done: false };
- case 5:
- _.label++;
- y = op[1];
- op = [0];
- continue;
- case 7:
- op = _.ops.pop();
- _.trys.pop();
- continue;
- default:
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
- _ = 0;
- continue;
- }
- if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
- _.label = op[1];
- break;
- }
- if (op[0] === 6 && _.label < t[1]) {
- _.label = t[1];
- t = op;
- break;
- }
- if (t && _.label < t[2]) {
- _.label = t[2];
- _.ops.push(op);
- break;
- }
- if (t[2])
- _.ops.pop();
- _.trys.pop();
- continue;
- }
- op = body.call(thisArg, _);
- } catch (e) {
- op = [6, e];
- y = 0;
- } finally {
- f = t = 0;
- }
- if (op[0] & 5)
- throw op[1];
- return { value: op[0] ? op[1] : void 0, done: true };
- }
-}
-function __exportStar(m, o) {
- for (var p in m)
- if (p !== "default" && !Object.prototype.hasOwnProperty.call(o, p))
- __createBinding(o, m, p);
-}
-function __values(o) {
- var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
- if (m)
- return m.call(o);
- if (o && typeof o.length === "number")
- return {
- next: function() {
- if (o && i >= o.length)
- o = void 0;
- return { value: o && o[i++], done: !o };
- }
- };
- throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
-}
-function __read(o, n) {
- var m = typeof Symbol === "function" && o[Symbol.iterator];
- if (!m)
- return o;
- var i = m.call(o), r, ar = [], e;
- try {
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done)
- ar.push(r.value);
- } catch (error) {
- e = { error };
- } finally {
- try {
- if (r && !r.done && (m = i["return"]))
- m.call(i);
- } finally {
- if (e)
- throw e.error;
- }
- }
- return ar;
-}
-function __spread() {
- for (var ar = [], i = 0; i < arguments.length; i++)
- ar = ar.concat(__read(arguments[i]));
- return ar;
-}
-function __spreadArrays() {
- for (var s = 0, i = 0, il = arguments.length; i < il; i++)
- s += arguments[i].length;
- for (var r = Array(s), k = 0, i = 0; i < il; i++)
- for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
- r[k] = a[j];
- return r;
-}
-function __spreadArray(to, from, pack) {
- if (pack || arguments.length === 2)
- for (var i = 0, l = from.length, ar; i < l; i++) {
- if (ar || !(i in from)) {
- if (!ar)
- ar = Array.prototype.slice.call(from, 0, i);
- ar[i] = from[i];
- }
- }
- return to.concat(ar || Array.prototype.slice.call(from));
-}
-function __await(v) {
- return this instanceof __await ? (this.v = v, this) : new __await(v);
-}
-function __asyncGenerator(thisArg, _arguments, generator) {
- if (!Symbol.asyncIterator)
- throw new TypeError("Symbol.asyncIterator is not defined.");
- var g = generator.apply(thisArg, _arguments || []), i, q = [];
- return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function() {
- return this;
- }, i;
- function verb(n) {
- if (g[n])
- i[n] = function(v) {
- return new Promise(function(a, b) {
- q.push([n, v, a, b]) > 1 || resume(n, v);
- });
- };
- }
- function resume(n, v) {
- try {
- step(g[n](v));
- } catch (e) {
- settle(q[0][3], e);
- }
- }
- function step(r) {
- r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);
- }
- function fulfill(value) {
- resume("next", value);
- }
- function reject(value) {
- resume("throw", value);
- }
- function settle(f, v) {
- if (f(v), q.shift(), q.length)
- resume(q[0][0], q[0][1]);
- }
-}
-function __asyncDelegator(o) {
- var i, p;
- return i = {}, verb("next"), verb("throw", function(e) {
- throw e;
- }), verb("return"), i[Symbol.iterator] = function() {
- return this;
- }, i;
- function verb(n, f) {
- i[n] = o[n] ? function(v) {
- return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v;
- } : f;
- }
-}
-function __asyncValues(o) {
- if (!Symbol.asyncIterator)
- throw new TypeError("Symbol.asyncIterator is not defined.");
- var m = o[Symbol.asyncIterator], i;
- return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function() {
- return this;
- }, i);
- function verb(n) {
- i[n] = o[n] && function(v) {
- return new Promise(function(resolve, reject) {
- v = o[n](v), settle(resolve, reject, v.done, v.value);
- });
- };
- }
- function settle(resolve, reject, d, v) {
- Promise.resolve(v).then(function(v2) {
- resolve({ value: v2, done: d });
- }, reject);
- }
-}
-function __makeTemplateObject(cooked, raw) {
- if (Object.defineProperty) {
- Object.defineProperty(cooked, "raw", { value: raw });
- } else {
- cooked.raw = raw;
- }
- return cooked;
-}
-function __importStar(mod) {
- if (mod && mod.__esModule)
- return mod;
- var result = {};
- if (mod != null) {
- for (var k in mod)
- if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k))
- __createBinding(result, mod, k);
- }
- __setModuleDefault(result, mod);
- return result;
-}
-function __importDefault(mod) {
- return mod && mod.__esModule ? mod : { default: mod };
-}
-function __classPrivateFieldGet(receiver, state, kind, f) {
- if (kind === "a" && !f)
- throw new TypeError("Private accessor was defined without a getter");
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver))
- throw new TypeError("Cannot read private member from an object whose class did not declare it");
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
-}
-function __classPrivateFieldSet(receiver, state, value, kind, f) {
- if (kind === "m")
- throw new TypeError("Private method is not writable");
- if (kind === "a" && !f)
- throw new TypeError("Private accessor was defined without a setter");
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver))
- throw new TypeError("Cannot write private member to an object whose class did not declare it");
- return kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value), value;
-}
-function __classPrivateFieldIn(state, receiver) {
- if (receiver === null || typeof receiver !== "object" && typeof receiver !== "function")
- throw new TypeError("Cannot use 'in' operator on non-object");
- return typeof state === "function" ? receiver === state : state.has(receiver);
-}
-function __addDisposableResource(env2, value, async) {
- if (value !== null && value !== void 0) {
- if (typeof value !== "object" && typeof value !== "function")
- throw new TypeError("Object expected.");
- var dispose;
- if (async) {
- if (!Symbol.asyncDispose)
- throw new TypeError("Symbol.asyncDispose is not defined.");
- dispose = value[Symbol.asyncDispose];
- }
- if (dispose === void 0) {
- if (!Symbol.dispose)
- throw new TypeError("Symbol.dispose is not defined.");
- dispose = value[Symbol.dispose];
- }
- if (typeof dispose !== "function")
- throw new TypeError("Object not disposable.");
- env2.stack.push({ value, dispose, async });
- } else if (async) {
- env2.stack.push({ async: true });
- }
- return value;
-}
-function __disposeResources(env2) {
- function fail(e) {
- env2.error = env2.hasError ? new _SuppressedError(e, env2.error, "An error was suppressed during disposal.") : e;
- env2.hasError = true;
- }
- function next() {
- while (env2.stack.length) {
- var rec = env2.stack.pop();
- try {
- var result = rec.dispose && rec.dispose.call(rec.value);
- if (rec.async)
- return Promise.resolve(result).then(next, function(e) {
- fail(e);
- return next();
- });
- } catch (e) {
- fail(e);
- }
- }
- if (env2.hasError)
- throw env2.error;
- }
- return next();
-}
-var extendStatics, __assign, __createBinding, __setModuleDefault, _SuppressedError, tslib_es6_default;
-var init_tslib_es6 = __esm({
- ".yarn/cache/tslib-npm-2.6.2-4fc8c068d9-e03a8a4271.zip/node_modules/tslib/tslib.es6.mjs"() {
- extendStatics = function(d, b) {
- extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {
- d2.__proto__ = b2;
- } || function(d2, b2) {
- for (var p in b2)
- if (Object.prototype.hasOwnProperty.call(b2, p))
- d2[p] = b2[p];
- };
- return extendStatics(d, b);
- };
- __assign = function() {
- __assign = Object.assign || function __assign2(t) {
- for (var s, i = 1, n = arguments.length; i < n; i++) {
- s = arguments[i];
- for (var p in s)
- if (Object.prototype.hasOwnProperty.call(s, p))
- t[p] = s[p];
- }
- return t;
- };
- return __assign.apply(this, arguments);
- };
- __createBinding = Object.create ? function(o, m, k, k2) {
- if (k2 === void 0)
- k2 = k;
- var desc = Object.getOwnPropertyDescriptor(m, k);
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
- desc = { enumerable: true, get: function() {
- return m[k];
- } };
- }
- Object.defineProperty(o, k2, desc);
- } : function(o, m, k, k2) {
- if (k2 === void 0)
- k2 = k;
- o[k2] = m[k];
- };
- __setModuleDefault = Object.create ? function(o, v) {
- Object.defineProperty(o, "default", { enumerable: true, value: v });
- } : function(o, v) {
- o["default"] = v;
- };
- _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function(error, suppressed, message) {
- var e = new Error(message);
- return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
- };
- tslib_es6_default = {
- __extends,
- __assign,
- __rest,
- __decorate,
- __param,
- __metadata,
- __awaiter,
- __generator,
- __createBinding,
- __exportStar,
- __values,
- __read,
- __spread,
- __spreadArrays,
- __spreadArray,
- __await,
- __asyncGenerator,
- __asyncDelegator,
- __asyncValues,
- __makeTemplateObject,
- __importStar,
- __importDefault,
- __classPrivateFieldGet,
- __classPrivateFieldSet,
- __classPrivateFieldIn,
- __addDisposableResource,
- __disposeResources
- };
- }
-});
-
-// .yarn/cache/ast-types-npm-0.13.4-69f7e68df8-3a1a409764.zip/node_modules/ast-types/lib/types.js
-var require_types = __commonJS({
- ".yarn/cache/ast-types-npm-0.13.4-69f7e68df8-3a1a409764.zip/node_modules/ast-types/lib/types.js"(exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.Def = void 0;
- var tslib_1 = (init_tslib_es6(), __toCommonJS(tslib_es6_exports));
- var Op = Object.prototype;
- var objToStr = Op.toString;
- var hasOwn = Op.hasOwnProperty;
- var BaseType = (
- /** @class */
- function() {
- function BaseType2() {
- }
- BaseType2.prototype.assert = function(value, deep) {
- if (!this.check(value, deep)) {
- var str = shallowStringify(value);
- throw new Error(str + " does not match type " + this);
- }
- return true;
- };
- BaseType2.prototype.arrayOf = function() {
- var elemType = this;
- return new ArrayType(elemType);
- };
- return BaseType2;
- }()
- );
- var ArrayType = (
- /** @class */
- function(_super) {
- tslib_1.__extends(ArrayType2, _super);
- function ArrayType2(elemType) {
- var _this = _super.call(this) || this;
- _this.elemType = elemType;
- _this.kind = "ArrayType";
- return _this;
- }
- ArrayType2.prototype.toString = function() {
- return "[" + this.elemType + "]";
- };
- ArrayType2.prototype.check = function(value, deep) {
- var _this = this;
- return Array.isArray(value) && value.every(function(elem) {
- return _this.elemType.check(elem, deep);
- });
- };
- return ArrayType2;
- }(BaseType)
- );
- var IdentityType = (
- /** @class */
- function(_super) {
- tslib_1.__extends(IdentityType2, _super);
- function IdentityType2(value) {
- var _this = _super.call(this) || this;
- _this.value = value;
- _this.kind = "IdentityType";
- return _this;
- }
- IdentityType2.prototype.toString = function() {
- return String(this.value);
- };
- IdentityType2.prototype.check = function(value, deep) {
- var result = value === this.value;
- if (!result && typeof deep === "function") {
- deep(this, value);
- }
- return result;
- };
- return IdentityType2;
- }(BaseType)
- );
- var ObjectType = (
- /** @class */
- function(_super) {
- tslib_1.__extends(ObjectType2, _super);
- function ObjectType2(fields) {
- var _this = _super.call(this) || this;
- _this.fields = fields;
- _this.kind = "ObjectType";
- return _this;
- }
- ObjectType2.prototype.toString = function() {
- return "{ " + this.fields.join(", ") + " }";
- };
- ObjectType2.prototype.check = function(value, deep) {
- return objToStr.call(value) === objToStr.call({}) && this.fields.every(function(field) {
- return field.type.check(value[field.name], deep);
- });
- };
- return ObjectType2;
- }(BaseType)
- );
- var OrType = (
- /** @class */
- function(_super) {
- tslib_1.__extends(OrType2, _super);
- function OrType2(types) {
- var _this = _super.call(this) || this;
- _this.types = types;
- _this.kind = "OrType";
- return _this;
- }
- OrType2.prototype.toString = function() {
- return this.types.join(" | ");
- };
- OrType2.prototype.check = function(value, deep) {
- return this.types.some(function(type) {
- return type.check(value, deep);
- });
- };
- return OrType2;
- }(BaseType)
- );
- var PredicateType = (
- /** @class */
- function(_super) {
- tslib_1.__extends(PredicateType2, _super);
- function PredicateType2(name, predicate) {
- var _this = _super.call(this) || this;
- _this.name = name;
- _this.predicate = predicate;
- _this.kind = "PredicateType";
- return _this;
- }
- PredicateType2.prototype.toString = function() {
- return this.name;
- };
- PredicateType2.prototype.check = function(value, deep) {
- var result = this.predicate(value, deep);
- if (!result && typeof deep === "function") {
- deep(this, value);
- }
- return result;
- };
- return PredicateType2;
- }(BaseType)
- );
- var Def = (
- /** @class */
- function() {
- function Def2(type, typeName) {
- this.type = type;
- this.typeName = typeName;
- this.baseNames = [];
- this.ownFields = /* @__PURE__ */ Object.create(null);
- this.allSupertypes = /* @__PURE__ */ Object.create(null);
- this.supertypeList = [];
- this.allFields = /* @__PURE__ */ Object.create(null);
- this.fieldNames = [];
- this.finalized = false;
- this.buildable = false;
- this.buildParams = [];
- }
- Def2.prototype.isSupertypeOf = function(that) {
- if (that instanceof Def2) {
- if (this.finalized !== true || that.finalized !== true) {
- throw new Error("");
- }
- return hasOwn.call(that.allSupertypes, this.typeName);
- } else {
- throw new Error(that + " is not a Def");
- }
- };
- Def2.prototype.checkAllFields = function(value, deep) {
- var allFields = this.allFields;
- if (this.finalized !== true) {
- throw new Error("" + this.typeName);
- }
- function checkFieldByName(name) {
- var field = allFields[name];
- var type = field.type;
- var child = field.getValue(value);
- return type.check(child, deep);
- }
- return value !== null && typeof value === "object" && Object.keys(allFields).every(checkFieldByName);
- };
- Def2.prototype.bases = function() {
- var supertypeNames = [];
- for (var _i = 0; _i < arguments.length; _i++) {
- supertypeNames[_i] = arguments[_i];
- }
- var bases = this.baseNames;
- if (this.finalized) {
- if (supertypeNames.length !== bases.length) {
- throw new Error("");
- }
- for (var i = 0; i < supertypeNames.length; i++) {
- if (supertypeNames[i] !== bases[i]) {
- throw new Error("");
- }
- }
- return this;
- }
- supertypeNames.forEach(function(baseName) {
- if (bases.indexOf(baseName) < 0) {
- bases.push(baseName);
- }
- });
- return this;
- };
- return Def2;
- }()
- );
- exports.Def = Def;
- var Field = (
- /** @class */
- function() {
- function Field2(name, type, defaultFn, hidden) {
- this.name = name;
- this.type = type;
- this.defaultFn = defaultFn;
- this.hidden = !!hidden;
- }
- Field2.prototype.toString = function() {
- return JSON.stringify(this.name) + ": " + this.type;
- };
- Field2.prototype.getValue = function(obj) {
- var value = obj[this.name];
- if (typeof value !== "undefined") {
- return value;
- }
- if (typeof this.defaultFn === "function") {
- value = this.defaultFn.call(obj);
- }
- return value;
- };
- return Field2;
- }()
- );
- function shallowStringify(value) {
- if (Array.isArray(value)) {
- return "[" + value.map(shallowStringify).join(", ") + "]";
- }
- if (value && typeof value === "object") {
- return "{ " + Object.keys(value).map(function(key) {
- return key + ": " + value[key];
- }).join(", ") + " }";
- }
- return JSON.stringify(value);
- }
- function typesPlugin(_fork) {
- var Type = {
- or: function() {
- var types = [];
- for (var _i = 0; _i < arguments.length; _i++) {
- types[_i] = arguments[_i];
- }
- return new OrType(types.map(function(type) {
- return Type.from(type);
- }));
- },
- from: function(value, name) {
- if (value instanceof ArrayType || value instanceof IdentityType || value instanceof ObjectType || value instanceof OrType || value instanceof PredicateType) {
- return value;
- }
- if (value instanceof Def) {
- return value.type;
- }
- if (isArray2.check(value)) {
- if (value.length !== 1) {
- throw new Error("only one element type is permitted for typed arrays");
- }
- return new ArrayType(Type.from(value[0]));
- }
- if (isObject2.check(value)) {
- return new ObjectType(Object.keys(value).map(function(name2) {
- return new Field(name2, Type.from(value[name2], name2));
- }));
- }
- if (typeof value === "function") {
- var bicfIndex = builtInCtorFns.indexOf(value);
- if (bicfIndex >= 0) {
- return builtInCtorTypes[bicfIndex];
- }
- if (typeof name !== "string") {
- throw new Error("missing name");
- }
- return new PredicateType(name, value);
- }
- return new IdentityType(value);
- },
- // Define a type whose name is registered in a namespace (the defCache) so
- // that future definitions will return the same type given the same name.
- // In particular, this system allows for circular and forward definitions.
- // The Def object d returned from Type.def may be used to configure the
- // type d.type by calling methods such as d.bases, d.build, and d.field.
- def: function(typeName) {
- return hasOwn.call(defCache, typeName) ? defCache[typeName] : defCache[typeName] = new DefImpl(typeName);
- },
- hasDef: function(typeName) {
- return hasOwn.call(defCache, typeName);
- }
- };
- var builtInCtorFns = [];
- var builtInCtorTypes = [];
- function defBuiltInType(name, example) {
- var objStr = objToStr.call(example);
- var type = new PredicateType(name, function(value) {
- return objToStr.call(value) === objStr;
- });
- if (example && typeof example.constructor === "function") {
- builtInCtorFns.push(example.constructor);
- builtInCtorTypes.push(type);
- }
- return type;
- }
- var isString2 = defBuiltInType("string", "truthy");
- var isFunction = defBuiltInType("function", function() {
- });
- var isArray2 = defBuiltInType("array", []);
- var isObject2 = defBuiltInType("object", {});
- var isRegExp = defBuiltInType("RegExp", /./);
- var isDate2 = defBuiltInType("Date", /* @__PURE__ */ new Date());
- var isNumber2 = defBuiltInType("number", 3);
- var isBoolean2 = defBuiltInType("boolean", true);
- var isNull = defBuiltInType("null", null);
- var isUndefined = defBuiltInType("undefined", void 0);
- var builtInTypes = {
- string: isString2,
- function: isFunction,
- array: isArray2,
- object: isObject2,
- RegExp: isRegExp,
- Date: isDate2,
- number: isNumber2,
- boolean: isBoolean2,
- null: isNull,
- undefined: isUndefined
- };
- var defCache = /* @__PURE__ */ Object.create(null);
- function defFromValue(value) {
- if (value && typeof value === "object") {
- var type = value.type;
- if (typeof type === "string" && hasOwn.call(defCache, type)) {
- var d = defCache[type];
- if (d.finalized) {
- return d;
- }
- }
- }
- return null;
- }
- var DefImpl = (
- /** @class */
- function(_super) {
- tslib_1.__extends(DefImpl2, _super);
- function DefImpl2(typeName) {
- var _this = _super.call(this, new PredicateType(typeName, function(value, deep) {
- return _this.check(value, deep);
- }), typeName) || this;
- return _this;
- }
- DefImpl2.prototype.check = function(value, deep) {
- if (this.finalized !== true) {
- throw new Error("prematurely checking unfinalized type " + this.typeName);
- }
- if (value === null || typeof value !== "object") {
- return false;
- }
- var vDef = defFromValue(value);
- if (!vDef) {
- if (this.typeName === "SourceLocation" || this.typeName === "Position") {
- return this.checkAllFields(value, deep);
- }
- return false;
- }
- if (deep && vDef === this) {
- return this.checkAllFields(value, deep);
- }
- if (!this.isSupertypeOf(vDef)) {
- return false;
- }
- if (!deep) {
- return true;
- }
- return vDef.checkAllFields(value, deep) && this.checkAllFields(value, false);
- };
- DefImpl2.prototype.build = function() {
- var _this = this;
- var buildParams = [];
- for (var _i = 0; _i < arguments.length; _i++) {
- buildParams[_i] = arguments[_i];
- }
- this.buildParams = buildParams;
- if (this.buildable) {
- return this;
- }
- this.field("type", String, function() {
- return _this.typeName;
- });
- this.buildable = true;
- var addParam = function(built, param, arg, isArgAvailable) {
- if (hasOwn.call(built, param))
- return;
- var all = _this.allFields;
- if (!hasOwn.call(all, param)) {
- throw new Error("" + param);
- }
- var field = all[param];
- var type = field.type;
- var value;
- if (isArgAvailable) {
- value = arg;
- } else if (field.defaultFn) {
- value = field.defaultFn.call(built);
- } else {
- var message = "no value or default function given for field " + JSON.stringify(param) + " of " + _this.typeName + "(" + _this.buildParams.map(function(name) {
- return all[name];
- }).join(", ") + ")";
- throw new Error(message);
- }
- if (!type.check(value)) {
- throw new Error(shallowStringify(value) + " does not match field " + field + " of type " + _this.typeName);
- }
- built[param] = value;
- };
- var builder = function() {
- var args = [];
- for (var _i2 = 0; _i2 < arguments.length; _i2++) {
- args[_i2] = arguments[_i2];
- }
- var argc = args.length;
- if (!_this.finalized) {
- throw new Error("attempting to instantiate unfinalized type " + _this.typeName);
- }
- var built = Object.create(nodePrototype);
- _this.buildParams.forEach(function(param, i) {
- if (i < argc) {
- addParam(built, param, args[i], true);
- } else {
- addParam(built, param, null, false);
- }
- });
- Object.keys(_this.allFields).forEach(function(param) {
- addParam(built, param, null, false);
- });
- if (built.type !== _this.typeName) {
- throw new Error("");
- }
- return built;
- };
- builder.from = function(obj) {
- if (!_this.finalized) {
- throw new Error("attempting to instantiate unfinalized type " + _this.typeName);
- }
- var built = Object.create(nodePrototype);
- Object.keys(_this.allFields).forEach(function(param) {
- if (hasOwn.call(obj, param)) {
- addParam(built, param, obj[param], true);
- } else {
- addParam(built, param, null, false);
- }
- });
- if (built.type !== _this.typeName) {
- throw new Error("");
- }
- return built;
- };
- Object.defineProperty(builders, getBuilderName(this.typeName), {
- enumerable: true,
- value: builder
- });
- return this;
- };
- DefImpl2.prototype.field = function(name, type, defaultFn, hidden) {
- if (this.finalized) {
- console.error("Ignoring attempt to redefine field " + JSON.stringify(name) + " of finalized type " + JSON.stringify(this.typeName));
- return this;
- }
- this.ownFields[name] = new Field(name, Type.from(type), defaultFn, hidden);
- return this;
- };
- DefImpl2.prototype.finalize = function() {
- var _this = this;
- if (!this.finalized) {
- var allFields = this.allFields;
- var allSupertypes = this.allSupertypes;
- this.baseNames.forEach(function(name) {
- var def = defCache[name];
- if (def instanceof Def) {
- def.finalize();
- extend(allFields, def.allFields);
- extend(allSupertypes, def.allSupertypes);
- } else {
- var message = "unknown supertype name " + JSON.stringify(name) + " for subtype " + JSON.stringify(_this.typeName);
- throw new Error(message);
- }
- });
- extend(allFields, this.ownFields);
- allSupertypes[this.typeName] = this;
- this.fieldNames.length = 0;
- for (var fieldName in allFields) {
- if (hasOwn.call(allFields, fieldName) && !allFields[fieldName].hidden) {
- this.fieldNames.push(fieldName);
- }
- }
- Object.defineProperty(namedTypes, this.typeName, {
- enumerable: true,
- value: this.type
- });
- this.finalized = true;
- populateSupertypeList(this.typeName, this.supertypeList);
- if (this.buildable && this.supertypeList.lastIndexOf("Expression") >= 0) {
- wrapExpressionBuilderWithStatement(this.typeName);
- }
- }
- };
- return DefImpl2;
- }(Def)
- );
- function getSupertypeNames(typeName) {
- if (!hasOwn.call(defCache, typeName)) {
- throw new Error("");
- }
- var d = defCache[typeName];
- if (d.finalized !== true) {
- throw new Error("");
- }
- return d.supertypeList.slice(1);
- }
- function computeSupertypeLookupTable(candidates) {
- var table = {};
- var typeNames = Object.keys(defCache);
- var typeNameCount = typeNames.length;
- for (var i = 0; i < typeNameCount; ++i) {
- var typeName = typeNames[i];
- var d = defCache[typeName];
- if (d.finalized !== true) {
- throw new Error("" + typeName);
- }
- for (var j = 0; j < d.supertypeList.length; ++j) {
- var superTypeName = d.supertypeList[j];
- if (hasOwn.call(candidates, superTypeName)) {
- table[typeName] = superTypeName;
- break;
- }
- }
- }
- return table;
- }
- var builders = /* @__PURE__ */ Object.create(null);
- var nodePrototype = {};
- function defineMethod(name, func) {
- var old = nodePrototype[name];
- if (isUndefined.check(func)) {
- delete nodePrototype[name];
- } else {
- isFunction.assert(func);
- Object.defineProperty(nodePrototype, name, {
- enumerable: true,
- configurable: true,
- value: func
- });
- }
- return old;
- }
- function getBuilderName(typeName) {
- return typeName.replace(/^[A-Z]+/, function(upperCasePrefix) {
- var len = upperCasePrefix.length;
- switch (len) {
- case 0:
- return "";
- case 1:
- return upperCasePrefix.toLowerCase();
- default:
- return upperCasePrefix.slice(0, len - 1).toLowerCase() + upperCasePrefix.charAt(len - 1);
- }
- });
- }
- function getStatementBuilderName(typeName) {
- typeName = getBuilderName(typeName);
- return typeName.replace(/(Expression)?$/, "Statement");
- }
- var namedTypes = {};
- function getFieldNames(object) {
- var d = defFromValue(object);
- if (d) {
- return d.fieldNames.slice(0);
- }
- if ("type" in object) {
- throw new Error("did not recognize object of type " + JSON.stringify(object.type));
- }
- return Object.keys(object);
- }
- function getFieldValue(object, fieldName) {
- var d = defFromValue(object);
- if (d) {
- var field = d.allFields[fieldName];
- if (field) {
- return field.getValue(object);
- }
- }
- return object && object[fieldName];
- }
- function eachField(object, callback, context) {
- getFieldNames(object).forEach(function(name) {
- callback.call(this, name, getFieldValue(object, name));
- }, context);
- }
- function someField(object, callback, context) {
- return getFieldNames(object).some(function(name) {
- return callback.call(this, name, getFieldValue(object, name));
- }, context);
- }
- function wrapExpressionBuilderWithStatement(typeName) {
- var wrapperName = getStatementBuilderName(typeName);
- if (builders[wrapperName])
- return;
- var wrapped = builders[getBuilderName(typeName)];
- if (!wrapped)
- return;
- var builder = function() {
- var args = [];
- for (var _i = 0; _i < arguments.length; _i++) {
- args[_i] = arguments[_i];
- }
- return builders.expressionStatement(wrapped.apply(builders, args));
- };
- builder.from = function() {
- var args = [];
- for (var _i = 0; _i < arguments.length; _i++) {
- args[_i] = arguments[_i];
- }
- return builders.expressionStatement(wrapped.from.apply(builders, args));
- };
- builders[wrapperName] = builder;
- }
- function populateSupertypeList(typeName, list) {
- list.length = 0;
- list.push(typeName);
- var lastSeen = /* @__PURE__ */ Object.create(null);
- for (var pos = 0; pos < list.length; ++pos) {
- typeName = list[pos];
- var d = defCache[typeName];
- if (d.finalized !== true) {
- throw new Error("");
- }
- if (hasOwn.call(lastSeen, typeName)) {
- delete list[lastSeen[typeName]];
- }
- lastSeen[typeName] = pos;
- list.push.apply(list, d.baseNames);
- }
- for (var to = 0, from = to, len = list.length; from < len; ++from) {
- if (hasOwn.call(list, from)) {
- list[to++] = list[from];
- }
- }
- list.length = to;
- }
- function extend(into, from) {
- Object.keys(from).forEach(function(name) {
- into[name] = from[name];
- });
- return into;
- }
- function finalize() {
- Object.keys(defCache).forEach(function(name) {
- defCache[name].finalize();
- });
- }
- return {
- Type,
- builtInTypes,
- getSupertypeNames,
- computeSupertypeLookupTable,
- builders,
- defineMethod,
- getBuilderName,
- getStatementBuilderName,
- namedTypes,
- getFieldNames,
- getFieldValue,
- eachField,
- someField,
- finalize
- };
- }
- exports.default = typesPlugin;
- }
-});
-
-// .yarn/cache/ast-types-npm-0.13.4-69f7e68df8-3a1a409764.zip/node_modules/ast-types/lib/path.js
-var require_path = __commonJS({
- ".yarn/cache/ast-types-npm-0.13.4-69f7e68df8-3a1a409764.zip/node_modules/ast-types/lib/path.js"(exports, module2) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var tslib_1 = (init_tslib_es6(), __toCommonJS(tslib_es6_exports));
- var types_1 = tslib_1.__importDefault(require_types());
- var Op = Object.prototype;
- var hasOwn = Op.hasOwnProperty;
- function pathPlugin(fork) {
- var types = fork.use(types_1.default);
- var isArray2 = types.builtInTypes.array;
- var isNumber2 = types.builtInTypes.number;
- var Path = function Path2(value, parentPath, name) {
- if (!(this instanceof Path2)) {
- throw new Error("Path constructor cannot be invoked without 'new'");
- }
- if (parentPath) {
- if (!(parentPath instanceof Path2)) {
- throw new Error("");
- }
- } else {
- parentPath = null;
- name = null;
- }
- this.value = value;
- this.parentPath = parentPath;
- this.name = name;
- this.__childCache = null;
- };
- var Pp = Path.prototype;
- function getChildCache(path10) {
- return path10.__childCache || (path10.__childCache = /* @__PURE__ */ Object.create(null));
- }
- function getChildPath(path10, name) {
- var cache = getChildCache(path10);
- var actualChildValue = path10.getValueProperty(name);
- var childPath = cache[name];
- if (!hasOwn.call(cache, name) || // Ensure consistency between cache and reality.
- childPath.value !== actualChildValue) {
- childPath = cache[name] = new path10.constructor(actualChildValue, path10, name);
- }
- return childPath;
- }
- Pp.getValueProperty = function getValueProperty(name) {
- return this.value[name];
- };
- Pp.get = function get() {
- var names = [];
- for (var _i = 0; _i < arguments.length; _i++) {
- names[_i] = arguments[_i];
- }
- var path10 = this;
- var count = names.length;
- for (var i = 0; i < count; ++i) {
- path10 = getChildPath(path10, names[i]);
- }
- return path10;
- };
- Pp.each = function each(callback, context) {
- var childPaths = [];
- var len = this.value.length;
- var i = 0;
- for (var i = 0; i < len; ++i) {
- if (hasOwn.call(this.value, i)) {
- childPaths[i] = this.get(i);
- }
- }
- context = context || this;
- for (i = 0; i < len; ++i) {
- if (hasOwn.call(childPaths, i)) {
- callback.call(context, childPaths[i]);
- }
- }
- };
- Pp.map = function map(callback, context) {
- var result = [];
- this.each(function(childPath) {
- result.push(callback.call(this, childPath));
- }, context);
- return result;
- };
- Pp.filter = function filter(callback, context) {
- var result = [];
- this.each(function(childPath) {
- if (callback.call(this, childPath)) {
- result.push(childPath);
- }
- }, context);
- return result;
- };
- function emptyMoves() {
- }
- function getMoves(path10, offset, start, end) {
- isArray2.assert(path10.value);
- if (offset === 0) {
- return emptyMoves;
- }
- var length = path10.value.length;
- if (length < 1) {
- return emptyMoves;
- }
- var argc = arguments.length;
- if (argc === 2) {
- start = 0;
- end = length;
- } else if (argc === 3) {
- start = Math.max(start, 0);
- end = length;
- } else {
- start = Math.max(start, 0);
- end = Math.min(end, length);
- }
- isNumber2.assert(start);
- isNumber2.assert(end);
- var moves = /* @__PURE__ */ Object.create(null);
- var cache = getChildCache(path10);
- for (var i = start; i < end; ++i) {
- if (hasOwn.call(path10.value, i)) {
- var childPath = path10.get(i);
- if (childPath.name !== i) {
- throw new Error("");
- }
- var newIndex = i + offset;
- childPath.name = newIndex;
- moves[newIndex] = childPath;
- delete cache[i];
- }
- }
- delete cache.length;
- return function() {
- for (var newIndex2 in moves) {
- var childPath2 = moves[newIndex2];
- if (childPath2.name !== +newIndex2) {
- throw new Error("");
- }
- cache[newIndex2] = childPath2;
- path10.value[newIndex2] = childPath2.value;
- }
- };
- }
- Pp.shift = function shift() {
- var move = getMoves(this, -1);
- var result = this.value.shift();
- move();
- return result;
- };
- Pp.unshift = function unshift() {
- var args = [];
- for (var _i = 0; _i < arguments.length; _i++) {
- args[_i] = arguments[_i];
- }
- var move = getMoves(this, args.length);
- var result = this.value.unshift.apply(this.value, args);
- move();
- return result;
- };
- Pp.push = function push() {
- var args = [];
- for (var _i = 0; _i < arguments.length; _i++) {
- args[_i] = arguments[_i];
- }
- isArray2.assert(this.value);
- delete getChildCache(this).length;
- return this.value.push.apply(this.value, args);
- };
- Pp.pop = function pop() {
- isArray2.assert(this.value);
- var cache = getChildCache(this);
- delete cache[this.value.length - 1];
- delete cache.length;
- return this.value.pop();
- };
- Pp.insertAt = function insertAt(index) {
- var argc = arguments.length;
- var move = getMoves(this, argc - 1, index);
- if (move === emptyMoves && argc <= 1) {
- return this;
- }
- index = Math.max(index, 0);
- for (var i = 1; i < argc; ++i) {
- this.value[index + i - 1] = arguments[i];
- }
- move();
- return this;
- };
- Pp.insertBefore = function insertBefore() {
- var args = [];
- for (var _i = 0; _i < arguments.length; _i++) {
- args[_i] = arguments[_i];
- }
- var pp = this.parentPath;
- var argc = args.length;
- var insertAtArgs = [this.name];
- for (var i = 0; i < argc; ++i) {
- insertAtArgs.push(args[i]);
- }
- return pp.insertAt.apply(pp, insertAtArgs);
- };
- Pp.insertAfter = function insertAfter() {
- var args = [];
- for (var _i = 0; _i < arguments.length; _i++) {
- args[_i] = arguments[_i];
- }
- var pp = this.parentPath;
- var argc = args.length;
- var insertAtArgs = [this.name + 1];
- for (var i = 0; i < argc; ++i) {
- insertAtArgs.push(args[i]);
- }
- return pp.insertAt.apply(pp, insertAtArgs);
- };
- function repairRelationshipWithParent(path10) {
- if (!(path10 instanceof Path)) {
- throw new Error("");
- }
- var pp = path10.parentPath;
- if (!pp) {
- return path10;
- }
- var parentValue = pp.value;
- var parentCache = getChildCache(pp);
- if (parentValue[path10.name] === path10.value) {
- parentCache[path10.name] = path10;
- } else if (isArray2.check(parentValue)) {
- var i = parentValue.indexOf(path10.value);
- if (i >= 0) {
- parentCache[path10.name = i] = path10;
- }
- } else {
- parentValue[path10.name] = path10.value;
- parentCache[path10.name] = path10;
- }
- if (parentValue[path10.name] !== path10.value) {
- throw new Error("");
- }
- if (path10.parentPath.get(path10.name) !== path10) {
- throw new Error("");
- }
- return path10;
- }
- Pp.replace = function replace(replacement) {
- var results = [];
- var parentValue = this.parentPath.value;
- var parentCache = getChildCache(this.parentPath);
- var count = arguments.length;
- repairRelationshipWithParent(this);
- if (isArray2.check(parentValue)) {
- var originalLength = parentValue.length;
- var move = getMoves(this.parentPath, count - 1, this.name + 1);
- var spliceArgs = [this.name, 1];
- for (var i = 0; i < count; ++i) {
- spliceArgs.push(arguments[i]);
- }
- var splicedOut = parentValue.splice.apply(parentValue, spliceArgs);
- if (splicedOut[0] !== this.value) {
- throw new Error("");
- }
- if (parentValue.length !== originalLength - 1 + count) {
- throw new Error("");
- }
- move();
- if (count === 0) {
- delete this.value;
- delete parentCache[this.name];
- this.__childCache = null;
- } else {
- if (parentValue[this.name] !== replacement) {
- throw new Error("");
- }
- if (this.value !== replacement) {
- this.value = replacement;
- this.__childCache = null;
- }
- for (i = 0; i < count; ++i) {
- results.push(this.parentPath.get(this.name + i));
- }
- if (results[0] !== this) {
- throw new Error("");
- }
- }
- } else if (count === 1) {
- if (this.value !== replacement) {
- this.__childCache = null;
- }
- this.value = parentValue[this.name] = replacement;
- results.push(this);
- } else if (count === 0) {
- delete parentValue[this.name];
- delete this.value;
- this.__childCache = null;
- } else {
- throw new Error("Could not replace path");
- }
- return results;
- };
- return Path;
- }
- exports.default = pathPlugin;
- module2.exports = exports["default"];
- }
-});
-
-// .yarn/cache/ast-types-npm-0.13.4-69f7e68df8-3a1a409764.zip/node_modules/ast-types/lib/scope.js
-var require_scope = __commonJS({
- ".yarn/cache/ast-types-npm-0.13.4-69f7e68df8-3a1a409764.zip/node_modules/ast-types/lib/scope.js"(exports, module2) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var tslib_1 = (init_tslib_es6(), __toCommonJS(tslib_es6_exports));
- var types_1 = tslib_1.__importDefault(require_types());
- var hasOwn = Object.prototype.hasOwnProperty;
- function scopePlugin(fork) {
- var types = fork.use(types_1.default);
- var Type = types.Type;
- var namedTypes = types.namedTypes;
- var Node = namedTypes.Node;
- var Expression = namedTypes.Expression;
- var isArray2 = types.builtInTypes.array;
- var b = types.builders;
- var Scope = function Scope2(path10, parentScope) {
- if (!(this instanceof Scope2)) {
- throw new Error("Scope constructor cannot be invoked without 'new'");
- }
- ScopeType.assert(path10.value);
- var depth;
- if (parentScope) {
- if (!(parentScope instanceof Scope2)) {
- throw new Error("");
- }
- depth = parentScope.depth + 1;
- } else {
- parentScope = null;
- depth = 0;
- }
- Object.defineProperties(this, {
- path: { value: path10 },
- node: { value: path10.value },
- isGlobal: { value: !parentScope, enumerable: true },
- depth: { value: depth },
- parent: { value: parentScope },
- bindings: { value: {} },
- types: { value: {} }
- });
- };
- var scopeTypes = [
- // Program nodes introduce global scopes.
- namedTypes.Program,
- // Function is the supertype of FunctionExpression,
- // FunctionDeclaration, ArrowExpression, etc.
- namedTypes.Function,
- // In case you didn't know, the caught parameter shadows any variable
- // of the same name in an outer scope.
- namedTypes.CatchClause
- ];
- var ScopeType = Type.or.apply(Type, scopeTypes);
- Scope.isEstablishedBy = function(node) {
- return ScopeType.check(node);
- };
- var Sp = Scope.prototype;
- Sp.didScan = false;
- Sp.declares = function(name) {
- this.scan();
- return hasOwn.call(this.bindings, name);
- };
- Sp.declaresType = function(name) {
- this.scan();
- return hasOwn.call(this.types, name);
- };
- Sp.declareTemporary = function(prefix) {
- if (prefix) {
- if (!/^[a-z$_]/i.test(prefix)) {
- throw new Error("");
- }
- } else {
- prefix = "t$";
- }
- prefix += this.depth.toString(36) + "$";
- this.scan();
- var index = 0;
- while (this.declares(prefix + index)) {
- ++index;
- }
- var name = prefix + index;
- return this.bindings[name] = types.builders.identifier(name);
- };
- Sp.injectTemporary = function(identifier, init) {
- identifier || (identifier = this.declareTemporary());
- var bodyPath = this.path.get("body");
- if (namedTypes.BlockStatement.check(bodyPath.value)) {
- bodyPath = bodyPath.get("body");
- }
- bodyPath.unshift(b.variableDeclaration("var", [b.variableDeclarator(identifier, init || null)]));
- return identifier;
- };
- Sp.scan = function(force) {
- if (force || !this.didScan) {
- for (var name in this.bindings) {
- delete this.bindings[name];
- }
- scanScope(this.path, this.bindings, this.types);
- this.didScan = true;
- }
- };
- Sp.getBindings = function() {
- this.scan();
- return this.bindings;
- };
- Sp.getTypes = function() {
- this.scan();
- return this.types;
- };
- function scanScope(path10, bindings, scopeTypes2) {
- var node = path10.value;
- ScopeType.assert(node);
- if (namedTypes.CatchClause.check(node)) {
- var param = path10.get("param");
- if (param.value) {
- addPattern(param, bindings);
- }
- } else {
- recursiveScanScope(path10, bindings, scopeTypes2);
- }
- }
- function recursiveScanScope(path10, bindings, scopeTypes2) {
- var node = path10.value;
- if (path10.parent && namedTypes.FunctionExpression.check(path10.parent.node) && path10.parent.node.id) {
- addPattern(path10.parent.get("id"), bindings);
- }
- if (!node) {
- } else if (isArray2.check(node)) {
- path10.each(function(childPath) {
- recursiveScanChild(childPath, bindings, scopeTypes2);
- });
- } else if (namedTypes.Function.check(node)) {
- path10.get("params").each(function(paramPath) {
- addPattern(paramPath, bindings);
- });
- recursiveScanChild(path10.get("body"), bindings, scopeTypes2);
- } else if (namedTypes.TypeAlias && namedTypes.TypeAlias.check(node) || namedTypes.InterfaceDeclaration && namedTypes.InterfaceDeclaration.check(node) || namedTypes.TSTypeAliasDeclaration && namedTypes.TSTypeAliasDeclaration.check(node) || namedTypes.TSInterfaceDeclaration && namedTypes.TSInterfaceDeclaration.check(node)) {
- addTypePattern(path10.get("id"), scopeTypes2);
- } else if (namedTypes.VariableDeclarator.check(node)) {
- addPattern(path10.get("id"), bindings);
- recursiveScanChild(path10.get("init"), bindings, scopeTypes2);
- } else if (node.type === "ImportSpecifier" || node.type === "ImportNamespaceSpecifier" || node.type === "ImportDefaultSpecifier") {
- addPattern(
- // Esprima used to use the .name field to refer to the local
- // binding identifier for ImportSpecifier nodes, but .id for
- // ImportNamespaceSpecifier and ImportDefaultSpecifier nodes.
- // ESTree/Acorn/ESpree use .local for all three node types.
- path10.get(node.local ? "local" : node.name ? "name" : "id"),
- bindings
- );
- } else if (Node.check(node) && !Expression.check(node)) {
- types.eachField(node, function(name, child) {
- var childPath = path10.get(name);
- if (!pathHasValue(childPath, child)) {
- throw new Error("");
- }
- recursiveScanChild(childPath, bindings, scopeTypes2);
- });
- }
- }
- function pathHasValue(path10, value) {
- if (path10.value === value) {
- return true;
- }
- if (Array.isArray(path10.value) && path10.value.length === 0 && Array.isArray(value) && value.length === 0) {
- return true;
- }
- return false;
- }
- function recursiveScanChild(path10, bindings, scopeTypes2) {
- var node = path10.value;
- if (!node || Expression.check(node)) {
- } else if (namedTypes.FunctionDeclaration.check(node) && node.id !== null) {
- addPattern(path10.get("id"), bindings);
- } else if (namedTypes.ClassDeclaration && namedTypes.ClassDeclaration.check(node)) {
- addPattern(path10.get("id"), bindings);
- } else if (ScopeType.check(node)) {
- if (namedTypes.CatchClause.check(node) && // TODO Broaden this to accept any pattern.
- namedTypes.Identifier.check(node.param)) {
- var catchParamName = node.param.name;
- var hadBinding = hasOwn.call(bindings, catchParamName);
- recursiveScanScope(path10.get("body"), bindings, scopeTypes2);
- if (!hadBinding) {
- delete bindings[catchParamName];
- }
- }
- } else {
- recursiveScanScope(path10, bindings, scopeTypes2);
- }
- }
- function addPattern(patternPath, bindings) {
- var pattern = patternPath.value;
- namedTypes.Pattern.assert(pattern);
- if (namedTypes.Identifier.check(pattern)) {
- if (hasOwn.call(bindings, pattern.name)) {
- bindings[pattern.name].push(patternPath);
- } else {
- bindings[pattern.name] = [patternPath];
- }
- } else if (namedTypes.AssignmentPattern && namedTypes.AssignmentPattern.check(pattern)) {
- addPattern(patternPath.get("left"), bindings);
- } else if (namedTypes.ObjectPattern && namedTypes.ObjectPattern.check(pattern)) {
- patternPath.get("properties").each(function(propertyPath) {
- var property = propertyPath.value;
- if (namedTypes.Pattern.check(property)) {
- addPattern(propertyPath, bindings);
- } else if (namedTypes.Property.check(property)) {
- addPattern(propertyPath.get("value"), bindings);
- } else if (namedTypes.SpreadProperty && namedTypes.SpreadProperty.check(property)) {
- addPattern(propertyPath.get("argument"), bindings);
- }
- });
- } else if (namedTypes.ArrayPattern && namedTypes.ArrayPattern.check(pattern)) {
- patternPath.get("elements").each(function(elementPath) {
- var element = elementPath.value;
- if (namedTypes.Pattern.check(element)) {
- addPattern(elementPath, bindings);
- } else if (namedTypes.SpreadElement && namedTypes.SpreadElement.check(element)) {
- addPattern(elementPath.get("argument"), bindings);
- }
- });
- } else if (namedTypes.PropertyPattern && namedTypes.PropertyPattern.check(pattern)) {
- addPattern(patternPath.get("pattern"), bindings);
- } else if (namedTypes.SpreadElementPattern && namedTypes.SpreadElementPattern.check(pattern) || namedTypes.SpreadPropertyPattern && namedTypes.SpreadPropertyPattern.check(pattern)) {
- addPattern(patternPath.get("argument"), bindings);
- }
- }
- function addTypePattern(patternPath, types2) {
- var pattern = patternPath.value;
- namedTypes.Pattern.assert(pattern);
- if (namedTypes.Identifier.check(pattern)) {
- if (hasOwn.call(types2, pattern.name)) {
- types2[pattern.name].push(patternPath);
- } else {
- types2[pattern.name] = [patternPath];
- }
- }
- }
- Sp.lookup = function(name) {
- for (var scope = this; scope; scope = scope.parent)
- if (scope.declares(name))
- break;
- return scope;
- };
- Sp.lookupType = function(name) {
- for (var scope = this; scope; scope = scope.parent)
- if (scope.declaresType(name))
- break;
- return scope;
- };
- Sp.getGlobalScope = function() {
- var scope = this;
- while (!scope.isGlobal)
- scope = scope.parent;
- return scope;
- };
- return Scope;
- }
- exports.default = scopePlugin;
- module2.exports = exports["default"];
- }
-});
-
-// .yarn/cache/ast-types-npm-0.13.4-69f7e68df8-3a1a409764.zip/node_modules/ast-types/lib/node-path.js
-var require_node_path = __commonJS({
- ".yarn/cache/ast-types-npm-0.13.4-69f7e68df8-3a1a409764.zip/node_modules/ast-types/lib/node-path.js"(exports, module2) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var tslib_1 = (init_tslib_es6(), __toCommonJS(tslib_es6_exports));
- var types_1 = tslib_1.__importDefault(require_types());
- var path_1 = tslib_1.__importDefault(require_path());
- var scope_1 = tslib_1.__importDefault(require_scope());
- function nodePathPlugin(fork) {
- var types = fork.use(types_1.default);
- var n = types.namedTypes;
- var b = types.builders;
- var isNumber2 = types.builtInTypes.number;
- var isArray2 = types.builtInTypes.array;
- var Path = fork.use(path_1.default);
- var Scope = fork.use(scope_1.default);
- var NodePath = function NodePath2(value, parentPath, name) {
- if (!(this instanceof NodePath2)) {
- throw new Error("NodePath constructor cannot be invoked without 'new'");
- }
- Path.call(this, value, parentPath, name);
- };
- var NPp = NodePath.prototype = Object.create(Path.prototype, {
- constructor: {
- value: NodePath,
- enumerable: false,
- writable: true,
- configurable: true
- }
- });
- Object.defineProperties(NPp, {
- node: {
- get: function() {
- Object.defineProperty(this, "node", {
- configurable: true,
- value: this._computeNode()
- });
- return this.node;
- }
- },
- parent: {
- get: function() {
- Object.defineProperty(this, "parent", {
- configurable: true,
- value: this._computeParent()
- });
- return this.parent;
- }
- },
- scope: {
- get: function() {
- Object.defineProperty(this, "scope", {
- configurable: true,
- value: this._computeScope()
- });
- return this.scope;
- }
- }
- });
- NPp.replace = function() {
- delete this.node;
- delete this.parent;
- delete this.scope;
- return Path.prototype.replace.apply(this, arguments);
- };
- NPp.prune = function() {
- var remainingNodePath = this.parent;
- this.replace();
- return cleanUpNodesAfterPrune(remainingNodePath);
- };
- NPp._computeNode = function() {
- var value = this.value;
- if (n.Node.check(value)) {
- return value;
- }
- var pp = this.parentPath;
- return pp && pp.node || null;
- };
- NPp._computeParent = function() {
- var value = this.value;
- var pp = this.parentPath;
- if (!n.Node.check(value)) {
- while (pp && !n.Node.check(pp.value)) {
- pp = pp.parentPath;
- }
- if (pp) {
- pp = pp.parentPath;
- }
- }
- while (pp && !n.Node.check(pp.value)) {
- pp = pp.parentPath;
- }
- return pp || null;
- };
- NPp._computeScope = function() {
- var value = this.value;
- var pp = this.parentPath;
- var scope = pp && pp.scope;
- if (n.Node.check(value) && Scope.isEstablishedBy(value)) {
- scope = new Scope(this, scope);
- }
- return scope || null;
- };
- NPp.getValueProperty = function(name) {
- return types.getFieldValue(this.value, name);
- };
- NPp.needsParens = function(assumeExpressionContext) {
- var pp = this.parentPath;
- if (!pp) {
- return false;
- }
- var node = this.value;
- if (!n.Expression.check(node)) {
- return false;
- }
- if (node.type === "Identifier") {
- return false;
- }
- while (!n.Node.check(pp.value)) {
- pp = pp.parentPath;
- if (!pp) {
- return false;
- }
- }
- var parent = pp.value;
- switch (node.type) {
- case "UnaryExpression":
- case "SpreadElement":
- case "SpreadProperty":
- return parent.type === "MemberExpression" && this.name === "object" && parent.object === node;
- case "BinaryExpression":
- case "LogicalExpression":
- switch (parent.type) {
- case "CallExpression":
- return this.name === "callee" && parent.callee === node;
- case "UnaryExpression":
- case "SpreadElement":
- case "SpreadProperty":
- return true;
- case "MemberExpression":
- return this.name === "object" && parent.object === node;
- case "BinaryExpression":
- case "LogicalExpression": {
- var n_1 = node;
- var po = parent.operator;
- var pp_1 = PRECEDENCE[po];
- var no = n_1.operator;
- var np = PRECEDENCE[no];
- if (pp_1 > np) {
- return true;
- }
- if (pp_1 === np && this.name === "right") {
- if (parent.right !== n_1) {
- throw new Error("Nodes must be equal");
- }
- return true;
- }
- }
- default:
- return false;
- }
- case "SequenceExpression":
- switch (parent.type) {
- case "ForStatement":
- return false;
- case "ExpressionStatement":
- return this.name !== "expression";
- default:
- return true;
- }
- case "YieldExpression":
- switch (parent.type) {
- case "BinaryExpression":
- case "LogicalExpression":
- case "UnaryExpression":
- case "SpreadElement":
- case "SpreadProperty":
- case "CallExpression":
- case "MemberExpression":
- case "NewExpression":
- case "ConditionalExpression":
- case "YieldExpression":
- return true;
- default:
- return false;
- }
- case "Literal":
- return parent.type === "MemberExpression" && isNumber2.check(node.value) && this.name === "object" && parent.object === node;
- case "AssignmentExpression":
- case "ConditionalExpression":
- switch (parent.type) {
- case "UnaryExpression":
- case "SpreadElement":
- case "SpreadProperty":
- case "BinaryExpression":
- case "LogicalExpression":
- return true;
- case "CallExpression":
- return this.name === "callee" && parent.callee === node;
- case "ConditionalExpression":
- return this.name === "test" && parent.test === node;
- case "MemberExpression":
- return this.name === "object" && parent.object === node;
- default:
- return false;
- }
- default:
- if (parent.type === "NewExpression" && this.name === "callee" && parent.callee === node) {
- return containsCallExpression(node);
- }
- }
- if (assumeExpressionContext !== true && !this.canBeFirstInStatement() && this.firstInStatement())
- return true;
- return false;
- };
- function isBinary(node) {
- return n.BinaryExpression.check(node) || n.LogicalExpression.check(node);
- }
- function isUnaryLike(node) {
- return n.UnaryExpression.check(node) || n.SpreadElement && n.SpreadElement.check(node) || n.SpreadProperty && n.SpreadProperty.check(node);
- }
- var PRECEDENCE = {};
- [
- ["||"],
- ["&&"],
- ["|"],
- ["^"],
- ["&"],
- ["==", "===", "!=", "!=="],
- ["<", ">", "<=", ">=", "in", "instanceof"],
- [">>", "<<", ">>>"],
- ["+", "-"],
- ["*", "/", "%"]
- ].forEach(function(tier, i) {
- tier.forEach(function(op) {
- PRECEDENCE[op] = i;
- });
- });
- function containsCallExpression(node) {
- if (n.CallExpression.check(node)) {
- return true;
- }
- if (isArray2.check(node)) {
- return node.some(containsCallExpression);
- }
- if (n.Node.check(node)) {
- return types.someField(node, function(_name, child) {
- return containsCallExpression(child);
- });
- }
- return false;
- }
- NPp.canBeFirstInStatement = function() {
- var node = this.node;
- return !n.FunctionExpression.check(node) && !n.ObjectExpression.check(node);
- };
- NPp.firstInStatement = function() {
- return firstInStatement(this);
- };
- function firstInStatement(path10) {
- for (var node, parent; path10.parent; path10 = path10.parent) {
- node = path10.node;
- parent = path10.parent.node;
- if (n.BlockStatement.check(parent) && path10.parent.name === "body" && path10.name === 0) {
- if (parent.body[0] !== node) {
- throw new Error("Nodes must be equal");
- }
- return true;
- }
- if (n.ExpressionStatement.check(parent) && path10.name === "expression") {
- if (parent.expression !== node) {
- throw new Error("Nodes must be equal");
- }
- return true;
- }
- if (n.SequenceExpression.check(parent) && path10.parent.name === "expressions" && path10.name === 0) {
- if (parent.expressions[0] !== node) {
- throw new Error("Nodes must be equal");
- }
- continue;
- }
- if (n.CallExpression.check(parent) && path10.name === "callee") {
- if (parent.callee !== node) {
- throw new Error("Nodes must be equal");
- }
- continue;
- }
- if (n.MemberExpression.check(parent) && path10.name === "object") {
- if (parent.object !== node) {
- throw new Error("Nodes must be equal");
- }
- continue;
- }
- if (n.ConditionalExpression.check(parent) && path10.name === "test") {
- if (parent.test !== node) {
- throw new Error("Nodes must be equal");
- }
- continue;
- }
- if (isBinary(parent) && path10.name === "left") {
- if (parent.left !== node) {
- throw new Error("Nodes must be equal");
- }
- continue;
- }
- if (n.UnaryExpression.check(parent) && !parent.prefix && path10.name === "argument") {
- if (parent.argument !== node) {
- throw new Error("Nodes must be equal");
- }
- continue;
- }
- return false;
- }
- return true;
- }
- function cleanUpNodesAfterPrune(remainingNodePath) {
- if (n.VariableDeclaration.check(remainingNodePath.node)) {
- var declarations = remainingNodePath.get("declarations").value;
- if (!declarations || declarations.length === 0) {
- return remainingNodePath.prune();
- }
- } else if (n.ExpressionStatement.check(remainingNodePath.node)) {
- if (!remainingNodePath.get("expression").value) {
- return remainingNodePath.prune();
- }
- } else if (n.IfStatement.check(remainingNodePath.node)) {
- cleanUpIfStatementAfterPrune(remainingNodePath);
- }
- return remainingNodePath;
- }
- function cleanUpIfStatementAfterPrune(ifStatement) {
- var testExpression = ifStatement.get("test").value;
- var alternate = ifStatement.get("alternate").value;
- var consequent = ifStatement.get("consequent").value;
- if (!consequent && !alternate) {
- var testExpressionStatement = b.expressionStatement(testExpression);
- ifStatement.replace(testExpressionStatement);
- } else if (!consequent && alternate) {
- var negatedTestExpression = b.unaryExpression("!", testExpression, true);
- if (n.UnaryExpression.check(testExpression) && testExpression.operator === "!") {
- negatedTestExpression = testExpression.argument;
- }
- ifStatement.get("test").replace(negatedTestExpression);
- ifStatement.get("consequent").replace(alternate);
- ifStatement.get("alternate").replace();
- }
- }
- return NodePath;
- }
- exports.default = nodePathPlugin;
- module2.exports = exports["default"];
- }
-});
-
-// .yarn/cache/ast-types-npm-0.13.4-69f7e68df8-3a1a409764.zip/node_modules/ast-types/lib/path-visitor.js
-var require_path_visitor = __commonJS({
- ".yarn/cache/ast-types-npm-0.13.4-69f7e68df8-3a1a409764.zip/node_modules/ast-types/lib/path-visitor.js"(exports, module2) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var tslib_1 = (init_tslib_es6(), __toCommonJS(tslib_es6_exports));
- var types_1 = tslib_1.__importDefault(require_types());
- var node_path_1 = tslib_1.__importDefault(require_node_path());
- var hasOwn = Object.prototype.hasOwnProperty;
- function pathVisitorPlugin(fork) {
- var types = fork.use(types_1.default);
- var NodePath = fork.use(node_path_1.default);
- var isArray2 = types.builtInTypes.array;
- var isObject2 = types.builtInTypes.object;
- var isFunction = types.builtInTypes.function;
- var undefined2;
- var PathVisitor = function PathVisitor2() {
- if (!(this instanceof PathVisitor2)) {
- throw new Error("PathVisitor constructor cannot be invoked without 'new'");
- }
- this._reusableContextStack = [];
- this._methodNameTable = computeMethodNameTable(this);
- this._shouldVisitComments = hasOwn.call(this._methodNameTable, "Block") || hasOwn.call(this._methodNameTable, "Line");
- this.Context = makeContextConstructor(this);
- this._visiting = false;
- this._changeReported = false;
- };
- function computeMethodNameTable(visitor) {
- var typeNames = /* @__PURE__ */ Object.create(null);
- for (var methodName in visitor) {
- if (/^visit[A-Z]/.test(methodName)) {
- typeNames[methodName.slice("visit".length)] = true;
- }
- }
- var supertypeTable = types.computeSupertypeLookupTable(typeNames);
- var methodNameTable = /* @__PURE__ */ Object.create(null);
- var typeNameKeys = Object.keys(supertypeTable);
- var typeNameCount = typeNameKeys.length;
- for (var i = 0; i < typeNameCount; ++i) {
- var typeName = typeNameKeys[i];
- methodName = "visit" + supertypeTable[typeName];
- if (isFunction.check(visitor[methodName])) {
- methodNameTable[typeName] = methodName;
- }
- }
- return methodNameTable;
- }
- PathVisitor.fromMethodsObject = function fromMethodsObject(methods) {
- if (methods instanceof PathVisitor) {
- return methods;
- }
- if (!isObject2.check(methods)) {
- return new PathVisitor();
- }
- var Visitor = function Visitor2() {
- if (!(this instanceof Visitor2)) {
- throw new Error("Visitor constructor cannot be invoked without 'new'");
- }
- PathVisitor.call(this);
- };
- var Vp = Visitor.prototype = Object.create(PVp);
- Vp.constructor = Visitor;
- extend(Vp, methods);
- extend(Visitor, PathVisitor);
- isFunction.assert(Visitor.fromMethodsObject);
- isFunction.assert(Visitor.visit);
- return new Visitor();
- };
- function extend(target, source) {
- for (var property in source) {
- if (hasOwn.call(source, property)) {
- target[property] = source[property];
- }
- }
- return target;
- }
- PathVisitor.visit = function visit(node, methods) {
- return PathVisitor.fromMethodsObject(methods).visit(node);
- };
- var PVp = PathVisitor.prototype;
- PVp.visit = function() {
- if (this._visiting) {
- throw new Error("Recursively calling visitor.visit(path) resets visitor state. Try this.visit(path) or this.traverse(path) instead.");
- }
- this._visiting = true;
- this._changeReported = false;
- this._abortRequested = false;
- var argc = arguments.length;
- var args = new Array(argc);
- for (var i = 0; i < argc; ++i) {
- args[i] = arguments[i];
- }
- if (!(args[0] instanceof NodePath)) {
- args[0] = new NodePath({ root: args[0] }).get("root");
- }
- this.reset.apply(this, args);
- var didNotThrow;
- try {
- var root = this.visitWithoutReset(args[0]);
- didNotThrow = true;
- } finally {
- this._visiting = false;
- if (!didNotThrow && this._abortRequested) {
- return args[0].value;
- }
- }
- return root;
- };
- PVp.AbortRequest = function AbortRequest() {
- };
- PVp.abort = function() {
- var visitor = this;
- visitor._abortRequested = true;
- var request = new visitor.AbortRequest();
- request.cancel = function() {
- visitor._abortRequested = false;
- };
- throw request;
- };
- PVp.reset = function(_path) {
- };
- PVp.visitWithoutReset = function(path10) {
- if (this instanceof this.Context) {
- return this.visitor.visitWithoutReset(path10);
- }
- if (!(path10 instanceof NodePath)) {
- throw new Error("");
- }
- var value = path10.value;
- var methodName = value && typeof value === "object" && typeof value.type === "string" && this._methodNameTable[value.type];
- if (methodName) {
- var context = this.acquireContext(path10);
- try {
- return context.invokeVisitorMethod(methodName);
- } finally {
- this.releaseContext(context);
- }
- } else {
- return visitChildren(path10, this);
- }
- };
- function visitChildren(path10, visitor) {
- if (!(path10 instanceof NodePath)) {
- throw new Error("");
- }
- if (!(visitor instanceof PathVisitor)) {
- throw new Error("");
- }
- var value = path10.value;
- if (isArray2.check(value)) {
- path10.each(visitor.visitWithoutReset, visitor);
- } else if (!isObject2.check(value)) {
- } else {
- var childNames = types.getFieldNames(value);
- if (visitor._shouldVisitComments && value.comments && childNames.indexOf("comments") < 0) {
- childNames.push("comments");
- }
- var childCount = childNames.length;
- var childPaths = [];
- for (var i = 0; i < childCount; ++i) {
- var childName = childNames[i];
- if (!hasOwn.call(value, childName)) {
- value[childName] = types.getFieldValue(value, childName);
- }
- childPaths.push(path10.get(childName));
- }
- for (var i = 0; i < childCount; ++i) {
- visitor.visitWithoutReset(childPaths[i]);
- }
- }
- return path10.value;
- }
- PVp.acquireContext = function(path10) {
- if (this._reusableContextStack.length === 0) {
- return new this.Context(path10);
- }
- return this._reusableContextStack.pop().reset(path10);
- };
- PVp.releaseContext = function(context) {
- if (!(context instanceof this.Context)) {
- throw new Error("");
- }
- this._reusableContextStack.push(context);
- context.currentPath = null;
- };
- PVp.reportChanged = function() {
- this._changeReported = true;
- };
- PVp.wasChangeReported = function() {
- return this._changeReported;
- };
- function makeContextConstructor(visitor) {
- function Context(path10) {
- if (!(this instanceof Context)) {
- throw new Error("");
- }
- if (!(this instanceof PathVisitor)) {
- throw new Error("");
- }
- if (!(path10 instanceof NodePath)) {
- throw new Error("");
- }
- Object.defineProperty(this, "visitor", {
- value: visitor,
- writable: false,
- enumerable: true,
- configurable: false
- });
- this.currentPath = path10;
- this.needToCallTraverse = true;
- Object.seal(this);
- }
- if (!(visitor instanceof PathVisitor)) {
- throw new Error("");
- }
- var Cp = Context.prototype = Object.create(visitor);
- Cp.constructor = Context;
- extend(Cp, sharedContextProtoMethods);
- return Context;
- }
- var sharedContextProtoMethods = /* @__PURE__ */ Object.create(null);
- sharedContextProtoMethods.reset = function reset(path10) {
- if (!(this instanceof this.Context)) {
- throw new Error("");
- }
- if (!(path10 instanceof NodePath)) {
- throw new Error("");
- }
- this.currentPath = path10;
- this.needToCallTraverse = true;
- return this;
- };
- sharedContextProtoMethods.invokeVisitorMethod = function invokeVisitorMethod(methodName) {
- if (!(this instanceof this.Context)) {
- throw new Error("");
- }
- if (!(this.currentPath instanceof NodePath)) {
- throw new Error("");
- }
- var result = this.visitor[methodName].call(this, this.currentPath);
- if (result === false) {
- this.needToCallTraverse = false;
- } else if (result !== undefined2) {
- this.currentPath = this.currentPath.replace(result)[0];
- if (this.needToCallTraverse) {
- this.traverse(this.currentPath);
- }
- }
- if (this.needToCallTraverse !== false) {
- throw new Error("Must either call this.traverse or return false in " + methodName);
- }
- var path10 = this.currentPath;
- return path10 && path10.value;
- };
- sharedContextProtoMethods.traverse = function traverse(path10, newVisitor) {
- if (!(this instanceof this.Context)) {
- throw new Error("");
- }
- if (!(path10 instanceof NodePath)) {
- throw new Error("");
- }
- if (!(this.currentPath instanceof NodePath)) {
- throw new Error("");
- }
- this.needToCallTraverse = false;
- return visitChildren(path10, PathVisitor.fromMethodsObject(newVisitor || this.visitor));
- };
- sharedContextProtoMethods.visit = function visit(path10, newVisitor) {
- if (!(this instanceof this.Context)) {
- throw new Error("");
- }
- if (!(path10 instanceof NodePath)) {
- throw new Error("");
- }
- if (!(this.currentPath instanceof NodePath)) {
- throw new Error("");
- }
- this.needToCallTraverse = false;
- return PathVisitor.fromMethodsObject(newVisitor || this.visitor).visitWithoutReset(path10);
- };
- sharedContextProtoMethods.reportChanged = function reportChanged() {
- this.visitor.reportChanged();
- };
- sharedContextProtoMethods.abort = function abort() {
- this.needToCallTraverse = false;
- this.visitor.abort();
- };
- return PathVisitor;
- }
- exports.default = pathVisitorPlugin;
- module2.exports = exports["default"];
- }
-});
-
-// .yarn/cache/ast-types-npm-0.13.4-69f7e68df8-3a1a409764.zip/node_modules/ast-types/lib/equiv.js
-var require_equiv = __commonJS({
- ".yarn/cache/ast-types-npm-0.13.4-69f7e68df8-3a1a409764.zip/node_modules/ast-types/lib/equiv.js"(exports, module2) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var tslib_1 = (init_tslib_es6(), __toCommonJS(tslib_es6_exports));
- var types_1 = tslib_1.__importDefault(require_types());
- function default_1(fork) {
- var types = fork.use(types_1.default);
- var getFieldNames = types.getFieldNames;
- var getFieldValue = types.getFieldValue;
- var isArray2 = types.builtInTypes.array;
- var isObject2 = types.builtInTypes.object;
- var isDate2 = types.builtInTypes.Date;
- var isRegExp = types.builtInTypes.RegExp;
- var hasOwn = Object.prototype.hasOwnProperty;
- function astNodesAreEquivalent(a, b, problemPath) {
- if (isArray2.check(problemPath)) {
- problemPath.length = 0;
- } else {
- problemPath = null;
- }
- return areEquivalent(a, b, problemPath);
- }
- astNodesAreEquivalent.assert = function(a, b) {
- var problemPath = [];
- if (!astNodesAreEquivalent(a, b, problemPath)) {
- if (problemPath.length === 0) {
- if (a !== b) {
- throw new Error("Nodes must be equal");
- }
- } else {
- throw new Error("Nodes differ in the following path: " + problemPath.map(subscriptForProperty).join(""));
- }
- }
- };
- function subscriptForProperty(property) {
- if (/[_$a-z][_$a-z0-9]*/i.test(property)) {
- return "." + property;
- }
- return "[" + JSON.stringify(property) + "]";
- }
- function areEquivalent(a, b, problemPath) {
- if (a === b) {
- return true;
- }
- if (isArray2.check(a)) {
- return arraysAreEquivalent(a, b, problemPath);
- }
- if (isObject2.check(a)) {
- return objectsAreEquivalent(a, b, problemPath);
- }
- if (isDate2.check(a)) {
- return isDate2.check(b) && +a === +b;
- }
- if (isRegExp.check(a)) {
- return isRegExp.check(b) && (a.source === b.source && a.global === b.global && a.multiline === b.multiline && a.ignoreCase === b.ignoreCase);
- }
- return a == b;
- }
- function arraysAreEquivalent(a, b, problemPath) {
- isArray2.assert(a);
- var aLength = a.length;
- if (!isArray2.check(b) || b.length !== aLength) {
- if (problemPath) {
- problemPath.push("length");
- }
- return false;
- }
- for (var i = 0; i < aLength; ++i) {
- if (problemPath) {
- problemPath.push(i);
- }
- if (i in a !== i in b) {
- return false;
- }
- if (!areEquivalent(a[i], b[i], problemPath)) {
- return false;
- }
- if (problemPath) {
- var problemPathTail = problemPath.pop();
- if (problemPathTail !== i) {
- throw new Error("" + problemPathTail);
- }
- }
- }
- return true;
- }
- function objectsAreEquivalent(a, b, problemPath) {
- isObject2.assert(a);
- if (!isObject2.check(b)) {
- return false;
- }
- if (a.type !== b.type) {
- if (problemPath) {
- problemPath.push("type");
- }
- return false;
- }
- var aNames = getFieldNames(a);
- var aNameCount = aNames.length;
- var bNames = getFieldNames(b);
- var bNameCount = bNames.length;
- if (aNameCount === bNameCount) {
- for (var i = 0; i < aNameCount; ++i) {
- var name = aNames[i];
- var aChild = getFieldValue(a, name);
- var bChild = getFieldValue(b, name);
- if (problemPath) {
- problemPath.push(name);
- }
- if (!areEquivalent(aChild, bChild, problemPath)) {
- return false;
- }
- if (problemPath) {
- var problemPathTail = problemPath.pop();
- if (problemPathTail !== name) {
- throw new Error("" + problemPathTail);
- }
- }
- }
- return true;
- }
- if (!problemPath) {
- return false;
- }
- var seenNames = /* @__PURE__ */ Object.create(null);
- for (i = 0; i < aNameCount; ++i) {
- seenNames[aNames[i]] = true;
- }
- for (i = 0; i < bNameCount; ++i) {
- name = bNames[i];
- if (!hasOwn.call(seenNames, name)) {
- problemPath.push(name);
- return false;
- }
- delete seenNames[name];
- }
- for (name in seenNames) {
- problemPath.push(name);
- break;
- }
- return false;
- }
- return astNodesAreEquivalent;
- }
- exports.default = default_1;
- module2.exports = exports["default"];
- }
-});
-
-// .yarn/cache/ast-types-npm-0.13.4-69f7e68df8-3a1a409764.zip/node_modules/ast-types/fork.js
-var require_fork = __commonJS({
- ".yarn/cache/ast-types-npm-0.13.4-69f7e68df8-3a1a409764.zip/node_modules/ast-types/fork.js"(exports, module2) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var tslib_1 = (init_tslib_es6(), __toCommonJS(tslib_es6_exports));
- var types_1 = tslib_1.__importDefault(require_types());
- var path_visitor_1 = tslib_1.__importDefault(require_path_visitor());
- var equiv_1 = tslib_1.__importDefault(require_equiv());
- var path_1 = tslib_1.__importDefault(require_path());
- var node_path_1 = tslib_1.__importDefault(require_node_path());
- function default_1(defs) {
- var fork = createFork();
- var types = fork.use(types_1.default);
- defs.forEach(fork.use);
- types.finalize();
- var PathVisitor = fork.use(path_visitor_1.default);
- return {
- Type: types.Type,
- builtInTypes: types.builtInTypes,
- namedTypes: types.namedTypes,
- builders: types.builders,
- defineMethod: types.defineMethod,
- getFieldNames: types.getFieldNames,
- getFieldValue: types.getFieldValue,
- eachField: types.eachField,
- someField: types.someField,
- getSupertypeNames: types.getSupertypeNames,
- getBuilderName: types.getBuilderName,
- astNodesAreEquivalent: fork.use(equiv_1.default),
- finalize: types.finalize,
- Path: fork.use(path_1.default),
- NodePath: fork.use(node_path_1.default),
- PathVisitor,
- use: fork.use,
- visit: PathVisitor.visit
- };
- }
- exports.default = default_1;
- function createFork() {
- var used = [];
- var usedResult = [];
- function use(plugin) {
- var idx = used.indexOf(plugin);
- if (idx === -1) {
- idx = used.length;
- used.push(plugin);
- usedResult[idx] = plugin(fork);
- }
- return usedResult[idx];
- }
- var fork = { use };
- return fork;
- }
- module2.exports = exports["default"];
- }
-});
-
-// .yarn/cache/ast-types-npm-0.13.4-69f7e68df8-3a1a409764.zip/node_modules/ast-types/lib/shared.js
-var require_shared = __commonJS({
- ".yarn/cache/ast-types-npm-0.13.4-69f7e68df8-3a1a409764.zip/node_modules/ast-types/lib/shared.js"(exports, module2) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var tslib_1 = (init_tslib_es6(), __toCommonJS(tslib_es6_exports));
- var types_1 = tslib_1.__importDefault(require_types());
- function default_1(fork) {
- var types = fork.use(types_1.default);
- var Type = types.Type;
- var builtin = types.builtInTypes;
- var isNumber2 = builtin.number;
- function geq(than) {
- return Type.from(function(value) {
- return isNumber2.check(value) && value >= than;
- }, isNumber2 + " >= " + than);
- }
- ;
- var defaults = {
- // Functions were used because (among other reasons) that's the most
- // elegant way to allow for the emptyArray one always to give a new
- // array instance.
- "null": function() {
- return null;
- },
- "emptyArray": function() {
- return [];
- },
- "false": function() {
- return false;
- },
- "true": function() {
- return true;
- },
- "undefined": function() {
- },
- "use strict": function() {
- return "use strict";
- }
- };
- var naiveIsPrimitive = Type.or(builtin.string, builtin.number, builtin.boolean, builtin.null, builtin.undefined);
- var isPrimitive = Type.from(function(value) {
- if (value === null)
- return true;
- var type = typeof value;
- if (type === "object" || type === "function") {
- return false;
- }
- return true;
- }, naiveIsPrimitive.toString());
- return {
- geq,
- defaults,
- isPrimitive
- };
- }
- exports.default = default_1;
- module2.exports = exports["default"];
- }
-});
-
-// .yarn/cache/ast-types-npm-0.13.4-69f7e68df8-3a1a409764.zip/node_modules/ast-types/def/core.js
-var require_core = __commonJS({
- ".yarn/cache/ast-types-npm-0.13.4-69f7e68df8-3a1a409764.zip/node_modules/ast-types/def/core.js"(exports, module2) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var tslib_1 = (init_tslib_es6(), __toCommonJS(tslib_es6_exports));
- var types_1 = tslib_1.__importDefault(require_types());
- var shared_1 = tslib_1.__importDefault(require_shared());
- function default_1(fork) {
- var types = fork.use(types_1.default);
- var Type = types.Type;
- var def = Type.def;
- var or = Type.or;
- var shared = fork.use(shared_1.default);
- var defaults = shared.defaults;
- var geq = shared.geq;
- def("Printable").field("loc", or(def("SourceLocation"), null), defaults["null"], true);
- def("Node").bases("Printable").field("type", String).field("comments", or([def("Comment")], null), defaults["null"], true);
- def("SourceLocation").field("start", def("Position")).field("end", def("Position")).field("source", or(String, null), defaults["null"]);
- def("Position").field("line", geq(1)).field("column", geq(0));
- def("File").bases("Node").build("program", "name").field("program", def("Program")).field("name", or(String, null), defaults["null"]);
- def("Program").bases("Node").build("body").field("body", [def("Statement")]);
- def("Function").bases("Node").field("id", or(def("Identifier"), null), defaults["null"]).field("params", [def("Pattern")]).field("body", def("BlockStatement")).field("generator", Boolean, defaults["false"]).field("async", Boolean, defaults["false"]);
- def("Statement").bases("Node");
- def("EmptyStatement").bases("Statement").build();
- def("BlockStatement").bases("Statement").build("body").field("body", [def("Statement")]);
- def("ExpressionStatement").bases("Statement").build("expression").field("expression", def("Expression"));
- def("IfStatement").bases("Statement").build("test", "consequent", "alternate").field("test", def("Expression")).field("consequent", def("Statement")).field("alternate", or(def("Statement"), null), defaults["null"]);
- def("LabeledStatement").bases("Statement").build("label", "body").field("label", def("Identifier")).field("body", def("Statement"));
- def("BreakStatement").bases("Statement").build("label").field("label", or(def("Identifier"), null), defaults["null"]);
- def("ContinueStatement").bases("Statement").build("label").field("label", or(def("Identifier"), null), defaults["null"]);
- def("WithStatement").bases("Statement").build("object", "body").field("object", def("Expression")).field("body", def("Statement"));
- def("SwitchStatement").bases("Statement").build("discriminant", "cases", "lexical").field("discriminant", def("Expression")).field("cases", [def("SwitchCase")]).field("lexical", Boolean, defaults["false"]);
- def("ReturnStatement").bases("Statement").build("argument").field("argument", or(def("Expression"), null));
- def("ThrowStatement").bases("Statement").build("argument").field("argument", def("Expression"));
- def("TryStatement").bases("Statement").build("block", "handler", "finalizer").field("block", def("BlockStatement")).field("handler", or(def("CatchClause"), null), function() {
- return this.handlers && this.handlers[0] || null;
- }).field("handlers", [def("CatchClause")], function() {
- return this.handler ? [this.handler] : [];
- }, true).field("guardedHandlers", [def("CatchClause")], defaults.emptyArray).field("finalizer", or(def("BlockStatement"), null), defaults["null"]);
- def("CatchClause").bases("Node").build("param", "guard", "body").field("param", or(def("Pattern"), null), defaults["null"]).field("guard", or(def("Expression"), null), defaults["null"]).field("body", def("BlockStatement"));
- def("WhileStatement").bases("Statement").build("test", "body").field("test", def("Expression")).field("body", def("Statement"));
- def("DoWhileStatement").bases("Statement").build("body", "test").field("body", def("Statement")).field("test", def("Expression"));
- def("ForStatement").bases("Statement").build("init", "test", "update", "body").field("init", or(def("VariableDeclaration"), def("Expression"), null)).field("test", or(def("Expression"), null)).field("update", or(def("Expression"), null)).field("body", def("Statement"));
- def("ForInStatement").bases("Statement").build("left", "right", "body").field("left", or(def("VariableDeclaration"), def("Expression"))).field("right", def("Expression")).field("body", def("Statement"));
- def("DebuggerStatement").bases("Statement").build();
- def("Declaration").bases("Statement");
- def("FunctionDeclaration").bases("Function", "Declaration").build("id", "params", "body").field("id", def("Identifier"));
- def("FunctionExpression").bases("Function", "Expression").build("id", "params", "body");
- def("VariableDeclaration").bases("Declaration").build("kind", "declarations").field("kind", or("var", "let", "const")).field("declarations", [def("VariableDeclarator")]);
- def("VariableDeclarator").bases("Node").build("id", "init").field("id", def("Pattern")).field("init", or(def("Expression"), null), defaults["null"]);
- def("Expression").bases("Node");
- def("ThisExpression").bases("Expression").build();
- def("ArrayExpression").bases("Expression").build("elements").field("elements", [or(def("Expression"), null)]);
- def("ObjectExpression").bases("Expression").build("properties").field("properties", [def("Property")]);
- def("Property").bases("Node").build("kind", "key", "value").field("kind", or("init", "get", "set")).field("key", or(def("Literal"), def("Identifier"))).field("value", def("Expression"));
- def("SequenceExpression").bases("Expression").build("expressions").field("expressions", [def("Expression")]);
- var UnaryOperator = or("-", "+", "!", "~", "typeof", "void", "delete");
- def("UnaryExpression").bases("Expression").build("operator", "argument", "prefix").field("operator", UnaryOperator).field("argument", def("Expression")).field("prefix", Boolean, defaults["true"]);
- var BinaryOperator = or(
- "==",
- "!=",
- "===",
- "!==",
- "<",
- "<=",
- ">",
- ">=",
- "<<",
- ">>",
- ">>>",
- "+",
- "-",
- "*",
- "/",
- "%",
- "**",
- "&",
- // TODO Missing from the Parser API.
- "|",
- "^",
- "in",
- "instanceof"
- );
- def("BinaryExpression").bases("Expression").build("operator", "left", "right").field("operator", BinaryOperator).field("left", def("Expression")).field("right", def("Expression"));
- var AssignmentOperator = or("=", "+=", "-=", "*=", "/=", "%=", "<<=", ">>=", ">>>=", "|=", "^=", "&=");
- def("AssignmentExpression").bases("Expression").build("operator", "left", "right").field("operator", AssignmentOperator).field("left", or(def("Pattern"), def("MemberExpression"))).field("right", def("Expression"));
- var UpdateOperator = or("++", "--");
- def("UpdateExpression").bases("Expression").build("operator", "argument", "prefix").field("operator", UpdateOperator).field("argument", def("Expression")).field("prefix", Boolean);
- var LogicalOperator = or("||", "&&");
- def("LogicalExpression").bases("Expression").build("operator", "left", "right").field("operator", LogicalOperator).field("left", def("Expression")).field("right", def("Expression"));
- def("ConditionalExpression").bases("Expression").build("test", "consequent", "alternate").field("test", def("Expression")).field("consequent", def("Expression")).field("alternate", def("Expression"));
- def("NewExpression").bases("Expression").build("callee", "arguments").field("callee", def("Expression")).field("arguments", [def("Expression")]);
- def("CallExpression").bases("Expression").build("callee", "arguments").field("callee", def("Expression")).field("arguments", [def("Expression")]);
- def("MemberExpression").bases("Expression").build("object", "property", "computed").field("object", def("Expression")).field("property", or(def("Identifier"), def("Expression"))).field("computed", Boolean, function() {
- var type = this.property.type;
- if (type === "Literal" || type === "MemberExpression" || type === "BinaryExpression") {
- return true;
- }
- return false;
- });
- def("Pattern").bases("Node");
- def("SwitchCase").bases("Node").build("test", "consequent").field("test", or(def("Expression"), null)).field("consequent", [def("Statement")]);
- def("Identifier").bases("Expression", "Pattern").build("name").field("name", String).field("optional", Boolean, defaults["false"]);
- def("Literal").bases("Expression").build("value").field("value", or(String, Boolean, null, Number, RegExp)).field("regex", or({
- pattern: String,
- flags: String
- }, null), function() {
- if (this.value instanceof RegExp) {
- var flags = "";
- if (this.value.ignoreCase)
- flags += "i";
- if (this.value.multiline)
- flags += "m";
- if (this.value.global)
- flags += "g";
- return {
- pattern: this.value.source,
- flags
- };
- }
- return null;
- });
- def("Comment").bases("Printable").field("value", String).field("leading", Boolean, defaults["true"]).field("trailing", Boolean, defaults["false"]);
- }
- exports.default = default_1;
- module2.exports = exports["default"];
- }
-});
-
-// .yarn/cache/ast-types-npm-0.13.4-69f7e68df8-3a1a409764.zip/node_modules/ast-types/def/es6.js
-var require_es6 = __commonJS({
- ".yarn/cache/ast-types-npm-0.13.4-69f7e68df8-3a1a409764.zip/node_modules/ast-types/def/es6.js"(exports, module2) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var tslib_1 = (init_tslib_es6(), __toCommonJS(tslib_es6_exports));
- var core_1 = tslib_1.__importDefault(require_core());
- var types_1 = tslib_1.__importDefault(require_types());
- var shared_1 = tslib_1.__importDefault(require_shared());
- function default_1(fork) {
- fork.use(core_1.default);
- var types = fork.use(types_1.default);
- var def = types.Type.def;
- var or = types.Type.or;
- var defaults = fork.use(shared_1.default).defaults;
- def("Function").field("generator", Boolean, defaults["false"]).field("expression", Boolean, defaults["false"]).field("defaults", [or(def("Expression"), null)], defaults.emptyArray).field("rest", or(def("Identifier"), null), defaults["null"]);
- def("RestElement").bases("Pattern").build("argument").field("argument", def("Pattern")).field(
- "typeAnnotation",
- // for Babylon. Flow parser puts it on the identifier
- or(def("TypeAnnotation"), def("TSTypeAnnotation"), null),
- defaults["null"]
- );
- def("SpreadElementPattern").bases("Pattern").build("argument").field("argument", def("Pattern"));
- def("FunctionDeclaration").build("id", "params", "body", "generator", "expression");
- def("FunctionExpression").build("id", "params", "body", "generator", "expression");
- def("ArrowFunctionExpression").bases("Function", "Expression").build("params", "body", "expression").field("id", null, defaults["null"]).field("body", or(def("BlockStatement"), def("Expression"))).field("generator", false, defaults["false"]);
- def("ForOfStatement").bases("Statement").build("left", "right", "body").field("left", or(def("VariableDeclaration"), def("Pattern"))).field("right", def("Expression")).field("body", def("Statement"));
- def("YieldExpression").bases("Expression").build("argument", "delegate").field("argument", or(def("Expression"), null)).field("delegate", Boolean, defaults["false"]);
- def("GeneratorExpression").bases("Expression").build("body", "blocks", "filter").field("body", def("Expression")).field("blocks", [def("ComprehensionBlock")]).field("filter", or(def("Expression"), null));
- def("ComprehensionExpression").bases("Expression").build("body", "blocks", "filter").field("body", def("Expression")).field("blocks", [def("ComprehensionBlock")]).field("filter", or(def("Expression"), null));
- def("ComprehensionBlock").bases("Node").build("left", "right", "each").field("left", def("Pattern")).field("right", def("Expression")).field("each", Boolean);
- def("Property").field("key", or(def("Literal"), def("Identifier"), def("Expression"))).field("value", or(def("Expression"), def("Pattern"))).field("method", Boolean, defaults["false"]).field("shorthand", Boolean, defaults["false"]).field("computed", Boolean, defaults["false"]);
- def("ObjectProperty").field("shorthand", Boolean, defaults["false"]);
- def("PropertyPattern").bases("Pattern").build("key", "pattern").field("key", or(def("Literal"), def("Identifier"), def("Expression"))).field("pattern", def("Pattern")).field("computed", Boolean, defaults["false"]);
- def("ObjectPattern").bases("Pattern").build("properties").field("properties", [or(def("PropertyPattern"), def("Property"))]);
- def("ArrayPattern").bases("Pattern").build("elements").field("elements", [or(def("Pattern"), null)]);
- def("MethodDefinition").bases("Declaration").build("kind", "key", "value", "static").field("kind", or("constructor", "method", "get", "set")).field("key", def("Expression")).field("value", def("Function")).field("computed", Boolean, defaults["false"]).field("static", Boolean, defaults["false"]);
- def("SpreadElement").bases("Node").build("argument").field("argument", def("Expression"));
- def("ArrayExpression").field("elements", [or(def("Expression"), def("SpreadElement"), def("RestElement"), null)]);
- def("NewExpression").field("arguments", [or(def("Expression"), def("SpreadElement"))]);
- def("CallExpression").field("arguments", [or(def("Expression"), def("SpreadElement"))]);
- def("AssignmentPattern").bases("Pattern").build("left", "right").field("left", def("Pattern")).field("right", def("Expression"));
- var ClassBodyElement = or(def("MethodDefinition"), def("VariableDeclarator"), def("ClassPropertyDefinition"), def("ClassProperty"));
- def("ClassProperty").bases("Declaration").build("key").field("key", or(def("Literal"), def("Identifier"), def("Expression"))).field("computed", Boolean, defaults["false"]);
- def("ClassPropertyDefinition").bases("Declaration").build("definition").field("definition", ClassBodyElement);
- def("ClassBody").bases("Declaration").build("body").field("body", [ClassBodyElement]);
- def("ClassDeclaration").bases("Declaration").build("id", "body", "superClass").field("id", or(def("Identifier"), null)).field("body", def("ClassBody")).field("superClass", or(def("Expression"), null), defaults["null"]);
- def("ClassExpression").bases("Expression").build("id", "body", "superClass").field("id", or(def("Identifier"), null), defaults["null"]).field("body", def("ClassBody")).field("superClass", or(def("Expression"), null), defaults["null"]);
- def("Specifier").bases("Node");
- def("ModuleSpecifier").bases("Specifier").field("local", or(def("Identifier"), null), defaults["null"]).field("id", or(def("Identifier"), null), defaults["null"]).field("name", or(def("Identifier"), null), defaults["null"]);
- def("ImportSpecifier").bases("ModuleSpecifier").build("id", "name");
- def("ImportNamespaceSpecifier").bases("ModuleSpecifier").build("id");
- def("ImportDefaultSpecifier").bases("ModuleSpecifier").build("id");
- def("ImportDeclaration").bases("Declaration").build("specifiers", "source", "importKind").field("specifiers", [or(def("ImportSpecifier"), def("ImportNamespaceSpecifier"), def("ImportDefaultSpecifier"))], defaults.emptyArray).field("source", def("Literal")).field("importKind", or("value", "type"), function() {
- return "value";
- });
- def("TaggedTemplateExpression").bases("Expression").build("tag", "quasi").field("tag", def("Expression")).field("quasi", def("TemplateLiteral"));
- def("TemplateLiteral").bases("Expression").build("quasis", "expressions").field("quasis", [def("TemplateElement")]).field("expressions", [def("Expression")]);
- def("TemplateElement").bases("Node").build("value", "tail").field("value", { "cooked": String, "raw": String }).field("tail", Boolean);
- }
- exports.default = default_1;
- module2.exports = exports["default"];
- }
-});
-
-// .yarn/cache/ast-types-npm-0.13.4-69f7e68df8-3a1a409764.zip/node_modules/ast-types/def/es7.js
-var require_es7 = __commonJS({
- ".yarn/cache/ast-types-npm-0.13.4-69f7e68df8-3a1a409764.zip/node_modules/ast-types/def/es7.js"(exports, module2) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var tslib_1 = (init_tslib_es6(), __toCommonJS(tslib_es6_exports));
- var es6_1 = tslib_1.__importDefault(require_es6());
- var types_1 = tslib_1.__importDefault(require_types());
- var shared_1 = tslib_1.__importDefault(require_shared());
- function default_1(fork) {
- fork.use(es6_1.default);
- var types = fork.use(types_1.default);
- var def = types.Type.def;
- var or = types.Type.or;
- var defaults = fork.use(shared_1.default).defaults;
- def("Function").field("async", Boolean, defaults["false"]);
- def("SpreadProperty").bases("Node").build("argument").field("argument", def("Expression"));
- def("ObjectExpression").field("properties", [or(def("Property"), def("SpreadProperty"), def("SpreadElement"))]);
- def("SpreadPropertyPattern").bases("Pattern").build("argument").field("argument", def("Pattern"));
- def("ObjectPattern").field("properties", [or(def("Property"), def("PropertyPattern"), def("SpreadPropertyPattern"))]);
- def("AwaitExpression").bases("Expression").build("argument", "all").field("argument", or(def("Expression"), null)).field("all", Boolean, defaults["false"]);
- }
- exports.default = default_1;
- module2.exports = exports["default"];
- }
-});
-
-// .yarn/cache/ast-types-npm-0.13.4-69f7e68df8-3a1a409764.zip/node_modules/ast-types/def/es2020.js
-var require_es2020 = __commonJS({
- ".yarn/cache/ast-types-npm-0.13.4-69f7e68df8-3a1a409764.zip/node_modules/ast-types/def/es2020.js"(exports, module2) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var tslib_1 = (init_tslib_es6(), __toCommonJS(tslib_es6_exports));
- var es7_1 = tslib_1.__importDefault(require_es7());
- var types_1 = tslib_1.__importDefault(require_types());
- function default_1(fork) {
- fork.use(es7_1.default);
- var types = fork.use(types_1.default);
- var def = types.Type.def;
- def("ImportExpression").bases("Expression").build("source").field("source", def("Expression"));
- }
- exports.default = default_1;
- module2.exports = exports["default"];
- }
-});
-
-// .yarn/cache/ast-types-npm-0.13.4-69f7e68df8-3a1a409764.zip/node_modules/ast-types/def/jsx.js
-var require_jsx = __commonJS({
- ".yarn/cache/ast-types-npm-0.13.4-69f7e68df8-3a1a409764.zip/node_modules/ast-types/def/jsx.js"(exports, module2) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var tslib_1 = (init_tslib_es6(), __toCommonJS(tslib_es6_exports));
- var es7_1 = tslib_1.__importDefault(require_es7());
- var types_1 = tslib_1.__importDefault(require_types());
- var shared_1 = tslib_1.__importDefault(require_shared());
- function default_1(fork) {
- fork.use(es7_1.default);
- var types = fork.use(types_1.default);
- var def = types.Type.def;
- var or = types.Type.or;
- var defaults = fork.use(shared_1.default).defaults;
- def("JSXAttribute").bases("Node").build("name", "value").field("name", or(def("JSXIdentifier"), def("JSXNamespacedName"))).field("value", or(
- def("Literal"),
- // attr="value"
- def("JSXExpressionContainer"),
- // attr={value}
- null
- // attr= or just attr
- ), defaults["null"]);
- def("JSXIdentifier").bases("Identifier").build("name").field("name", String);
- def("JSXNamespacedName").bases("Node").build("namespace", "name").field("namespace", def("JSXIdentifier")).field("name", def("JSXIdentifier"));
- def("JSXMemberExpression").bases("MemberExpression").build("object", "property").field("object", or(def("JSXIdentifier"), def("JSXMemberExpression"))).field("property", def("JSXIdentifier")).field("computed", Boolean, defaults.false);
- var JSXElementName = or(def("JSXIdentifier"), def("JSXNamespacedName"), def("JSXMemberExpression"));
- def("JSXSpreadAttribute").bases("Node").build("argument").field("argument", def("Expression"));
- var JSXAttributes = [or(def("JSXAttribute"), def("JSXSpreadAttribute"))];
- def("JSXExpressionContainer").bases("Expression").build("expression").field("expression", def("Expression"));
- def("JSXElement").bases("Expression").build("openingElement", "closingElement", "children").field("openingElement", def("JSXOpeningElement")).field("closingElement", or(def("JSXClosingElement"), null), defaults["null"]).field("children", [or(
- def("JSXElement"),
- def("JSXExpressionContainer"),
- def("JSXFragment"),
- def("JSXText"),
- def("Literal")
- // TODO Esprima should return JSXText instead.
- )], defaults.emptyArray).field("name", JSXElementName, function() {
- return this.openingElement.name;
- }, true).field("selfClosing", Boolean, function() {
- return this.openingElement.selfClosing;
- }, true).field("attributes", JSXAttributes, function() {
- return this.openingElement.attributes;
- }, true);
- def("JSXOpeningElement").bases("Node").build("name", "attributes", "selfClosing").field("name", JSXElementName).field("attributes", JSXAttributes, defaults.emptyArray).field("selfClosing", Boolean, defaults["false"]);
- def("JSXClosingElement").bases("Node").build("name").field("name", JSXElementName);
- def("JSXFragment").bases("Expression").build("openingElement", "closingElement", "children").field("openingElement", def("JSXOpeningFragment")).field("closingElement", def("JSXClosingFragment")).field("children", [or(
- def("JSXElement"),
- def("JSXExpressionContainer"),
- def("JSXFragment"),
- def("JSXText"),
- def("Literal")
- // TODO Esprima should return JSXText instead.
- )], defaults.emptyArray);
- def("JSXOpeningFragment").bases("Node").build();
- def("JSXClosingFragment").bases("Node").build();
- def("JSXText").bases("Literal").build("value").field("value", String);
- def("JSXEmptyExpression").bases("Expression").build();
- def("JSXSpreadChild").bases("Expression").build("expression").field("expression", def("Expression"));
- }
- exports.default = default_1;
- module2.exports = exports["default"];
- }
-});
-
-// .yarn/cache/ast-types-npm-0.13.4-69f7e68df8-3a1a409764.zip/node_modules/ast-types/def/type-annotations.js
-var require_type_annotations = __commonJS({
- ".yarn/cache/ast-types-npm-0.13.4-69f7e68df8-3a1a409764.zip/node_modules/ast-types/def/type-annotations.js"(exports, module2) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var tslib_1 = (init_tslib_es6(), __toCommonJS(tslib_es6_exports));
- var types_1 = tslib_1.__importDefault(require_types());
- var shared_1 = tslib_1.__importDefault(require_shared());
- function default_1(fork) {
- var types = fork.use(types_1.default);
- var def = types.Type.def;
- var or = types.Type.or;
- var defaults = fork.use(shared_1.default).defaults;
- var TypeAnnotation = or(def("TypeAnnotation"), def("TSTypeAnnotation"), null);
- var TypeParamDecl = or(def("TypeParameterDeclaration"), def("TSTypeParameterDeclaration"), null);
- def("Identifier").field("typeAnnotation", TypeAnnotation, defaults["null"]);
- def("ObjectPattern").field("typeAnnotation", TypeAnnotation, defaults["null"]);
- def("Function").field("returnType", TypeAnnotation, defaults["null"]).field("typeParameters", TypeParamDecl, defaults["null"]);
- def("ClassProperty").build("key", "value", "typeAnnotation", "static").field("value", or(def("Expression"), null)).field("static", Boolean, defaults["false"]).field("typeAnnotation", TypeAnnotation, defaults["null"]);
- [
- "ClassDeclaration",
- "ClassExpression"
- ].forEach(function(typeName) {
- def(typeName).field("typeParameters", TypeParamDecl, defaults["null"]).field("superTypeParameters", or(def("TypeParameterInstantiation"), def("TSTypeParameterInstantiation"), null), defaults["null"]).field("implements", or([def("ClassImplements")], [def("TSExpressionWithTypeArguments")]), defaults.emptyArray);
- });
- }
- exports.default = default_1;
- module2.exports = exports["default"];
- }
-});
-
-// .yarn/cache/ast-types-npm-0.13.4-69f7e68df8-3a1a409764.zip/node_modules/ast-types/def/flow.js
-var require_flow = __commonJS({
- ".yarn/cache/ast-types-npm-0.13.4-69f7e68df8-3a1a409764.zip/node_modules/ast-types/def/flow.js"(exports, module2) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var tslib_1 = (init_tslib_es6(), __toCommonJS(tslib_es6_exports));
- var es7_1 = tslib_1.__importDefault(require_es7());
- var type_annotations_1 = tslib_1.__importDefault(require_type_annotations());
- var types_1 = tslib_1.__importDefault(require_types());
- var shared_1 = tslib_1.__importDefault(require_shared());
- function default_1(fork) {
- fork.use(es7_1.default);
- fork.use(type_annotations_1.default);
- var types = fork.use(types_1.default);
- var def = types.Type.def;
- var or = types.Type.or;
- var defaults = fork.use(shared_1.default).defaults;
- def("Flow").bases("Node");
- def("FlowType").bases("Flow");
- def("AnyTypeAnnotation").bases("FlowType").build();
- def("EmptyTypeAnnotation").bases("FlowType").build();
- def("MixedTypeAnnotation").bases("FlowType").build();
- def("VoidTypeAnnotation").bases("FlowType").build();
- def("NumberTypeAnnotation").bases("FlowType").build();
- def("NumberLiteralTypeAnnotation").bases("FlowType").build("value", "raw").field("value", Number).field("raw", String);
- def("NumericLiteralTypeAnnotation").bases("FlowType").build("value", "raw").field("value", Number).field("raw", String);
- def("StringTypeAnnotation").bases("FlowType").build();
- def("StringLiteralTypeAnnotation").bases("FlowType").build("value", "raw").field("value", String).field("raw", String);
- def("BooleanTypeAnnotation").bases("FlowType").build();
- def("BooleanLiteralTypeAnnotation").bases("FlowType").build("value", "raw").field("value", Boolean).field("raw", String);
- def("TypeAnnotation").bases("Node").build("typeAnnotation").field("typeAnnotation", def("FlowType"));
- def("NullableTypeAnnotation").bases("FlowType").build("typeAnnotation").field("typeAnnotation", def("FlowType"));
- def("NullLiteralTypeAnnotation").bases("FlowType").build();
- def("NullTypeAnnotation").bases("FlowType").build();
- def("ThisTypeAnnotation").bases("FlowType").build();
- def("ExistsTypeAnnotation").bases("FlowType").build();
- def("ExistentialTypeParam").bases("FlowType").build();
- def("FunctionTypeAnnotation").bases("FlowType").build("params", "returnType", "rest", "typeParameters").field("params", [def("FunctionTypeParam")]).field("returnType", def("FlowType")).field("rest", or(def("FunctionTypeParam"), null)).field("typeParameters", or(def("TypeParameterDeclaration"), null));
- def("FunctionTypeParam").bases("Node").build("name", "typeAnnotation", "optional").field("name", def("Identifier")).field("typeAnnotation", def("FlowType")).field("optional", Boolean);
- def("ArrayTypeAnnotation").bases("FlowType").build("elementType").field("elementType", def("FlowType"));
- def("ObjectTypeAnnotation").bases("FlowType").build("properties", "indexers", "callProperties").field("properties", [
- or(def("ObjectTypeProperty"), def("ObjectTypeSpreadProperty"))
- ]).field("indexers", [def("ObjectTypeIndexer")], defaults.emptyArray).field("callProperties", [def("ObjectTypeCallProperty")], defaults.emptyArray).field("inexact", or(Boolean, void 0), defaults["undefined"]).field("exact", Boolean, defaults["false"]).field("internalSlots", [def("ObjectTypeInternalSlot")], defaults.emptyArray);
- def("Variance").bases("Node").build("kind").field("kind", or("plus", "minus"));
- var LegacyVariance = or(def("Variance"), "plus", "minus", null);
- def("ObjectTypeProperty").bases("Node").build("key", "value", "optional").field("key", or(def("Literal"), def("Identifier"))).field("value", def("FlowType")).field("optional", Boolean).field("variance", LegacyVariance, defaults["null"]);
- def("ObjectTypeIndexer").bases("Node").build("id", "key", "value").field("id", def("Identifier")).field("key", def("FlowType")).field("value", def("FlowType")).field("variance", LegacyVariance, defaults["null"]);
- def("ObjectTypeCallProperty").bases("Node").build("value").field("value", def("FunctionTypeAnnotation")).field("static", Boolean, defaults["false"]);
- def("QualifiedTypeIdentifier").bases("Node").build("qualification", "id").field("qualification", or(def("Identifier"), def("QualifiedTypeIdentifier"))).field("id", def("Identifier"));
- def("GenericTypeAnnotation").bases("FlowType").build("id", "typeParameters").field("id", or(def("Identifier"), def("QualifiedTypeIdentifier"))).field("typeParameters", or(def("TypeParameterInstantiation"), null));
- def("MemberTypeAnnotation").bases("FlowType").build("object", "property").field("object", def("Identifier")).field("property", or(def("MemberTypeAnnotation"), def("GenericTypeAnnotation")));
- def("UnionTypeAnnotation").bases("FlowType").build("types").field("types", [def("FlowType")]);
- def("IntersectionTypeAnnotation").bases("FlowType").build("types").field("types", [def("FlowType")]);
- def("TypeofTypeAnnotation").bases("FlowType").build("argument").field("argument", def("FlowType"));
- def("ObjectTypeSpreadProperty").bases("Node").build("argument").field("argument", def("FlowType"));
- def("ObjectTypeInternalSlot").bases("Node").build("id", "value", "optional", "static", "method").field("id", def("Identifier")).field("value", def("FlowType")).field("optional", Boolean).field("static", Boolean).field("method", Boolean);
- def("TypeParameterDeclaration").bases("Node").build("params").field("params", [def("TypeParameter")]);
- def("TypeParameterInstantiation").bases("Node").build("params").field("params", [def("FlowType")]);
- def("TypeParameter").bases("FlowType").build("name", "variance", "bound").field("name", String).field("variance", LegacyVariance, defaults["null"]).field("bound", or(def("TypeAnnotation"), null), defaults["null"]);
- def("ClassProperty").field("variance", LegacyVariance, defaults["null"]);
- def("ClassImplements").bases("Node").build("id").field("id", def("Identifier")).field("superClass", or(def("Expression"), null), defaults["null"]).field("typeParameters", or(def("TypeParameterInstantiation"), null), defaults["null"]);
- def("InterfaceTypeAnnotation").bases("FlowType").build("body", "extends").field("body", def("ObjectTypeAnnotation")).field("extends", or([def("InterfaceExtends")], null), defaults["null"]);
- def("InterfaceDeclaration").bases("Declaration").build("id", "body", "extends").field("id", def("Identifier")).field("typeParameters", or(def("TypeParameterDeclaration"), null), defaults["null"]).field("body", def("ObjectTypeAnnotation")).field("extends", [def("InterfaceExtends")]);
- def("DeclareInterface").bases("InterfaceDeclaration").build("id", "body", "extends");
- def("InterfaceExtends").bases("Node").build("id").field("id", def("Identifier")).field("typeParameters", or(def("TypeParameterInstantiation"), null), defaults["null"]);
- def("TypeAlias").bases("Declaration").build("id", "typeParameters", "right").field("id", def("Identifier")).field("typeParameters", or(def("TypeParameterDeclaration"), null)).field("right", def("FlowType"));
- def("OpaqueType").bases("Declaration").build("id", "typeParameters", "impltype", "supertype").field("id", def("Identifier")).field("typeParameters", or(def("TypeParameterDeclaration"), null)).field("impltype", def("FlowType")).field("supertype", def("FlowType"));
- def("DeclareTypeAlias").bases("TypeAlias").build("id", "typeParameters", "right");
- def("DeclareOpaqueType").bases("TypeAlias").build("id", "typeParameters", "supertype");
- def("TypeCastExpression").bases("Expression").build("expression", "typeAnnotation").field("expression", def("Expression")).field("typeAnnotation", def("TypeAnnotation"));
- def("TupleTypeAnnotation").bases("FlowType").build("types").field("types", [def("FlowType")]);
- def("DeclareVariable").bases("Statement").build("id").field("id", def("Identifier"));
- def("DeclareFunction").bases("Statement").build("id").field("id", def("Identifier"));
- def("DeclareClass").bases("InterfaceDeclaration").build("id");
- def("DeclareModule").bases("Statement").build("id", "body").field("id", or(def("Identifier"), def("Literal"))).field("body", def("BlockStatement"));
- def("DeclareModuleExports").bases("Statement").build("typeAnnotation").field("typeAnnotation", def("TypeAnnotation"));
- def("DeclareExportDeclaration").bases("Declaration").build("default", "declaration", "specifiers", "source").field("default", Boolean).field("declaration", or(
- def("DeclareVariable"),
- def("DeclareFunction"),
- def("DeclareClass"),
- def("FlowType"),
- // Implies default.
- null
- )).field("specifiers", [or(def("ExportSpecifier"), def("ExportBatchSpecifier"))], defaults.emptyArray).field("source", or(def("Literal"), null), defaults["null"]);
- def("DeclareExportAllDeclaration").bases("Declaration").build("source").field("source", or(def("Literal"), null), defaults["null"]);
- def("FlowPredicate").bases("Flow");
- def("InferredPredicate").bases("FlowPredicate").build();
- def("DeclaredPredicate").bases("FlowPredicate").build("value").field("value", def("Expression"));
- def("CallExpression").field("typeArguments", or(null, def("TypeParameterInstantiation")), defaults["null"]);
- def("NewExpression").field("typeArguments", or(null, def("TypeParameterInstantiation")), defaults["null"]);
- }
- exports.default = default_1;
- module2.exports = exports["default"];
- }
-});
-
-// .yarn/cache/ast-types-npm-0.13.4-69f7e68df8-3a1a409764.zip/node_modules/ast-types/def/esprima.js
-var require_esprima2 = __commonJS({
- ".yarn/cache/ast-types-npm-0.13.4-69f7e68df8-3a1a409764.zip/node_modules/ast-types/def/esprima.js"(exports, module2) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var tslib_1 = (init_tslib_es6(), __toCommonJS(tslib_es6_exports));
- var es7_1 = tslib_1.__importDefault(require_es7());
- var types_1 = tslib_1.__importDefault(require_types());
- var shared_1 = tslib_1.__importDefault(require_shared());
- function default_1(fork) {
- fork.use(es7_1.default);
- var types = fork.use(types_1.default);
- var defaults = fork.use(shared_1.default).defaults;
- var def = types.Type.def;
- var or = types.Type.or;
- def("VariableDeclaration").field("declarations", [or(
- def("VariableDeclarator"),
- def("Identifier")
- // Esprima deviation.
- )]);
- def("Property").field("value", or(
- def("Expression"),
- def("Pattern")
- // Esprima deviation.
- ));
- def("ArrayPattern").field("elements", [or(def("Pattern"), def("SpreadElement"), null)]);
- def("ObjectPattern").field("properties", [or(
- def("Property"),
- def("PropertyPattern"),
- def("SpreadPropertyPattern"),
- def("SpreadProperty")
- // Used by Esprima.
- )]);
- def("ExportSpecifier").bases("ModuleSpecifier").build("id", "name");
- def("ExportBatchSpecifier").bases("Specifier").build();
- def("ExportDeclaration").bases("Declaration").build("default", "declaration", "specifiers", "source").field("default", Boolean).field("declaration", or(
- def("Declaration"),
- def("Expression"),
- // Implies default.
- null
- )).field("specifiers", [or(def("ExportSpecifier"), def("ExportBatchSpecifier"))], defaults.emptyArray).field("source", or(def("Literal"), null), defaults["null"]);
- def("Block").bases("Comment").build(
- "value",
- /*optional:*/
- "leading",
- "trailing"
- );
- def("Line").bases("Comment").build(
- "value",
- /*optional:*/
- "leading",
- "trailing"
- );
- }
- exports.default = default_1;
- module2.exports = exports["default"];
- }
-});
-
-// .yarn/cache/ast-types-npm-0.13.4-69f7e68df8-3a1a409764.zip/node_modules/ast-types/def/babel-core.js
-var require_babel_core = __commonJS({
- ".yarn/cache/ast-types-npm-0.13.4-69f7e68df8-3a1a409764.zip/node_modules/ast-types/def/babel-core.js"(exports, module2) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var tslib_1 = (init_tslib_es6(), __toCommonJS(tslib_es6_exports));
- var types_1 = tslib_1.__importDefault(require_types());
- var shared_1 = tslib_1.__importDefault(require_shared());
- var es7_1 = tslib_1.__importDefault(require_es7());
- function default_1(fork) {
- fork.use(es7_1.default);
- var types = fork.use(types_1.default);
- var defaults = fork.use(shared_1.default).defaults;
- var def = types.Type.def;
- var or = types.Type.or;
- def("Noop").bases("Statement").build();
- def("DoExpression").bases("Expression").build("body").field("body", [def("Statement")]);
- def("Super").bases("Expression").build();
- def("BindExpression").bases("Expression").build("object", "callee").field("object", or(def("Expression"), null)).field("callee", def("Expression"));
- def("Decorator").bases("Node").build("expression").field("expression", def("Expression"));
- def("Property").field("decorators", or([def("Decorator")], null), defaults["null"]);
- def("MethodDefinition").field("decorators", or([def("Decorator")], null), defaults["null"]);
- def("MetaProperty").bases("Expression").build("meta", "property").field("meta", def("Identifier")).field("property", def("Identifier"));
- def("ParenthesizedExpression").bases("Expression").build("expression").field("expression", def("Expression"));
- def("ImportSpecifier").bases("ModuleSpecifier").build("imported", "local").field("imported", def("Identifier"));
- def("ImportDefaultSpecifier").bases("ModuleSpecifier").build("local");
- def("ImportNamespaceSpecifier").bases("ModuleSpecifier").build("local");
- def("ExportDefaultDeclaration").bases("Declaration").build("declaration").field("declaration", or(def("Declaration"), def("Expression")));
- def("ExportNamedDeclaration").bases("Declaration").build("declaration", "specifiers", "source").field("declaration", or(def("Declaration"), null)).field("specifiers", [def("ExportSpecifier")], defaults.emptyArray).field("source", or(def("Literal"), null), defaults["null"]);
- def("ExportSpecifier").bases("ModuleSpecifier").build("local", "exported").field("exported", def("Identifier"));
- def("ExportNamespaceSpecifier").bases("Specifier").build("exported").field("exported", def("Identifier"));
- def("ExportDefaultSpecifier").bases("Specifier").build("exported").field("exported", def("Identifier"));
- def("ExportAllDeclaration").bases("Declaration").build("exported", "source").field("exported", or(def("Identifier"), null)).field("source", def("Literal"));
- def("CommentBlock").bases("Comment").build(
- "value",
- /*optional:*/
- "leading",
- "trailing"
- );
- def("CommentLine").bases("Comment").build(
- "value",
- /*optional:*/
- "leading",
- "trailing"
- );
- def("Directive").bases("Node").build("value").field("value", def("DirectiveLiteral"));
- def("DirectiveLiteral").bases("Node", "Expression").build("value").field("value", String, defaults["use strict"]);
- def("InterpreterDirective").bases("Node").build("value").field("value", String);
- def("BlockStatement").bases("Statement").build("body").field("body", [def("Statement")]).field("directives", [def("Directive")], defaults.emptyArray);
- def("Program").bases("Node").build("body").field("body", [def("Statement")]).field("directives", [def("Directive")], defaults.emptyArray).field("interpreter", or(def("InterpreterDirective"), null), defaults["null"]);
- def("StringLiteral").bases("Literal").build("value").field("value", String);
- def("NumericLiteral").bases("Literal").build("value").field("value", Number).field("raw", or(String, null), defaults["null"]).field("extra", {
- rawValue: Number,
- raw: String
- }, function getDefault() {
- return {
- rawValue: this.value,
- raw: this.value + ""
- };
- });
- def("BigIntLiteral").bases("Literal").build("value").field("value", or(String, Number)).field("extra", {
- rawValue: String,
- raw: String
- }, function getDefault() {
- return {
- rawValue: String(this.value),
- raw: this.value + "n"
- };
- });
- def("NullLiteral").bases("Literal").build().field("value", null, defaults["null"]);
- def("BooleanLiteral").bases("Literal").build("value").field("value", Boolean);
- def("RegExpLiteral").bases("Literal").build("pattern", "flags").field("pattern", String).field("flags", String).field("value", RegExp, function() {
- return new RegExp(this.pattern, this.flags);
- });
- var ObjectExpressionProperty = or(def("Property"), def("ObjectMethod"), def("ObjectProperty"), def("SpreadProperty"), def("SpreadElement"));
- def("ObjectExpression").bases("Expression").build("properties").field("properties", [ObjectExpressionProperty]);
- def("ObjectMethod").bases("Node", "Function").build("kind", "key", "params", "body", "computed").field("kind", or("method", "get", "set")).field("key", or(def("Literal"), def("Identifier"), def("Expression"))).field("params", [def("Pattern")]).field("body", def("BlockStatement")).field("computed", Boolean, defaults["false"]).field("generator", Boolean, defaults["false"]).field("async", Boolean, defaults["false"]).field(
- "accessibility",
- // TypeScript
- or(def("Literal"), null),
- defaults["null"]
- ).field("decorators", or([def("Decorator")], null), defaults["null"]);
- def("ObjectProperty").bases("Node").build("key", "value").field("key", or(def("Literal"), def("Identifier"), def("Expression"))).field("value", or(def("Expression"), def("Pattern"))).field(
- "accessibility",
- // TypeScript
- or(def("Literal"), null),
- defaults["null"]
- ).field("computed", Boolean, defaults["false"]);
- var ClassBodyElement = or(def("MethodDefinition"), def("VariableDeclarator"), def("ClassPropertyDefinition"), def("ClassProperty"), def("ClassPrivateProperty"), def("ClassMethod"), def("ClassPrivateMethod"));
- def("ClassBody").bases("Declaration").build("body").field("body", [ClassBodyElement]);
- def("ClassMethod").bases("Declaration", "Function").build("kind", "key", "params", "body", "computed", "static").field("key", or(def("Literal"), def("Identifier"), def("Expression")));
- def("ClassPrivateMethod").bases("Declaration", "Function").build("key", "params", "body", "kind", "computed", "static").field("key", def("PrivateName"));
- [
- "ClassMethod",
- "ClassPrivateMethod"
- ].forEach(function(typeName) {
- def(typeName).field("kind", or("get", "set", "method", "constructor"), function() {
- return "method";
- }).field("body", def("BlockStatement")).field("computed", Boolean, defaults["false"]).field("static", or(Boolean, null), defaults["null"]).field("abstract", or(Boolean, null), defaults["null"]).field("access", or("public", "private", "protected", null), defaults["null"]).field("accessibility", or("public", "private", "protected", null), defaults["null"]).field("decorators", or([def("Decorator")], null), defaults["null"]).field("optional", or(Boolean, null), defaults["null"]);
- });
- def("ClassPrivateProperty").bases("ClassProperty").build("key", "value").field("key", def("PrivateName")).field("value", or(def("Expression"), null), defaults["null"]);
- def("PrivateName").bases("Expression", "Pattern").build("id").field("id", def("Identifier"));
- var ObjectPatternProperty = or(
- def("Property"),
- def("PropertyPattern"),
- def("SpreadPropertyPattern"),
- def("SpreadProperty"),
- // Used by Esprima
- def("ObjectProperty"),
- // Babel 6
- def("RestProperty")
- // Babel 6
- );
- def("ObjectPattern").bases("Pattern").build("properties").field("properties", [ObjectPatternProperty]).field("decorators", or([def("Decorator")], null), defaults["null"]);
- def("SpreadProperty").bases("Node").build("argument").field("argument", def("Expression"));
- def("RestProperty").bases("Node").build("argument").field("argument", def("Expression"));
- def("ForAwaitStatement").bases("Statement").build("left", "right", "body").field("left", or(def("VariableDeclaration"), def("Expression"))).field("right", def("Expression")).field("body", def("Statement"));
- def("Import").bases("Expression").build();
- }
- exports.default = default_1;
- module2.exports = exports["default"];
- }
-});
-
-// .yarn/cache/ast-types-npm-0.13.4-69f7e68df8-3a1a409764.zip/node_modules/ast-types/def/babel.js
-var require_babel = __commonJS({
- ".yarn/cache/ast-types-npm-0.13.4-69f7e68df8-3a1a409764.zip/node_modules/ast-types/def/babel.js"(exports, module2) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var tslib_1 = (init_tslib_es6(), __toCommonJS(tslib_es6_exports));
- var babel_core_1 = tslib_1.__importDefault(require_babel_core());
- var flow_1 = tslib_1.__importDefault(require_flow());
- function default_1(fork) {
- fork.use(babel_core_1.default);
- fork.use(flow_1.default);
- }
- exports.default = default_1;
- module2.exports = exports["default"];
- }
-});
-
-// .yarn/cache/ast-types-npm-0.13.4-69f7e68df8-3a1a409764.zip/node_modules/ast-types/def/typescript.js
-var require_typescript = __commonJS({
- ".yarn/cache/ast-types-npm-0.13.4-69f7e68df8-3a1a409764.zip/node_modules/ast-types/def/typescript.js"(exports, module2) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var tslib_1 = (init_tslib_es6(), __toCommonJS(tslib_es6_exports));
- var babel_core_1 = tslib_1.__importDefault(require_babel_core());
- var type_annotations_1 = tslib_1.__importDefault(require_type_annotations());
- var types_1 = tslib_1.__importDefault(require_types());
- var shared_1 = tslib_1.__importDefault(require_shared());
- function default_1(fork) {
- fork.use(babel_core_1.default);
- fork.use(type_annotations_1.default);
- var types = fork.use(types_1.default);
- var n = types.namedTypes;
- var def = types.Type.def;
- var or = types.Type.or;
- var defaults = fork.use(shared_1.default).defaults;
- var StringLiteral = types.Type.from(function(value, deep) {
- if (n.StringLiteral && n.StringLiteral.check(value, deep)) {
- return true;
- }
- if (n.Literal && n.Literal.check(value, deep) && typeof value.value === "string") {
- return true;
- }
- return false;
- }, "StringLiteral");
- def("TSType").bases("Node");
- var TSEntityName = or(def("Identifier"), def("TSQualifiedName"));
- def("TSTypeReference").bases("TSType", "TSHasOptionalTypeParameterInstantiation").build("typeName", "typeParameters").field("typeName", TSEntityName);
- def("TSHasOptionalTypeParameterInstantiation").field("typeParameters", or(def("TSTypeParameterInstantiation"), null), defaults["null"]);
- def("TSHasOptionalTypeParameters").field("typeParameters", or(def("TSTypeParameterDeclaration"), null, void 0), defaults["null"]);
- def("TSHasOptionalTypeAnnotation").field("typeAnnotation", or(def("TSTypeAnnotation"), null), defaults["null"]);
- def("TSQualifiedName").bases("Node").build("left", "right").field("left", TSEntityName).field("right", TSEntityName);
- def("TSAsExpression").bases("Expression", "Pattern").build("expression", "typeAnnotation").field("expression", def("Expression")).field("typeAnnotation", def("TSType")).field("extra", or({ parenthesized: Boolean }, null), defaults["null"]);
- def("TSNonNullExpression").bases("Expression", "Pattern").build("expression").field("expression", def("Expression"));
- [
- "TSAnyKeyword",
- "TSBigIntKeyword",
- "TSBooleanKeyword",
- "TSNeverKeyword",
- "TSNullKeyword",
- "TSNumberKeyword",
- "TSObjectKeyword",
- "TSStringKeyword",
- "TSSymbolKeyword",
- "TSUndefinedKeyword",
- "TSUnknownKeyword",
- "TSVoidKeyword",
- "TSThisType"
- ].forEach(function(keywordType) {
- def(keywordType).bases("TSType").build();
- });
- def("TSArrayType").bases("TSType").build("elementType").field("elementType", def("TSType"));
- def("TSLiteralType").bases("TSType").build("literal").field("literal", or(def("NumericLiteral"), def("StringLiteral"), def("BooleanLiteral"), def("TemplateLiteral"), def("UnaryExpression")));
- [
- "TSUnionType",
- "TSIntersectionType"
- ].forEach(function(typeName) {
- def(typeName).bases("TSType").build("types").field("types", [def("TSType")]);
- });
- def("TSConditionalType").bases("TSType").build("checkType", "extendsType", "trueType", "falseType").field("checkType", def("TSType")).field("extendsType", def("TSType")).field("trueType", def("TSType")).field("falseType", def("TSType"));
- def("TSInferType").bases("TSType").build("typeParameter").field("typeParameter", def("TSTypeParameter"));
- def("TSParenthesizedType").bases("TSType").build("typeAnnotation").field("typeAnnotation", def("TSType"));
- var ParametersType = [or(def("Identifier"), def("RestElement"), def("ArrayPattern"), def("ObjectPattern"))];
- [
- "TSFunctionType",
- "TSConstructorType"
- ].forEach(function(typeName) {
- def(typeName).bases("TSType", "TSHasOptionalTypeParameters", "TSHasOptionalTypeAnnotation").build("parameters").field("parameters", ParametersType);
- });
- def("TSDeclareFunction").bases("Declaration", "TSHasOptionalTypeParameters").build("id", "params", "returnType").field("declare", Boolean, defaults["false"]).field("async", Boolean, defaults["false"]).field("generator", Boolean, defaults["false"]).field("id", or(def("Identifier"), null), defaults["null"]).field("params", [def("Pattern")]).field("returnType", or(
- def("TSTypeAnnotation"),
- def("Noop"),
- // Still used?
- null
- ), defaults["null"]);
- def("TSDeclareMethod").bases("Declaration", "TSHasOptionalTypeParameters").build("key", "params", "returnType").field("async", Boolean, defaults["false"]).field("generator", Boolean, defaults["false"]).field("params", [def("Pattern")]).field("abstract", Boolean, defaults["false"]).field("accessibility", or("public", "private", "protected", void 0), defaults["undefined"]).field("static", Boolean, defaults["false"]).field("computed", Boolean, defaults["false"]).field("optional", Boolean, defaults["false"]).field("key", or(
- def("Identifier"),
- def("StringLiteral"),
- def("NumericLiteral"),
- // Only allowed if .computed is true.
- def("Expression")
- )).field("kind", or("get", "set", "method", "constructor"), function getDefault() {
- return "method";
- }).field(
- "access",
- // Not "accessibility"?
- or("public", "private", "protected", void 0),
- defaults["undefined"]
- ).field("decorators", or([def("Decorator")], null), defaults["null"]).field("returnType", or(
- def("TSTypeAnnotation"),
- def("Noop"),
- // Still used?
- null
- ), defaults["null"]);
- def("TSMappedType").bases("TSType").build("typeParameter", "typeAnnotation").field("readonly", or(Boolean, "+", "-"), defaults["false"]).field("typeParameter", def("TSTypeParameter")).field("optional", or(Boolean, "+", "-"), defaults["false"]).field("typeAnnotation", or(def("TSType"), null), defaults["null"]);
- def("TSTupleType").bases("TSType").build("elementTypes").field("elementTypes", [or(def("TSType"), def("TSNamedTupleMember"))]);
- def("TSNamedTupleMember").bases("TSType").build("label", "elementType", "optional").field("label", def("Identifier")).field("optional", Boolean, defaults["false"]).field("elementType", def("TSType"));
- def("TSRestType").bases("TSType").build("typeAnnotation").field("typeAnnotation", def("TSType"));
- def("TSOptionalType").bases("TSType").build("typeAnnotation").field("typeAnnotation", def("TSType"));
- def("TSIndexedAccessType").bases("TSType").build("objectType", "indexType").field("objectType", def("TSType")).field("indexType", def("TSType"));
- def("TSTypeOperator").bases("TSType").build("operator").field("operator", String).field("typeAnnotation", def("TSType"));
- def("TSTypeAnnotation").bases("Node").build("typeAnnotation").field("typeAnnotation", or(def("TSType"), def("TSTypeAnnotation")));
- def("TSIndexSignature").bases("Declaration", "TSHasOptionalTypeAnnotation").build("parameters", "typeAnnotation").field("parameters", [def("Identifier")]).field("readonly", Boolean, defaults["false"]);
- def("TSPropertySignature").bases("Declaration", "TSHasOptionalTypeAnnotation").build("key", "typeAnnotation", "optional").field("key", def("Expression")).field("computed", Boolean, defaults["false"]).field("readonly", Boolean, defaults["false"]).field("optional", Boolean, defaults["false"]).field("initializer", or(def("Expression"), null), defaults["null"]);
- def("TSMethodSignature").bases("Declaration", "TSHasOptionalTypeParameters", "TSHasOptionalTypeAnnotation").build("key", "parameters", "typeAnnotation").field("key", def("Expression")).field("computed", Boolean, defaults["false"]).field("optional", Boolean, defaults["false"]).field("parameters", ParametersType);
- def("TSTypePredicate").bases("TSTypeAnnotation", "TSType").build("parameterName", "typeAnnotation", "asserts").field("parameterName", or(def("Identifier"), def("TSThisType"))).field("typeAnnotation", or(def("TSTypeAnnotation"), null), defaults["null"]).field("asserts", Boolean, defaults["false"]);
- [
- "TSCallSignatureDeclaration",
- "TSConstructSignatureDeclaration"
- ].forEach(function(typeName) {
- def(typeName).bases("Declaration", "TSHasOptionalTypeParameters", "TSHasOptionalTypeAnnotation").build("parameters", "typeAnnotation").field("parameters", ParametersType);
- });
- def("TSEnumMember").bases("Node").build("id", "initializer").field("id", or(def("Identifier"), StringLiteral)).field("initializer", or(def("Expression"), null), defaults["null"]);
- def("TSTypeQuery").bases("TSType").build("exprName").field("exprName", or(TSEntityName, def("TSImportType")));
- var TSTypeMember = or(def("TSCallSignatureDeclaration"), def("TSConstructSignatureDeclaration"), def("TSIndexSignature"), def("TSMethodSignature"), def("TSPropertySignature"));
- def("TSTypeLiteral").bases("TSType").build("members").field("members", [TSTypeMember]);
- def("TSTypeParameter").bases("Identifier").build("name", "constraint", "default").field("name", String).field("constraint", or(def("TSType"), void 0), defaults["undefined"]).field("default", or(def("TSType"), void 0), defaults["undefined"]);
- def("TSTypeAssertion").bases("Expression", "Pattern").build("typeAnnotation", "expression").field("typeAnnotation", def("TSType")).field("expression", def("Expression")).field("extra", or({ parenthesized: Boolean }, null), defaults["null"]);
- def("TSTypeParameterDeclaration").bases("Declaration").build("params").field("params", [def("TSTypeParameter")]);
- def("TSTypeParameterInstantiation").bases("Node").build("params").field("params", [def("TSType")]);
- def("TSEnumDeclaration").bases("Declaration").build("id", "members").field("id", def("Identifier")).field("const", Boolean, defaults["false"]).field("declare", Boolean, defaults["false"]).field("members", [def("TSEnumMember")]).field("initializer", or(def("Expression"), null), defaults["null"]);
- def("TSTypeAliasDeclaration").bases("Declaration", "TSHasOptionalTypeParameters").build("id", "typeAnnotation").field("id", def("Identifier")).field("declare", Boolean, defaults["false"]).field("typeAnnotation", def("TSType"));
- def("TSModuleBlock").bases("Node").build("body").field("body", [def("Statement")]);
- def("TSModuleDeclaration").bases("Declaration").build("id", "body").field("id", or(StringLiteral, TSEntityName)).field("declare", Boolean, defaults["false"]).field("global", Boolean, defaults["false"]).field("body", or(def("TSModuleBlock"), def("TSModuleDeclaration"), null), defaults["null"]);
- def("TSImportType").bases("TSType", "TSHasOptionalTypeParameterInstantiation").build("argument", "qualifier", "typeParameters").field("argument", StringLiteral).field("qualifier", or(TSEntityName, void 0), defaults["undefined"]);
- def("TSImportEqualsDeclaration").bases("Declaration").build("id", "moduleReference").field("id", def("Identifier")).field("isExport", Boolean, defaults["false"]).field("moduleReference", or(TSEntityName, def("TSExternalModuleReference")));
- def("TSExternalModuleReference").bases("Declaration").build("expression").field("expression", StringLiteral);
- def("TSExportAssignment").bases("Statement").build("expression").field("expression", def("Expression"));
- def("TSNamespaceExportDeclaration").bases("Declaration").build("id").field("id", def("Identifier"));
- def("TSInterfaceBody").bases("Node").build("body").field("body", [TSTypeMember]);
- def("TSExpressionWithTypeArguments").bases("TSType", "TSHasOptionalTypeParameterInstantiation").build("expression", "typeParameters").field("expression", TSEntityName);
- def("TSInterfaceDeclaration").bases("Declaration", "TSHasOptionalTypeParameters").build("id", "body").field("id", TSEntityName).field("declare", Boolean, defaults["false"]).field("extends", or([def("TSExpressionWithTypeArguments")], null), defaults["null"]).field("body", def("TSInterfaceBody"));
- def("TSParameterProperty").bases("Pattern").build("parameter").field("accessibility", or("public", "private", "protected", void 0), defaults["undefined"]).field("readonly", Boolean, defaults["false"]).field("parameter", or(def("Identifier"), def("AssignmentPattern")));
- def("ClassProperty").field(
- "access",
- // Not "accessibility"?
- or("public", "private", "protected", void 0),
- defaults["undefined"]
- );
- def("ClassBody").field("body", [or(
- def("MethodDefinition"),
- def("VariableDeclarator"),
- def("ClassPropertyDefinition"),
- def("ClassProperty"),
- def("ClassPrivateProperty"),
- def("ClassMethod"),
- def("ClassPrivateMethod"),
- // Just need to add these types:
- def("TSDeclareMethod"),
- TSTypeMember
- )]);
- }
- exports.default = default_1;
- module2.exports = exports["default"];
- }
-});
-
-// .yarn/cache/ast-types-npm-0.13.4-69f7e68df8-3a1a409764.zip/node_modules/ast-types/def/es-proposals.js
-var require_es_proposals = __commonJS({
- ".yarn/cache/ast-types-npm-0.13.4-69f7e68df8-3a1a409764.zip/node_modules/ast-types/def/es-proposals.js"(exports, module2) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var tslib_1 = (init_tslib_es6(), __toCommonJS(tslib_es6_exports));
- var types_1 = tslib_1.__importDefault(require_types());
- var shared_1 = tslib_1.__importDefault(require_shared());
- var core_1 = tslib_1.__importDefault(require_core());
- function default_1(fork) {
- fork.use(core_1.default);
- var types = fork.use(types_1.default);
- var Type = types.Type;
- var def = types.Type.def;
- var or = Type.or;
- var shared = fork.use(shared_1.default);
- var defaults = shared.defaults;
- def("OptionalMemberExpression").bases("MemberExpression").build("object", "property", "computed", "optional").field("optional", Boolean, defaults["true"]);
- def("OptionalCallExpression").bases("CallExpression").build("callee", "arguments", "optional").field("optional", Boolean, defaults["true"]);
- var LogicalOperator = or("||", "&&", "??");
- def("LogicalExpression").field("operator", LogicalOperator);
- }
- exports.default = default_1;
- module2.exports = exports["default"];
- }
-});
-
-// .yarn/cache/ast-types-npm-0.13.4-69f7e68df8-3a1a409764.zip/node_modules/ast-types/gen/namedTypes.js
-var require_namedTypes = __commonJS({
- ".yarn/cache/ast-types-npm-0.13.4-69f7e68df8-3a1a409764.zip/node_modules/ast-types/gen/namedTypes.js"(exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.namedTypes = void 0;
- var namedTypes;
- /* @__PURE__ */ (function(namedTypes2) {
- })(namedTypes = exports.namedTypes || (exports.namedTypes = {}));
- }
-});
-
-// .yarn/cache/ast-types-npm-0.13.4-69f7e68df8-3a1a409764.zip/node_modules/ast-types/main.js
-var require_main = __commonJS({
- ".yarn/cache/ast-types-npm-0.13.4-69f7e68df8-3a1a409764.zip/node_modules/ast-types/main.js"(exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.visit = exports.use = exports.Type = exports.someField = exports.PathVisitor = exports.Path = exports.NodePath = exports.namedTypes = exports.getSupertypeNames = exports.getFieldValue = exports.getFieldNames = exports.getBuilderName = exports.finalize = exports.eachField = exports.defineMethod = exports.builtInTypes = exports.builders = exports.astNodesAreEquivalent = void 0;
- var tslib_1 = (init_tslib_es6(), __toCommonJS(tslib_es6_exports));
- var fork_1 = tslib_1.__importDefault(require_fork());
- var core_1 = tslib_1.__importDefault(require_core());
- var es6_1 = tslib_1.__importDefault(require_es6());
- var es7_1 = tslib_1.__importDefault(require_es7());
- var es2020_1 = tslib_1.__importDefault(require_es2020());
- var jsx_1 = tslib_1.__importDefault(require_jsx());
- var flow_1 = tslib_1.__importDefault(require_flow());
- var esprima_1 = tslib_1.__importDefault(require_esprima2());
- var babel_1 = tslib_1.__importDefault(require_babel());
- var typescript_1 = tslib_1.__importDefault(require_typescript());
- var es_proposals_1 = tslib_1.__importDefault(require_es_proposals());
- var namedTypes_1 = require_namedTypes();
- Object.defineProperty(exports, "namedTypes", { enumerable: true, get: function() {
- return namedTypes_1.namedTypes;
- } });
- var _a = fork_1.default([
- // This core module of AST types captures ES5 as it is parsed today by
- // git://github.com/ariya/esprima.git#master.
- core_1.default,
- // Feel free to add to or remove from this list of extension modules to
- // configure the precise type hierarchy that you need.
- es6_1.default,
- es7_1.default,
- es2020_1.default,
- jsx_1.default,
- flow_1.default,
- esprima_1.default,
- babel_1.default,
- typescript_1.default,
- es_proposals_1.default
- ]);
- var astNodesAreEquivalent = _a.astNodesAreEquivalent;
- var builders = _a.builders;
- var builtInTypes = _a.builtInTypes;
- var defineMethod = _a.defineMethod;
- var eachField = _a.eachField;
- var finalize = _a.finalize;
- var getBuilderName = _a.getBuilderName;
- var getFieldNames = _a.getFieldNames;
- var getFieldValue = _a.getFieldValue;
- var getSupertypeNames = _a.getSupertypeNames;
- var n = _a.namedTypes;
- var NodePath = _a.NodePath;
- var Path = _a.Path;
- var PathVisitor = _a.PathVisitor;
- var someField = _a.someField;
- var Type = _a.Type;
- var use = _a.use;
- var visit = _a.visit;
- exports.astNodesAreEquivalent = astNodesAreEquivalent;
- exports.builders = builders;
- exports.builtInTypes = builtInTypes;
- exports.defineMethod = defineMethod;
- exports.eachField = eachField;
- exports.finalize = finalize;
- exports.getBuilderName = getBuilderName;
- exports.getFieldNames = getFieldNames;
- exports.getFieldValue = getFieldValue;
- exports.getSupertypeNames = getSupertypeNames;
- exports.NodePath = NodePath;
- exports.Path = Path;
- exports.PathVisitor = PathVisitor;
- exports.someField = someField;
- exports.Type = Type;
- exports.use = use;
- exports.visit = visit;
- Object.assign(namedTypes_1.namedTypes, n);
- }
-});
-
-// .yarn/cache/degenerator-npm-5.0.1-97c678cdaf-e48d8a651e.zip/node_modules/degenerator/dist/degenerator.js
-var require_degenerator = __commonJS({
- ".yarn/cache/degenerator-npm-5.0.1-97c678cdaf-e48d8a651e.zip/node_modules/degenerator/dist/degenerator.js"(exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.degenerator = void 0;
- var util_1 = require("util");
- var escodegen_1 = require_escodegen();
- var esprima_1 = require_esprima();
- var ast_types_1 = require_main();
- function degenerator(code, _names) {
- if (!Array.isArray(_names)) {
- throw new TypeError('an array of async function "names" is required');
- }
- const names = _names.slice(0);
- const ast = (0, esprima_1.parseScript)(code);
- let lastNamesLength = 0;
- do {
- lastNamesLength = names.length;
- (0, ast_types_1.visit)(ast, {
- visitVariableDeclaration(path10) {
- if (path10.node.declarations) {
- for (let i = 0; i < path10.node.declarations.length; i++) {
- const declaration = path10.node.declarations[i];
- if (ast_types_1.namedTypes.VariableDeclarator.check(declaration) && ast_types_1.namedTypes.Identifier.check(declaration.init) && ast_types_1.namedTypes.Identifier.check(declaration.id) && checkName(declaration.init.name, names) && !checkName(declaration.id.name, names)) {
- names.push(declaration.id.name);
- }
- }
- }
- return false;
- },
- visitAssignmentExpression(path10) {
- if (ast_types_1.namedTypes.Identifier.check(path10.node.left) && ast_types_1.namedTypes.Identifier.check(path10.node.right) && checkName(path10.node.right.name, names) && !checkName(path10.node.left.name, names)) {
- names.push(path10.node.left.name);
- }
- return false;
- },
- visitFunction(path10) {
- if (path10.node.id) {
- let shouldDegenerate = false;
- (0, ast_types_1.visit)(path10.node, {
- visitCallExpression(path11) {
- if (checkNames(path11.node, names)) {
- shouldDegenerate = true;
- }
- return false;
- }
- });
- if (!shouldDegenerate) {
- return false;
- }
- path10.node.async = true;
- if (!checkName(path10.node.id.name, names)) {
- names.push(path10.node.id.name);
- }
- }
- this.traverse(path10);
- }
- });
- } while (lastNamesLength !== names.length);
- (0, ast_types_1.visit)(ast, {
- visitCallExpression(path10) {
- if (checkNames(path10.node, names)) {
- const delegate = false;
- const { name, parent: { node: pNode } } = path10;
- const expr = ast_types_1.builders.awaitExpression(path10.node, delegate);
- if (ast_types_1.namedTypes.CallExpression.check(pNode)) {
- pNode.arguments[name] = expr;
- } else {
- pNode[name] = expr;
- }
- }
- this.traverse(path10);
- }
- });
- return (0, escodegen_1.generate)(ast);
- }
- exports.degenerator = degenerator;
- function checkNames({ callee }, names) {
- let name;
- if (ast_types_1.namedTypes.Identifier.check(callee)) {
- name = callee.name;
- } else if (ast_types_1.namedTypes.MemberExpression.check(callee)) {
- if (ast_types_1.namedTypes.Identifier.check(callee.object) && ast_types_1.namedTypes.Identifier.check(callee.property)) {
- name = `${callee.object.name}.${callee.property.name}`;
- } else {
- return false;
- }
- } else if (ast_types_1.namedTypes.FunctionExpression.check(callee)) {
- if (callee.id) {
- name = callee.id.name;
- } else {
- return false;
- }
- } else {
- throw new Error(`Don't know how to get name for: ${callee.type}`);
- }
- return checkName(name, names);
- }
- function checkName(name, names) {
- for (let i = 0; i < names.length; i++) {
- const n = names[i];
- if (util_1.types.isRegExp(n)) {
- if (n.test(name)) {
- return true;
- }
- } else if (name === n) {
- return true;
- }
- }
- return false;
- }
- }
-});
-
-// .yarn/cache/degenerator-npm-5.0.1-97c678cdaf-e48d8a651e.zip/node_modules/degenerator/dist/compile.js
-var require_compile = __commonJS({
- ".yarn/cache/degenerator-npm-5.0.1-97c678cdaf-e48d8a651e.zip/node_modules/degenerator/dist/compile.js"(exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.compile = void 0;
- var util_1 = require("util");
- var degenerator_1 = require_degenerator();
- function compile(qjs, code, returnName, options = {}) {
- const compiled = (0, degenerator_1.degenerator)(code, options.names ?? []);
- const vm = qjs.newContext();
- if (options.sandbox) {
- for (const [name, value] of Object.entries(options.sandbox)) {
- if (typeof value !== "function") {
- throw new Error(`Expected a "function" for sandbox property \`${name}\`, but got "${typeof value}"`);
- }
- const fnHandle = vm.newFunction(name, (...args) => {
- const result = value(...args.map((arg) => quickJSHandleToHost(vm, arg)));
- vm.runtime.executePendingJobs();
- return hostToQuickJSHandle(vm, result);
- });
- fnHandle.consume((handle) => vm.setProp(vm.global, name, handle));
- }
- }
- const fnResult = vm.evalCode(`${compiled};${returnName}`, options.filename);
- const fn2 = vm.unwrapResult(fnResult);
- const t = vm.typeof(fn2);
- if (t !== "function") {
- throw new Error(`Expected a "function" named \`${returnName}\` to be defined, but got "${t}"`);
- }
- const r = async function(...args) {
- let promiseHandle;
- let resolvedHandle;
- try {
- const result = vm.callFunction(fn2, vm.undefined, ...args.map((arg) => hostToQuickJSHandle(vm, arg)));
- promiseHandle = vm.unwrapResult(result);
- const resolvedResultP = vm.resolvePromise(promiseHandle);
- vm.runtime.executePendingJobs();
- const resolvedResult = await resolvedResultP;
- resolvedHandle = vm.unwrapResult(resolvedResult);
- return quickJSHandleToHost(vm, resolvedHandle);
- } catch (err) {
- if (err && typeof err === "object" && "cause" in err && err.cause) {
- if (typeof err.cause === "object" && "stack" in err.cause && "name" in err.cause && "message" in err.cause && typeof err.cause.stack === "string" && typeof err.cause.name === "string" && typeof err.cause.message === "string") {
- err.cause.stack = `${err.cause.name}: ${err.cause.message}
-${err.cause.stack}`;
- }
- throw err.cause;
- }
- throw err;
- } finally {
- promiseHandle?.dispose();
- resolvedHandle?.dispose();
- }
- };
- Object.defineProperty(r, "toString", {
- value: () => compiled,
- enumerable: false
- });
- return r;
- }
- exports.compile = compile;
- function quickJSHandleToHost(vm, val) {
- return vm.dump(val);
- }
- function hostToQuickJSHandle(vm, val) {
- if (typeof val === "undefined") {
- return vm.undefined;
- } else if (val === null) {
- return vm.null;
- } else if (typeof val === "string") {
- return vm.newString(val);
- } else if (typeof val === "number") {
- return vm.newNumber(val);
- } else if (typeof val === "bigint") {
- return vm.newBigInt(val);
- } else if (typeof val === "boolean") {
- return val ? vm.true : vm.false;
- } else if (util_1.types.isPromise(val)) {
- const promise = vm.newPromise();
- promise.settled.then(vm.runtime.executePendingJobs);
- val.then((r) => {
- promise.resolve(hostToQuickJSHandle(vm, r));
- }, (err) => {
- promise.reject(hostToQuickJSHandle(vm, err));
- });
- return promise.handle;
- } else if (util_1.types.isNativeError(val)) {
- return vm.newError(val);
- }
- throw new Error(`Unsupported value: ${val}`);
- }
- }
-});
-
-// .yarn/cache/degenerator-npm-5.0.1-97c678cdaf-e48d8a651e.zip/node_modules/degenerator/dist/index.js
-var require_dist8 = __commonJS({
- ".yarn/cache/degenerator-npm-5.0.1-97c678cdaf-e48d8a651e.zip/node_modules/degenerator/dist/index.js"(exports) {
- "use strict";
- var __createBinding2 = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) {
- if (k2 === void 0)
- k2 = k;
- var desc = Object.getOwnPropertyDescriptor(m, k);
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
- desc = { enumerable: true, get: function() {
- return m[k];
- } };
- }
- Object.defineProperty(o, k2, desc);
- } : function(o, m, k, k2) {
- if (k2 === void 0)
- k2 = k;
- o[k2] = m[k];
- });
- var __exportStar2 = exports && exports.__exportStar || function(m, exports2) {
- for (var p in m)
- if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports2, p))
- __createBinding2(exports2, m, p);
- };
- Object.defineProperty(exports, "__esModule", { value: true });
- __exportStar2(require_degenerator(), exports);
- __exportStar2(require_compile(), exports);
- }
-});
-
-// .yarn/cache/pac-resolver-npm-7.0.0-904b294260-a5ac1bf1f3.zip/node_modules/pac-resolver/dist/dateRange.js
-var require_dateRange = __commonJS({
- ".yarn/cache/pac-resolver-npm-7.0.0-904b294260-a5ac1bf1f3.zip/node_modules/pac-resolver/dist/dateRange.js"(exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- function dateRange() {
- return false;
- }
- exports.default = dateRange;
- }
-});
-
-// .yarn/cache/pac-resolver-npm-7.0.0-904b294260-a5ac1bf1f3.zip/node_modules/pac-resolver/dist/dnsDomainIs.js
-var require_dnsDomainIs = __commonJS({
- ".yarn/cache/pac-resolver-npm-7.0.0-904b294260-a5ac1bf1f3.zip/node_modules/pac-resolver/dist/dnsDomainIs.js"(exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- function dnsDomainIs(host, domain) {
- host = String(host);
- domain = String(domain);
- return host.substr(domain.length * -1) === domain;
- }
- exports.default = dnsDomainIs;
- }
-});
-
-// .yarn/cache/pac-resolver-npm-7.0.0-904b294260-a5ac1bf1f3.zip/node_modules/pac-resolver/dist/dnsDomainLevels.js
-var require_dnsDomainLevels = __commonJS({
- ".yarn/cache/pac-resolver-npm-7.0.0-904b294260-a5ac1bf1f3.zip/node_modules/pac-resolver/dist/dnsDomainLevels.js"(exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- function dnsDomainLevels(host) {
- const match = String(host).match(/\./g);
- let levels = 0;
- if (match) {
- levels = match.length;
- }
- return levels;
- }
- exports.default = dnsDomainLevels;
- }
-});
-
-// .yarn/cache/pac-resolver-npm-7.0.0-904b294260-a5ac1bf1f3.zip/node_modules/pac-resolver/dist/util.js
-var require_util3 = __commonJS({
- ".yarn/cache/pac-resolver-npm-7.0.0-904b294260-a5ac1bf1f3.zip/node_modules/pac-resolver/dist/util.js"(exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.isGMT = exports.dnsLookup = void 0;
- var dns_1 = require("dns");
- function dnsLookup(host, opts) {
- return new Promise((resolve, reject) => {
- (0, dns_1.lookup)(host, opts, (err, res) => {
- if (err) {
- reject(err);
- } else {
- resolve(res);
- }
- });
- });
- }
- exports.dnsLookup = dnsLookup;
- function isGMT(v) {
- return v === "GMT";
- }
- exports.isGMT = isGMT;
- }
-});
-
-// .yarn/cache/pac-resolver-npm-7.0.0-904b294260-a5ac1bf1f3.zip/node_modules/pac-resolver/dist/dnsResolve.js
-var require_dnsResolve = __commonJS({
- ".yarn/cache/pac-resolver-npm-7.0.0-904b294260-a5ac1bf1f3.zip/node_modules/pac-resolver/dist/dnsResolve.js"(exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var util_1 = require_util3();
- async function dnsResolve(host) {
- const family = 4;
- try {
- const r = await (0, util_1.dnsLookup)(host, { family });
- if (typeof r === "string") {
- return r;
- }
- } catch (err) {
- }
- return null;
- }
- exports.default = dnsResolve;
- }
-});
-
-// .yarn/cache/netmask-npm-2.0.2-2299510a4d-cafd28388e.zip/node_modules/netmask/lib/netmask.js
-var require_netmask = __commonJS({
- ".yarn/cache/netmask-npm-2.0.2-2299510a4d-cafd28388e.zip/node_modules/netmask/lib/netmask.js"(exports) {
- (function() {
- var Netmask, atob2, chr, chr0, chrA, chra, ip2long, long2ip;
- long2ip = function(long) {
- var a, b, c, d;
- a = (long & 255 << 24) >>> 24;
- b = (long & 255 << 16) >>> 16;
- c = (long & 255 << 8) >>> 8;
- d = long & 255;
- return [a, b, c, d].join(".");
- };
- ip2long = function(ip) {
- var b, c, i, j, n, ref;
- b = [];
- for (i = j = 0; j <= 3; i = ++j) {
- if (ip.length === 0) {
- break;
- }
- if (i > 0) {
- if (ip[0] !== ".") {
- throw new Error("Invalid IP");
- }
- ip = ip.substring(1);
- }
- ref = atob2(ip), n = ref[0], c = ref[1];
- ip = ip.substring(c);
- b.push(n);
- }
- if (ip.length !== 0) {
- throw new Error("Invalid IP");
- }
- switch (b.length) {
- case 1:
- if (b[0] > 4294967295) {
- throw new Error("Invalid IP");
- }
- return b[0] >>> 0;
- case 2:
- if (b[0] > 255 || b[1] > 16777215) {
- throw new Error("Invalid IP");
- }
- return (b[0] << 24 | b[1]) >>> 0;
- case 3:
- if (b[0] > 255 || b[1] > 255 || b[2] > 65535) {
- throw new Error("Invalid IP");
- }
- return (b[0] << 24 | b[1] << 16 | b[2]) >>> 0;
- case 4:
- if (b[0] > 255 || b[1] > 255 || b[2] > 255 || b[3] > 255) {
- throw new Error("Invalid IP");
- }
- return (b[0] << 24 | b[1] << 16 | b[2] << 8 | b[3]) >>> 0;
- default:
- throw new Error("Invalid IP");
- }
- };
- chr = function(b) {
- return b.charCodeAt(0);
- };
- chr0 = chr("0");
- chra = chr("a");
- chrA = chr("A");
- atob2 = function(s) {
- var base, dmax, i, n, start;
- n = 0;
- base = 10;
- dmax = "9";
- i = 0;
- if (s.length > 1 && s[i] === "0") {
- if (s[i + 1] === "x" || s[i + 1] === "X") {
- i += 2;
- base = 16;
- } else if ("0" <= s[i + 1] && s[i + 1] <= "9") {
- i++;
- base = 8;
- dmax = "7";
- }
- }
- start = i;
- while (i < s.length) {
- if ("0" <= s[i] && s[i] <= dmax) {
- n = n * base + (chr(s[i]) - chr0) >>> 0;
- } else if (base === 16) {
- if ("a" <= s[i] && s[i] <= "f") {
- n = n * base + (10 + chr(s[i]) - chra) >>> 0;
- } else if ("A" <= s[i] && s[i] <= "F") {
- n = n * base + (10 + chr(s[i]) - chrA) >>> 0;
- } else {
- break;
- }
- } else {
- break;
- }
- if (n > 4294967295) {
- throw new Error("too large");
- }
- i++;
- }
- if (i === start) {
- throw new Error("empty octet");
- }
- return [n, i];
- };
- Netmask = function() {
- function Netmask2(net, mask) {
- var error, i, j, ref;
- if (typeof net !== "string") {
- throw new Error("Missing `net' parameter");
- }
- if (!mask) {
- ref = net.split("/", 2), net = ref[0], mask = ref[1];
- }
- if (!mask) {
- mask = 32;
- }
- if (typeof mask === "string" && mask.indexOf(".") > -1) {
- try {
- this.maskLong = ip2long(mask);
- } catch (error1) {
- error = error1;
- throw new Error("Invalid mask: " + mask);
- }
- for (i = j = 32; j >= 0; i = --j) {
- if (this.maskLong === 4294967295 << 32 - i >>> 0) {
- this.bitmask = i;
- break;
- }
- }
- } else if (mask || mask === 0) {
- this.bitmask = parseInt(mask, 10);
- this.maskLong = 0;
- if (this.bitmask > 0) {
- this.maskLong = 4294967295 << 32 - this.bitmask >>> 0;
- }
- } else {
- throw new Error("Invalid mask: empty");
- }
- try {
- this.netLong = (ip2long(net) & this.maskLong) >>> 0;
- } catch (error1) {
- error = error1;
- throw new Error("Invalid net address: " + net);
- }
- if (!(this.bitmask <= 32)) {
- throw new Error("Invalid mask for ip4: " + mask);
- }
- this.size = Math.pow(2, 32 - this.bitmask);
- this.base = long2ip(this.netLong);
- this.mask = long2ip(this.maskLong);
- this.hostmask = long2ip(~this.maskLong);
- this.first = this.bitmask <= 30 ? long2ip(this.netLong + 1) : this.base;
- this.last = this.bitmask <= 30 ? long2ip(this.netLong + this.size - 2) : long2ip(this.netLong + this.size - 1);
- this.broadcast = this.bitmask <= 30 ? long2ip(this.netLong + this.size - 1) : void 0;
- }
- Netmask2.prototype.contains = function(ip) {
- if (typeof ip === "string" && (ip.indexOf("/") > 0 || ip.split(".").length !== 4)) {
- ip = new Netmask2(ip);
- }
- if (ip instanceof Netmask2) {
- return this.contains(ip.base) && this.contains(ip.broadcast || ip.last);
- } else {
- return (ip2long(ip) & this.maskLong) >>> 0 === (this.netLong & this.maskLong) >>> 0;
- }
- };
- Netmask2.prototype.next = function(count) {
- if (count == null) {
- count = 1;
- }
- return new Netmask2(long2ip(this.netLong + this.size * count), this.mask);
- };
- Netmask2.prototype.forEach = function(fn2) {
- var index, lastLong, long;
- long = ip2long(this.first);
- lastLong = ip2long(this.last);
- index = 0;
- while (long <= lastLong) {
- fn2(long2ip(long), long, index);
- index++;
- long++;
- }
- };
- Netmask2.prototype.toString = function() {
- return this.base + "/" + this.bitmask;
- };
- return Netmask2;
- }();
- exports.ip2long = ip2long;
- exports.long2ip = long2ip;
- exports.Netmask = Netmask;
- }).call(exports);
- }
-});
-
-// .yarn/cache/pac-resolver-npm-7.0.0-904b294260-a5ac1bf1f3.zip/node_modules/pac-resolver/dist/isInNet.js
-var require_isInNet = __commonJS({
- ".yarn/cache/pac-resolver-npm-7.0.0-904b294260-a5ac1bf1f3.zip/node_modules/pac-resolver/dist/isInNet.js"(exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var netmask_1 = require_netmask();
- var util_1 = require_util3();
- async function isInNet(host, pattern, mask) {
- const family = 4;
- try {
- const ip = await (0, util_1.dnsLookup)(host, { family });
- if (typeof ip === "string") {
- const netmask = new netmask_1.Netmask(pattern, mask);
- return netmask.contains(ip);
- }
- } catch (err) {
- }
- return false;
- }
- exports.default = isInNet;
- }
-});
-
-// .yarn/cache/pac-resolver-npm-7.0.0-904b294260-a5ac1bf1f3.zip/node_modules/pac-resolver/dist/isPlainHostName.js
-var require_isPlainHostName = __commonJS({
- ".yarn/cache/pac-resolver-npm-7.0.0-904b294260-a5ac1bf1f3.zip/node_modules/pac-resolver/dist/isPlainHostName.js"(exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- function isPlainHostName(host) {
- return !/\./.test(host);
- }
- exports.default = isPlainHostName;
- }
-});
-
-// .yarn/cache/pac-resolver-npm-7.0.0-904b294260-a5ac1bf1f3.zip/node_modules/pac-resolver/dist/isResolvable.js
-var require_isResolvable = __commonJS({
- ".yarn/cache/pac-resolver-npm-7.0.0-904b294260-a5ac1bf1f3.zip/node_modules/pac-resolver/dist/isResolvable.js"(exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var util_1 = require_util3();
- async function isResolvable(host) {
- const family = 4;
- try {
- if (await (0, util_1.dnsLookup)(host, { family })) {
- return true;
- }
- } catch (err) {
- }
- return false;
- }
- exports.default = isResolvable;
- }
-});
-
-// .yarn/cache/pac-resolver-npm-7.0.0-904b294260-a5ac1bf1f3.zip/node_modules/pac-resolver/dist/localHostOrDomainIs.js
-var require_localHostOrDomainIs = __commonJS({
- ".yarn/cache/pac-resolver-npm-7.0.0-904b294260-a5ac1bf1f3.zip/node_modules/pac-resolver/dist/localHostOrDomainIs.js"(exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- function localHostOrDomainIs(host, hostdom) {
- const parts = host.split(".");
- const domparts = hostdom.split(".");
- let matches = true;
- for (let i = 0; i < parts.length; i++) {
- if (parts[i] !== domparts[i]) {
- matches = false;
- break;
- }
- }
- return matches;
- }
- exports.default = localHostOrDomainIs;
- }
-});
-
-// .yarn/cache/ip-npm-1.1.8-abea558b72-ab32a5ecfa.zip/node_modules/ip/lib/ip.js
-var require_ip2 = __commonJS({
- ".yarn/cache/ip-npm-1.1.8-abea558b72-ab32a5ecfa.zip/node_modules/ip/lib/ip.js"(exports) {
- var ip = exports;
- var { Buffer: Buffer2 } = require("buffer");
- var os3 = require("os");
- ip.toBuffer = function(ip2, buff, offset) {
- offset = ~~offset;
- var result;
- if (this.isV4Format(ip2)) {
- result = buff || new Buffer2(offset + 4);
- ip2.split(/\./g).map((byte) => {
- result[offset++] = parseInt(byte, 10) & 255;
- });
- } else if (this.isV6Format(ip2)) {
- var sections = ip2.split(":", 8);
- var i;
- for (i = 0; i < sections.length; i++) {
- var isv4 = this.isV4Format(sections[i]);
- var v4Buffer;
- if (isv4) {
- v4Buffer = this.toBuffer(sections[i]);
- sections[i] = v4Buffer.slice(0, 2).toString("hex");
- }
- if (v4Buffer && ++i < 8) {
- sections.splice(i, 0, v4Buffer.slice(2, 4).toString("hex"));
- }
- }
- if (sections[0] === "") {
- while (sections.length < 8)
- sections.unshift("0");
- } else if (sections[sections.length - 1] === "") {
- while (sections.length < 8)
- sections.push("0");
- } else if (sections.length < 8) {
- for (i = 0; i < sections.length && sections[i] !== ""; i++)
- ;
- var argv = [i, 1];
- for (i = 9 - sections.length; i > 0; i--) {
- argv.push("0");
- }
- sections.splice.apply(sections, argv);
- }
- result = buff || new Buffer2(offset + 16);
- for (i = 0; i < sections.length; i++) {
- var word = parseInt(sections[i], 16);
- result[offset++] = word >> 8 & 255;
- result[offset++] = word & 255;
- }
- }
- if (!result) {
- throw Error(`Invalid ip address: ${ip2}`);
- }
- return result;
- };
- ip.toString = function(buff, offset, length) {
- offset = ~~offset;
- length = length || buff.length - offset;
- var result = [];
- var i;
- if (length === 4) {
- for (i = 0; i < length; i++) {
- result.push(buff[offset + i]);
- }
- result = result.join(".");
- } else if (length === 16) {
- for (i = 0; i < length; i += 2) {
- result.push(buff.readUInt16BE(offset + i).toString(16));
- }
- result = result.join(":");
- result = result.replace(/(^|:)0(:0)*:0(:|$)/, "$1::$3");
- result = result.replace(/:{3,4}/, "::");
- }
- return result;
- };
- var ipv4Regex = /^(\d{1,3}\.){3,3}\d{1,3}$/;
- var ipv6Regex = /^(::)?(((\d{1,3}\.){3}(\d{1,3}){1})?([0-9a-f]){0,4}:{0,2}){1,8}(::)?$/i;
- ip.isV4Format = function(ip2) {
- return ipv4Regex.test(ip2);
- };
- ip.isV6Format = function(ip2) {
- return ipv6Regex.test(ip2);
- };
- function _normalizeFamily(family) {
- if (family === 4) {
- return "ipv4";
- }
- if (family === 6) {
- return "ipv6";
- }
- return family ? family.toLowerCase() : "ipv4";
- }
- ip.fromPrefixLen = function(prefixlen, family) {
- if (prefixlen > 32) {
- family = "ipv6";
- } else {
- family = _normalizeFamily(family);
- }
- var len = 4;
- if (family === "ipv6") {
- len = 16;
- }
- var buff = new Buffer2(len);
- for (var i = 0, n = buff.length; i < n; ++i) {
- var bits = 8;
- if (prefixlen < 8) {
- bits = prefixlen;
- }
- prefixlen -= bits;
- buff[i] = ~(255 >> bits) & 255;
- }
- return ip.toString(buff);
- };
- ip.mask = function(addr, mask) {
- addr = ip.toBuffer(addr);
- mask = ip.toBuffer(mask);
- var result = new Buffer2(Math.max(addr.length, mask.length));
- var i;
- if (addr.length === mask.length) {
- for (i = 0; i < addr.length; i++) {
- result[i] = addr[i] & mask[i];
- }
- } else if (mask.length === 4) {
- for (i = 0; i < mask.length; i++) {
- result[i] = addr[addr.length - 4 + i] & mask[i];
- }
- } else {
- for (i = 0; i < result.length - 6; i++) {
- result[i] = 0;
- }
- result[10] = 255;
- result[11] = 255;
- for (i = 0; i < addr.length; i++) {
- result[i + 12] = addr[i] & mask[i + 12];
- }
- i += 12;
- }
- for (; i < result.length; i++) {
- result[i] = 0;
- }
- return ip.toString(result);
- };
- ip.cidr = function(cidrString) {
- var cidrParts = cidrString.split("/");
- var addr = cidrParts[0];
- if (cidrParts.length !== 2) {
- throw new Error(`invalid CIDR subnet: ${addr}`);
- }
- var mask = ip.fromPrefixLen(parseInt(cidrParts[1], 10));
- return ip.mask(addr, mask);
- };
- ip.subnet = function(addr, mask) {
- var networkAddress = ip.toLong(ip.mask(addr, mask));
- var maskBuffer = ip.toBuffer(mask);
- var maskLength = 0;
- for (var i = 0; i < maskBuffer.length; i++) {
- if (maskBuffer[i] === 255) {
- maskLength += 8;
- } else {
- var octet = maskBuffer[i] & 255;
- while (octet) {
- octet = octet << 1 & 255;
- maskLength++;
- }
- }
- }
- var numberOfAddresses = Math.pow(2, 32 - maskLength);
- return {
- networkAddress: ip.fromLong(networkAddress),
- firstAddress: numberOfAddresses <= 2 ? ip.fromLong(networkAddress) : ip.fromLong(networkAddress + 1),
- lastAddress: numberOfAddresses <= 2 ? ip.fromLong(networkAddress + numberOfAddresses - 1) : ip.fromLong(networkAddress + numberOfAddresses - 2),
- broadcastAddress: ip.fromLong(networkAddress + numberOfAddresses - 1),
- subnetMask: mask,
- subnetMaskLength: maskLength,
- numHosts: numberOfAddresses <= 2 ? numberOfAddresses : numberOfAddresses - 2,
- length: numberOfAddresses,
- contains(other) {
- return networkAddress === ip.toLong(ip.mask(other, mask));
- }
- };
- };
- ip.cidrSubnet = function(cidrString) {
- var cidrParts = cidrString.split("/");
- var addr = cidrParts[0];
- if (cidrParts.length !== 2) {
- throw new Error(`invalid CIDR subnet: ${addr}`);
- }
- var mask = ip.fromPrefixLen(parseInt(cidrParts[1], 10));
- return ip.subnet(addr, mask);
- };
- ip.not = function(addr) {
- var buff = ip.toBuffer(addr);
- for (var i = 0; i < buff.length; i++) {
- buff[i] = 255 ^ buff[i];
- }
- return ip.toString(buff);
- };
- ip.or = function(a, b) {
- var i;
- a = ip.toBuffer(a);
- b = ip.toBuffer(b);
- if (a.length === b.length) {
- for (i = 0; i < a.length; ++i) {
- a[i] |= b[i];
- }
- return ip.toString(a);
- }
- var buff = a;
- var other = b;
- if (b.length > a.length) {
- buff = b;
- other = a;
- }
- var offset = buff.length - other.length;
- for (i = offset; i < buff.length; ++i) {
- buff[i] |= other[i - offset];
- }
- return ip.toString(buff);
- };
- ip.isEqual = function(a, b) {
- var i;
- a = ip.toBuffer(a);
- b = ip.toBuffer(b);
- if (a.length === b.length) {
- for (i = 0; i < a.length; i++) {
- if (a[i] !== b[i])
- return false;
- }
- return true;
- }
- if (b.length === 4) {
- var t = b;
- b = a;
- a = t;
- }
- for (i = 0; i < 10; i++) {
- if (b[i] !== 0)
- return false;
- }
- var word = b.readUInt16BE(10);
- if (word !== 0 && word !== 65535)
- return false;
- for (i = 0; i < 4; i++) {
- if (a[i] !== b[i + 12])
- return false;
- }
- return true;
- };
- ip.isPrivate = function(addr) {
- return /^(::f{4}:)?10\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/i.test(addr) || /^(::f{4}:)?192\.168\.([0-9]{1,3})\.([0-9]{1,3})$/i.test(addr) || /^(::f{4}:)?172\.(1[6-9]|2\d|30|31)\.([0-9]{1,3})\.([0-9]{1,3})$/i.test(addr) || /^(::f{4}:)?127\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/i.test(addr) || /^(::f{4}:)?169\.254\.([0-9]{1,3})\.([0-9]{1,3})$/i.test(addr) || /^f[cd][0-9a-f]{2}:/i.test(addr) || /^fe80:/i.test(addr) || /^::1$/.test(addr) || /^::$/.test(addr);
- };
- ip.isPublic = function(addr) {
- return !ip.isPrivate(addr);
- };
- ip.isLoopback = function(addr) {
- return /^(::f{4}:)?127\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})/.test(addr) || /^fe80::1$/.test(addr) || /^::1$/.test(addr) || /^::$/.test(addr);
- };
- ip.loopback = function(family) {
- family = _normalizeFamily(family);
- if (family !== "ipv4" && family !== "ipv6") {
- throw new Error("family must be ipv4 or ipv6");
- }
- return family === "ipv4" ? "127.0.0.1" : "fe80::1";
- };
- ip.address = function(name, family) {
- var interfaces = os3.networkInterfaces();
- family = _normalizeFamily(family);
- if (name && name !== "private" && name !== "public") {
- var res = interfaces[name].filter((details) => {
- var itemFamily = _normalizeFamily(details.family);
- return itemFamily === family;
- });
- if (res.length === 0) {
- return void 0;
- }
- return res[0].address;
- }
- var all = Object.keys(interfaces).map((nic) => {
- var addresses = interfaces[nic].filter((details) => {
- details.family = _normalizeFamily(details.family);
- if (details.family !== family || ip.isLoopback(details.address)) {
- return false;
- }
- if (!name) {
- return true;
- }
- return name === "public" ? ip.isPrivate(details.address) : ip.isPublic(details.address);
- });
- return addresses.length ? addresses[0].address : void 0;
- }).filter(Boolean);
- return !all.length ? ip.loopback(family) : all[0];
- };
- ip.toLong = function(ip2) {
- var ipl = 0;
- ip2.split(".").forEach((octet) => {
- ipl <<= 8;
- ipl += parseInt(octet);
- });
- return ipl >>> 0;
- };
- ip.fromLong = function(ipl) {
- return `${ipl >>> 24}.${ipl >> 16 & 255}.${ipl >> 8 & 255}.${ipl & 255}`;
- };
- }
-});
-
-// .yarn/cache/pac-resolver-npm-7.0.0-904b294260-a5ac1bf1f3.zip/node_modules/pac-resolver/dist/myIpAddress.js
-var require_myIpAddress = __commonJS({
- ".yarn/cache/pac-resolver-npm-7.0.0-904b294260-a5ac1bf1f3.zip/node_modules/pac-resolver/dist/myIpAddress.js"(exports) {
- "use strict";
- var __importDefault2 = exports && exports.__importDefault || function(mod) {
- return mod && mod.__esModule ? mod : { "default": mod };
- };
- Object.defineProperty(exports, "__esModule", { value: true });
- var ip_1 = __importDefault2(require_ip2());
- var net_1 = __importDefault2(require("net"));
- async function myIpAddress() {
- return new Promise((resolve, reject) => {
- const socket = net_1.default.connect({ host: "8.8.8.8", port: 53 });
- const onError = () => {
- resolve(ip_1.default.address());
- };
- socket.once("error", onError);
- socket.once("connect", () => {
- socket.removeListener("error", onError);
- const addr = socket.address();
- socket.destroy();
- if (typeof addr === "string") {
- resolve(addr);
- } else if (addr.address) {
- resolve(addr.address);
- } else {
- reject(new Error("Expected a `string`"));
- }
- });
- });
- }
- exports.default = myIpAddress;
- }
-});
-
-// .yarn/cache/pac-resolver-npm-7.0.0-904b294260-a5ac1bf1f3.zip/node_modules/pac-resolver/dist/shExpMatch.js
-var require_shExpMatch = __commonJS({
- ".yarn/cache/pac-resolver-npm-7.0.0-904b294260-a5ac1bf1f3.zip/node_modules/pac-resolver/dist/shExpMatch.js"(exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- function shExpMatch(str, shexp) {
- const re = toRegExp(shexp);
- return re.test(str);
- }
- exports.default = shExpMatch;
- function toRegExp(str) {
- str = String(str).replace(/\./g, "\\.").replace(/\?/g, ".").replace(/\*/g, ".*");
- return new RegExp(`^${str}$`);
- }
- }
-});
-
-// .yarn/cache/pac-resolver-npm-7.0.0-904b294260-a5ac1bf1f3.zip/node_modules/pac-resolver/dist/timeRange.js
-var require_timeRange = __commonJS({
- ".yarn/cache/pac-resolver-npm-7.0.0-904b294260-a5ac1bf1f3.zip/node_modules/pac-resolver/dist/timeRange.js"(exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- function timeRange() {
- const args = Array.prototype.slice.call(arguments);
- const lastArg = args.pop();
- const useGMTzone = lastArg === "GMT";
- const currentDate = /* @__PURE__ */ new Date();
- if (!useGMTzone) {
- args.push(lastArg);
- }
- let result = false;
- const noOfArgs = args.length;
- const numericArgs = args.map((n) => parseInt(n, 10));
- if (noOfArgs === 1) {
- result = getCurrentHour(useGMTzone, currentDate) === numericArgs[0];
- } else if (noOfArgs === 2) {
- const currentHour = getCurrentHour(useGMTzone, currentDate);
- result = numericArgs[0] <= currentHour && currentHour < numericArgs[1];
- } else if (noOfArgs === 4) {
- result = valueInRange(secondsElapsedToday(numericArgs[0], numericArgs[1], 0), secondsElapsedToday(getCurrentHour(useGMTzone, currentDate), getCurrentMinute(useGMTzone, currentDate), 0), secondsElapsedToday(numericArgs[2], numericArgs[3], 59));
- } else if (noOfArgs === 6) {
- result = valueInRange(secondsElapsedToday(numericArgs[0], numericArgs[1], numericArgs[2]), secondsElapsedToday(getCurrentHour(useGMTzone, currentDate), getCurrentMinute(useGMTzone, currentDate), getCurrentSecond(useGMTzone, currentDate)), secondsElapsedToday(numericArgs[3], numericArgs[4], numericArgs[5]));
- }
- return result;
- }
- exports.default = timeRange;
- function secondsElapsedToday(hh, mm, ss) {
- return hh * 3600 + mm * 60 + ss;
- }
- function getCurrentHour(gmt, currentDate) {
- return gmt ? currentDate.getUTCHours() : currentDate.getHours();
- }
- function getCurrentMinute(gmt, currentDate) {
- return gmt ? currentDate.getUTCMinutes() : currentDate.getMinutes();
- }
- function getCurrentSecond(gmt, currentDate) {
- return gmt ? currentDate.getUTCSeconds() : currentDate.getSeconds();
- }
- function valueInRange(start, value, finish) {
- return start <= value && value <= finish;
- }
- }
-});
-
-// .yarn/cache/pac-resolver-npm-7.0.0-904b294260-a5ac1bf1f3.zip/node_modules/pac-resolver/dist/weekdayRange.js
-var require_weekdayRange = __commonJS({
- ".yarn/cache/pac-resolver-npm-7.0.0-904b294260-a5ac1bf1f3.zip/node_modules/pac-resolver/dist/weekdayRange.js"(exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var util_1 = require_util3();
- var weekdays = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"];
- function weekdayRange(wd1, wd2, gmt) {
- let useGMTzone = false;
- let wd1Index = -1;
- let wd2Index = -1;
- let wd2IsGmt = false;
- if ((0, util_1.isGMT)(gmt)) {
- useGMTzone = true;
- } else if ((0, util_1.isGMT)(wd2)) {
- useGMTzone = true;
- wd2IsGmt = true;
- }
- wd1Index = weekdays.indexOf(wd1);
- if (!wd2IsGmt && isWeekday(wd2)) {
- wd2Index = weekdays.indexOf(wd2);
- }
- const todaysDay = getTodaysDay(useGMTzone);
- let result;
- if (wd2Index < 0) {
- result = todaysDay === wd1Index;
- } else if (wd1Index <= wd2Index) {
- result = valueInRange(wd1Index, todaysDay, wd2Index);
- } else {
- result = valueInRange(wd1Index, todaysDay, 6) || valueInRange(0, todaysDay, wd2Index);
- }
- return result;
- }
- exports.default = weekdayRange;
- function getTodaysDay(gmt) {
- return gmt ? (/* @__PURE__ */ new Date()).getUTCDay() : (/* @__PURE__ */ new Date()).getDay();
- }
- function valueInRange(start, value, finish) {
- return start <= value && value <= finish;
- }
- function isWeekday(v) {
- if (!v)
- return false;
- return weekdays.includes(v);
- }
- }
-});
-
-// .yarn/cache/pac-resolver-npm-7.0.0-904b294260-a5ac1bf1f3.zip/node_modules/pac-resolver/dist/index.js
-var require_dist9 = __commonJS({
- ".yarn/cache/pac-resolver-npm-7.0.0-904b294260-a5ac1bf1f3.zip/node_modules/pac-resolver/dist/index.js"(exports) {
- "use strict";
- var __importDefault2 = exports && exports.__importDefault || function(mod) {
- return mod && mod.__esModule ? mod : { "default": mod };
- };
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.sandbox = exports.createPacResolver = void 0;
- var degenerator_1 = require_dist8();
- var dateRange_1 = __importDefault2(require_dateRange());
- var dnsDomainIs_1 = __importDefault2(require_dnsDomainIs());
- var dnsDomainLevels_1 = __importDefault2(require_dnsDomainLevels());
- var dnsResolve_1 = __importDefault2(require_dnsResolve());
- var isInNet_1 = __importDefault2(require_isInNet());
- var isPlainHostName_1 = __importDefault2(require_isPlainHostName());
- var isResolvable_1 = __importDefault2(require_isResolvable());
- var localHostOrDomainIs_1 = __importDefault2(require_localHostOrDomainIs());
- var myIpAddress_1 = __importDefault2(require_myIpAddress());
- var shExpMatch_1 = __importDefault2(require_shExpMatch());
- var timeRange_1 = __importDefault2(require_timeRange());
- var weekdayRange_1 = __importDefault2(require_weekdayRange());
- function createPacResolver(qjs, _str, _opts = {}) {
- const str = Buffer.isBuffer(_str) ? _str.toString("utf8") : _str;
- const context = {
- ...exports.sandbox,
- ..._opts.sandbox
- };
- const names = Object.keys(context).filter((k) => isAsyncFunction(context[k]));
- const opts = {
- filename: "proxy.pac",
- names,
- ..._opts,
- sandbox: context
- };
- const resolver = (0, degenerator_1.compile)(qjs, str, "FindProxyForURL", opts);
- function FindProxyForURL(url, _host) {
- const urlObj = typeof url === "string" ? new URL(url) : url;
- const host = _host || urlObj.hostname;
- if (!host) {
- throw new TypeError("Could not determine `host`");
- }
- return resolver(urlObj.href, host);
- }
- Object.defineProperty(FindProxyForURL, "toString", {
- value: () => resolver.toString(),
- enumerable: false
- });
- return FindProxyForURL;
- }
- exports.createPacResolver = createPacResolver;
- exports.sandbox = Object.freeze({
- alert: (message = "") => console.log("%s", message),
- dateRange: dateRange_1.default,
- dnsDomainIs: dnsDomainIs_1.default,
- dnsDomainLevels: dnsDomainLevels_1.default,
- dnsResolve: dnsResolve_1.default,
- isInNet: isInNet_1.default,
- isPlainHostName: isPlainHostName_1.default,
- isResolvable: isResolvable_1.default,
- localHostOrDomainIs: localHostOrDomainIs_1.default,
- myIpAddress: myIpAddress_1.default,
- shExpMatch: shExpMatch_1.default,
- timeRange: timeRange_1.default,
- weekdayRange: weekdayRange_1.default
- });
- function isAsyncFunction(v) {
- if (typeof v !== "function")
- return false;
- if (v.constructor.name === "AsyncFunction")
- return true;
- if (String(v).indexOf("__awaiter(") !== -1)
- return true;
- return Boolean(v.async);
- }
- }
-});
-
-// .yarn/unplugged/@tootallnate-quickjs-emscripten-npm-0.23.0-a889ea7aeb/node_modules/@tootallnate/quickjs-emscripten/dist/esmHelpers.js
-var require_esmHelpers = __commonJS({
- ".yarn/unplugged/@tootallnate-quickjs-emscripten-npm-0.23.0-a889ea7aeb/node_modules/@tootallnate/quickjs-emscripten/dist/esmHelpers.js"(exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.unwrapJavascript = exports.unwrapTypescript = void 0;
- function fakeUnwrapDefault(mod) {
- return mod.default;
- }
- function actualUnwrapDefault(mod) {
- const maybeUnwrap = mod.default;
- return maybeUnwrap ?? mod;
- }
- exports.unwrapTypescript = actualUnwrapDefault;
- exports.unwrapJavascript = fakeUnwrapDefault;
- }
-});
-
-// .yarn/unplugged/@tootallnate-quickjs-emscripten-npm-0.23.0-a889ea7aeb/node_modules/@tootallnate/quickjs-emscripten/dist/debug.js
-var require_debug2 = __commonJS({
- ".yarn/unplugged/@tootallnate-quickjs-emscripten-npm-0.23.0-a889ea7aeb/node_modules/@tootallnate/quickjs-emscripten/dist/debug.js"(exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.debugLog = exports.QTS_DEBUG = void 0;
- exports.QTS_DEBUG = Boolean(typeof process === "object" && process.env.QTS_DEBUG);
- exports.debugLog = exports.QTS_DEBUG ? console.log.bind(console) : () => {
- };
- }
-});
-
-// .yarn/unplugged/@tootallnate-quickjs-emscripten-npm-0.23.0-a889ea7aeb/node_modules/@tootallnate/quickjs-emscripten/dist/errors.js
-var require_errors = __commonJS({
- ".yarn/unplugged/@tootallnate-quickjs-emscripten-npm-0.23.0-a889ea7aeb/node_modules/@tootallnate/quickjs-emscripten/dist/errors.js"(exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.QuickJSMemoryLeakDetected = exports.QuickJSAsyncifySuspended = exports.QuickJSAsyncifyError = exports.QuickJSNotImplemented = exports.QuickJSUseAfterFree = exports.QuickJSWrongOwner = exports.QuickJSUnwrapError = void 0;
- var QuickJSUnwrapError = class extends Error {
- constructor(cause, context) {
- super(String(cause));
- this.cause = cause;
- this.context = context;
- this.name = "QuickJSUnwrapError";
- }
- };
- exports.QuickJSUnwrapError = QuickJSUnwrapError;
- var QuickJSWrongOwner = class extends Error {
- constructor() {
- super(...arguments);
- this.name = "QuickJSWrongOwner";
- }
- };
- exports.QuickJSWrongOwner = QuickJSWrongOwner;
- var QuickJSUseAfterFree = class extends Error {
- constructor() {
- super(...arguments);
- this.name = "QuickJSUseAfterFree";
- }
- };
- exports.QuickJSUseAfterFree = QuickJSUseAfterFree;
- var QuickJSNotImplemented = class extends Error {
- constructor() {
- super(...arguments);
- this.name = "QuickJSNotImplemented";
- }
- };
- exports.QuickJSNotImplemented = QuickJSNotImplemented;
- var QuickJSAsyncifyError = class extends Error {
- constructor() {
- super(...arguments);
- this.name = "QuickJSAsyncifyError";
- }
- };
- exports.QuickJSAsyncifyError = QuickJSAsyncifyError;
- var QuickJSAsyncifySuspended = class extends Error {
- constructor() {
- super(...arguments);
- this.name = "QuickJSAsyncifySuspended";
- }
- };
- exports.QuickJSAsyncifySuspended = QuickJSAsyncifySuspended;
- var QuickJSMemoryLeakDetected = class extends Error {
- constructor() {
- super(...arguments);
- this.name = "QuickJSMemoryLeakDetected";
- }
- };
- exports.QuickJSMemoryLeakDetected = QuickJSMemoryLeakDetected;
- }
-});
-
-// .yarn/unplugged/@tootallnate-quickjs-emscripten-npm-0.23.0-a889ea7aeb/node_modules/@tootallnate/quickjs-emscripten/dist/asyncify-helpers.js
-var require_asyncify_helpers = __commonJS({
- ".yarn/unplugged/@tootallnate-quickjs-emscripten-npm-0.23.0-a889ea7aeb/node_modules/@tootallnate/quickjs-emscripten/dist/asyncify-helpers.js"(exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.awaitEachYieldedPromise = exports.maybeAsync = exports.maybeAsyncFn = void 0;
- function* awaitYield(value) {
- return yield value;
- }
- function awaitYieldOf(generator) {
- return awaitYield(awaitEachYieldedPromise(generator));
- }
- var AwaitYield = awaitYield;
- AwaitYield.of = awaitYieldOf;
- function maybeAsyncFn(that, fn2) {
- return (...args) => {
- const generator = fn2.call(that, AwaitYield, ...args);
- return awaitEachYieldedPromise(generator);
- };
- }
- exports.maybeAsyncFn = maybeAsyncFn;
- function maybeAsync(that, startGenerator) {
- const generator = startGenerator.call(that, AwaitYield);
- return awaitEachYieldedPromise(generator);
- }
- exports.maybeAsync = maybeAsync;
- function awaitEachYieldedPromise(gen) {
- function handleNextStep(step) {
- if (step.done) {
- return step.value;
- }
- if (step.value instanceof Promise) {
- return step.value.then((value) => handleNextStep(gen.next(value)), (error) => handleNextStep(gen.throw(error)));
- }
- return handleNextStep(gen.next(step.value));
- }
- return handleNextStep(gen.next());
- }
- exports.awaitEachYieldedPromise = awaitEachYieldedPromise;
- }
-});
-
-// .yarn/unplugged/@tootallnate-quickjs-emscripten-npm-0.23.0-a889ea7aeb/node_modules/@tootallnate/quickjs-emscripten/dist/lifetime.js
-var require_lifetime = __commonJS({
- ".yarn/unplugged/@tootallnate-quickjs-emscripten-npm-0.23.0-a889ea7aeb/node_modules/@tootallnate/quickjs-emscripten/dist/lifetime.js"(exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.Scope = exports.WeakLifetime = exports.StaticLifetime = exports.Lifetime = void 0;
- var asyncify_helpers_1 = require_asyncify_helpers();
- var debug_1 = require_debug2();
- var errors_1 = require_errors();
- var Lifetime = class _Lifetime {
- /**
- * When the Lifetime is disposed, it will call `disposer(_value)`. Use the
- * disposer function to implement whatever cleanup needs to happen at the end
- * of `value`'s lifetime.
- *
- * `_owner` is not used or controlled by the lifetime. It's just metadata for
- * the creator.
- */
- constructor(_value, copier, disposer, _owner) {
- this._value = _value;
- this.copier = copier;
- this.disposer = disposer;
- this._owner = _owner;
- this._alive = true;
- this._constructorStack = debug_1.QTS_DEBUG ? new Error("Lifetime constructed").stack : void 0;
- }
- get alive() {
- return this._alive;
- }
- /**
- * The value this Lifetime protects. You must never retain the value - it
- * may become invalid, leading to memory errors.
- *
- * @throws If the lifetime has been [[dispose]]d already.
- */
- get value() {
- this.assertAlive();
- return this._value;
- }
- get owner() {
- return this._owner;
- }
- get dupable() {
- return !!this.copier;
- }
- /**
- * Create a new handle pointing to the same [[value]].
- */
- dup() {
- this.assertAlive();
- if (!this.copier) {
- throw new Error("Non-dupable lifetime");
- }
- return new _Lifetime(this.copier(this._value), this.copier, this.disposer, this._owner);
- }
- consume(map) {
- this.assertAlive();
- const result = map(this);
- this.dispose();
- return result;
- }
- /**
- * Dispose of [[value]] and perform cleanup.
- */
- dispose() {
- this.assertAlive();
- if (this.disposer) {
- this.disposer(this._value);
- }
- this._alive = false;
- }
- assertAlive() {
- if (!this.alive) {
- if (this._constructorStack) {
- throw new errors_1.QuickJSUseAfterFree(`Lifetime not alive
-${this._constructorStack}
-Lifetime used`);
- }
- throw new errors_1.QuickJSUseAfterFree("Lifetime not alive");
- }
- }
- };
- exports.Lifetime = Lifetime;
- var StaticLifetime = class extends Lifetime {
- constructor(value, owner) {
- super(value, void 0, void 0, owner);
- }
- // Static lifetime doesn't need a copier to be copiable
- get dupable() {
- return true;
- }
- // Copy returns the same instance.
- dup() {
- return this;
- }
- // Dispose does nothing.
- dispose() {
- }
- };
- exports.StaticLifetime = StaticLifetime;
- var WeakLifetime = class extends Lifetime {
- constructor(value, copier, disposer, owner) {
- super(value, copier, disposer, owner);
- }
- dispose() {
- this._alive = false;
- }
- };
- exports.WeakLifetime = WeakLifetime;
- function scopeFinally(scope, blockError) {
- let disposeError;
- try {
- scope.dispose();
- } catch (error) {
- disposeError = error;
- }
- if (blockError && disposeError) {
- Object.assign(blockError, {
- message: `${blockError.message}
- Then, failed to dispose scope: ${disposeError.message}`,
- disposeError
- });
- throw blockError;
- }
- if (blockError || disposeError) {
- throw blockError || disposeError;
- }
- }
- var Scope = class _Scope {
- constructor() {
- this._disposables = new Lifetime(/* @__PURE__ */ new Set());
- }
- /**
- * Run `block` with a new Scope instance that will be disposed after the block returns.
- * Inside `block`, call `scope.manage` on each lifetime you create to have the lifetime
- * automatically disposed after the block returns.
- *
- * @warning Do not use with async functions. Instead, use [[withScopeAsync]].
- */
- static withScope(block) {
- const scope = new _Scope();
- let blockError;
- try {
- return block(scope);
- } catch (error) {
- blockError = error;
- throw error;
- } finally {
- scopeFinally(scope, blockError);
- }
- }
- static withScopeMaybeAsync(_this, block) {
- return (0, asyncify_helpers_1.maybeAsync)(void 0, function* (awaited) {
- const scope = new _Scope();
- let blockError;
- try {
- return yield* awaited.of(block.call(_this, awaited, scope));
- } catch (error) {
- blockError = error;
- throw error;
- } finally {
- scopeFinally(scope, blockError);
- }
- });
- }
- /**
- * Run `block` with a new Scope instance that will be disposed after the
- * block's returned promise settles. Inside `block`, call `scope.manage` on each
- * lifetime you create to have the lifetime automatically disposed after the
- * block returns.
- */
- static async withScopeAsync(block) {
- const scope = new _Scope();
- let blockError;
- try {
- return await block(scope);
- } catch (error) {
- blockError = error;
- throw error;
- } finally {
- scopeFinally(scope, blockError);
- }
- }
- /**
- * Track `lifetime` so that it is disposed when this scope is disposed.
- */
- manage(lifetime) {
- this._disposables.value.add(lifetime);
- return lifetime;
- }
- get alive() {
- return this._disposables.alive;
- }
- dispose() {
- const lifetimes = Array.from(this._disposables.value.values()).reverse();
- for (const lifetime of lifetimes) {
- if (lifetime.alive) {
- lifetime.dispose();
- }
- }
- this._disposables.dispose();
- }
- };
- exports.Scope = Scope;
- }
-});
-
-// .yarn/unplugged/@tootallnate-quickjs-emscripten-npm-0.23.0-a889ea7aeb/node_modules/@tootallnate/quickjs-emscripten/dist/deferred-promise.js
-var require_deferred_promise = __commonJS({
- ".yarn/unplugged/@tootallnate-quickjs-emscripten-npm-0.23.0-a889ea7aeb/node_modules/@tootallnate/quickjs-emscripten/dist/deferred-promise.js"(exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.QuickJSDeferredPromise = void 0;
- var QuickJSDeferredPromise = class {
- /**
- * Use [[QuickJSContext.newPromise]] to create a new promise instead of calling
- * this constructor directly.
- * @unstable
- */
- constructor(args) {
- this.resolve = (value) => {
- if (!this.resolveHandle.alive) {
- return;
- }
- this.context.unwrapResult(this.context.callFunction(this.resolveHandle, this.context.undefined, value || this.context.undefined)).dispose();
- this.disposeResolvers();
- this.onSettled();
- };
- this.reject = (value) => {
- if (!this.rejectHandle.alive) {
- return;
- }
- this.context.unwrapResult(this.context.callFunction(this.rejectHandle, this.context.undefined, value || this.context.undefined)).dispose();
- this.disposeResolvers();
- this.onSettled();
- };
- this.dispose = () => {
- if (this.handle.alive) {
- this.handle.dispose();
- }
- this.disposeResolvers();
- };
- this.context = args.context;
- this.owner = args.context.runtime;
- this.handle = args.promiseHandle;
- this.settled = new Promise((resolve) => {
- this.onSettled = resolve;
- });
- this.resolveHandle = args.resolveHandle;
- this.rejectHandle = args.rejectHandle;
- }
- get alive() {
- return this.handle.alive || this.resolveHandle.alive || this.rejectHandle.alive;
- }
- disposeResolvers() {
- if (this.resolveHandle.alive) {
- this.resolveHandle.dispose();
- }
- if (this.rejectHandle.alive) {
- this.rejectHandle.dispose();
- }
- }
- };
- exports.QuickJSDeferredPromise = QuickJSDeferredPromise;
- }
-});
-
-// .yarn/unplugged/@tootallnate-quickjs-emscripten-npm-0.23.0-a889ea7aeb/node_modules/@tootallnate/quickjs-emscripten/dist/memory.js
-var require_memory = __commonJS({
- ".yarn/unplugged/@tootallnate-quickjs-emscripten-npm-0.23.0-a889ea7aeb/node_modules/@tootallnate/quickjs-emscripten/dist/memory.js"(exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.ModuleMemory = void 0;
- var lifetime_1 = require_lifetime();
- var ModuleMemory = class {
- constructor(module3) {
- this.module = module3;
- }
- toPointerArray(handleArray) {
- const typedArray = new Int32Array(handleArray.map((handle) => handle.value));
- const numBytes = typedArray.length * typedArray.BYTES_PER_ELEMENT;
- const ptr = this.module._malloc(numBytes);
- var heapBytes = new Uint8Array(this.module.HEAPU8.buffer, ptr, numBytes);
- heapBytes.set(new Uint8Array(typedArray.buffer));
- return new lifetime_1.Lifetime(ptr, void 0, (ptr2) => this.module._free(ptr2));
- }
- newMutablePointerArray(length) {
- const zeros = new Int32Array(new Array(length).fill(0));
- const numBytes = zeros.length * zeros.BYTES_PER_ELEMENT;
- const ptr = this.module._malloc(numBytes);
- const typedArray = new Int32Array(this.module.HEAPU8.buffer, ptr, length);
- typedArray.set(zeros);
- return new lifetime_1.Lifetime({ typedArray, ptr }, void 0, (value) => this.module._free(value.ptr));
- }
- newHeapCharPointer(string) {
- const numBytes = this.module.lengthBytesUTF8(string) + 1;
- const ptr = this.module._malloc(numBytes);
- this.module.stringToUTF8(string, ptr, numBytes);
- return new lifetime_1.Lifetime(ptr, void 0, (value) => this.module._free(value));
- }
- consumeHeapCharPointer(ptr) {
- const str = this.module.UTF8ToString(ptr);
- this.module._free(ptr);
- return str;
- }
- };
- exports.ModuleMemory = ModuleMemory;
- }
-});
-
-// .yarn/unplugged/@tootallnate-quickjs-emscripten-npm-0.23.0-a889ea7aeb/node_modules/@tootallnate/quickjs-emscripten/dist/types-ffi.js
-var require_types_ffi = __commonJS({
- ".yarn/unplugged/@tootallnate-quickjs-emscripten-npm-0.23.0-a889ea7aeb/node_modules/@tootallnate/quickjs-emscripten/dist/types-ffi.js"(exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.EvalFlags = exports.assertSync = void 0;
- function assertSync(fn2) {
- return function mustBeSync(...args) {
- const result = fn2(...args);
- if (result && typeof result === "object" && result instanceof Promise) {
- throw new Error("Function unexpectedly returned a Promise");
- }
- return result;
- };
- }
- exports.assertSync = assertSync;
- exports.EvalFlags = {
- /** global code (default) */
- JS_EVAL_TYPE_GLOBAL: 0 << 0,
- /** module code */
- JS_EVAL_TYPE_MODULE: 1 << 0,
- /** direct call (internal use) */
- JS_EVAL_TYPE_DIRECT: 2 << 0,
- /** indirect call (internal use) */
- JS_EVAL_TYPE_INDIRECT: 3 << 0,
- JS_EVAL_TYPE_MASK: 3 << 0,
- /** force 'strict' mode */
- JS_EVAL_FLAG_STRICT: 1 << 3,
- /** force 'strip' mode */
- JS_EVAL_FLAG_STRIP: 1 << 4,
- /**
- * compile but do not run. The result is an object with a
- * JS_TAG_FUNCTION_BYTECODE or JS_TAG_MODULE tag. It can be executed
- * with JS_EvalFunction().
- */
- JS_EVAL_FLAG_COMPILE_ONLY: 1 << 5,
- /** don't include the stack frames before this eval in the Error() backtraces */
- JS_EVAL_FLAG_BACKTRACE_BARRIER: 1 << 6
- };
- }
-});
-
-// .yarn/unplugged/@tootallnate-quickjs-emscripten-npm-0.23.0-a889ea7aeb/node_modules/@tootallnate/quickjs-emscripten/dist/types.js
-var require_types2 = __commonJS({
- ".yarn/unplugged/@tootallnate-quickjs-emscripten-npm-0.23.0-a889ea7aeb/node_modules/@tootallnate/quickjs-emscripten/dist/types.js"(exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.concat = exports.evalOptionsToFlags = exports.DefaultIntrinsics = void 0;
- var types_ffi_1 = require_types_ffi();
- var UnstableSymbol = Symbol("Unstable");
- exports.DefaultIntrinsics = Symbol("DefaultIntrinsics");
- function evalOptionsToFlags(evalOptions) {
- if (typeof evalOptions === "number") {
- return evalOptions;
- }
- if (evalOptions === void 0) {
- return 0;
- }
- const { type, strict, strip, compileOnly, backtraceBarrier } = evalOptions;
- let flags = 0;
- if (type === "global")
- flags |= types_ffi_1.EvalFlags.JS_EVAL_TYPE_GLOBAL;
- if (type === "module")
- flags |= types_ffi_1.EvalFlags.JS_EVAL_TYPE_MODULE;
- if (strict)
- flags |= types_ffi_1.EvalFlags.JS_EVAL_FLAG_STRICT;
- if (strip)
- flags |= types_ffi_1.EvalFlags.JS_EVAL_FLAG_STRIP;
- if (compileOnly)
- flags |= types_ffi_1.EvalFlags.JS_EVAL_FLAG_COMPILE_ONLY;
- if (backtraceBarrier)
- flags |= types_ffi_1.EvalFlags.JS_EVAL_FLAG_BACKTRACE_BARRIER;
- return flags;
- }
- exports.evalOptionsToFlags = evalOptionsToFlags;
- function concat(...values) {
- let result = [];
- for (const value of values) {
- if (value !== void 0) {
- result = result.concat(value);
- }
- }
- return result;
- }
- exports.concat = concat;
- }
-});
-
-// .yarn/unplugged/@tootallnate-quickjs-emscripten-npm-0.23.0-a889ea7aeb/node_modules/@tootallnate/quickjs-emscripten/dist/context.js
-var require_context = __commonJS({
- ".yarn/unplugged/@tootallnate-quickjs-emscripten-npm-0.23.0-a889ea7aeb/node_modules/@tootallnate/quickjs-emscripten/dist/context.js"(exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.QuickJSContext = void 0;
- var debug_1 = require_debug2();
- var deferred_promise_1 = require_deferred_promise();
- var errors_1 = require_errors();
- var lifetime_1 = require_lifetime();
- var memory_1 = require_memory();
- var types_1 = require_types2();
- var ContextMemory = class extends memory_1.ModuleMemory {
- /** @private */
- constructor(args) {
- super(args.module);
- this.scope = new lifetime_1.Scope();
- this.copyJSValue = (ptr) => {
- return this.ffi.QTS_DupValuePointer(this.ctx.value, ptr);
- };
- this.freeJSValue = (ptr) => {
- this.ffi.QTS_FreeValuePointer(this.ctx.value, ptr);
- };
- args.ownedLifetimes?.forEach((lifetime) => this.scope.manage(lifetime));
- this.owner = args.owner;
- this.module = args.module;
- this.ffi = args.ffi;
- this.rt = args.rt;
- this.ctx = this.scope.manage(args.ctx);
- }
- get alive() {
- return this.scope.alive;
- }
- dispose() {
- return this.scope.dispose();
- }
- /**
- * Track `lifetime` so that it is disposed when this scope is disposed.
- */
- manage(lifetime) {
- return this.scope.manage(lifetime);
- }
- consumeJSCharPointer(ptr) {
- const str = this.module.UTF8ToString(ptr);
- this.ffi.QTS_FreeCString(this.ctx.value, ptr);
- return str;
- }
- heapValueHandle(ptr) {
- return new lifetime_1.Lifetime(ptr, this.copyJSValue, this.freeJSValue, this.owner);
- }
- };
- var QuickJSContext = class {
- /**
- * Use {@link QuickJS.createVm} to create a QuickJSContext instance.
- */
- constructor(args) {
- this._undefined = void 0;
- this._null = void 0;
- this._false = void 0;
- this._true = void 0;
- this._global = void 0;
- this._BigInt = void 0;
- this.fnNextId = -32768;
- this.fnMaps = /* @__PURE__ */ new Map();
- this.cToHostCallbacks = {
- callFunction: (ctx, this_ptr, argc, argv, fn_id) => {
- if (ctx !== this.ctx.value) {
- throw new Error("QuickJSContext instance received C -> JS call with mismatched ctx");
- }
- const fn2 = this.getFunction(fn_id);
- if (!fn2) {
- throw new Error(`QuickJSContext had no callback with id ${fn_id}`);
- }
- return lifetime_1.Scope.withScopeMaybeAsync(this, function* (awaited, scope) {
- const thisHandle = scope.manage(new lifetime_1.WeakLifetime(this_ptr, this.memory.copyJSValue, this.memory.freeJSValue, this.runtime));
- const argHandles = new Array(argc);
- for (let i = 0; i < argc; i++) {
- const ptr = this.ffi.QTS_ArgvGetJSValueConstPointer(argv, i);
- argHandles[i] = scope.manage(new lifetime_1.WeakLifetime(ptr, this.memory.copyJSValue, this.memory.freeJSValue, this.runtime));
- }
- try {
- const result = yield* awaited(fn2.apply(thisHandle, argHandles));
- if (result) {
- if ("error" in result && result.error) {
- (0, debug_1.debugLog)("throw error", result.error);
- throw result.error;
- }
- const handle = scope.manage(result instanceof lifetime_1.Lifetime ? result : result.value);
- return this.ffi.QTS_DupValuePointer(this.ctx.value, handle.value);
- }
- return 0;
- } catch (error) {
- return this.errorToHandle(error).consume((errorHandle) => this.ffi.QTS_Throw(this.ctx.value, errorHandle.value));
- }
- });
- }
- };
- this.runtime = args.runtime;
- this.module = args.module;
- this.ffi = args.ffi;
- this.rt = args.rt;
- this.ctx = args.ctx;
- this.memory = new ContextMemory({
- ...args,
- owner: this.runtime
- });
- args.callbacks.setContextCallbacks(this.ctx.value, this.cToHostCallbacks);
- this.dump = this.dump.bind(this);
- this.getString = this.getString.bind(this);
- this.getNumber = this.getNumber.bind(this);
- this.resolvePromise = this.resolvePromise.bind(this);
- }
- // @implement Disposable ----------------------------------------------------
- get alive() {
- return this.memory.alive;
- }
- /**
- * Dispose of this VM's underlying resources.
- *
- * @throws Calling this method without disposing of all created handles
- * will result in an error.
- */
- dispose() {
- this.memory.dispose();
- }
- // Globals ------------------------------------------------------------------
- /**
- * [`undefined`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined).
- */
- get undefined() {
- if (this._undefined) {
- return this._undefined;
- }
- const ptr = this.ffi.QTS_GetUndefined();
- return this._undefined = new lifetime_1.StaticLifetime(ptr);
- }
- /**
- * [`null`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/null).
- */
- get null() {
- if (this._null) {
- return this._null;
- }
- const ptr = this.ffi.QTS_GetNull();
- return this._null = new lifetime_1.StaticLifetime(ptr);
- }
- /**
- * [`true`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/true).
- */
- get true() {
- if (this._true) {
- return this._true;
- }
- const ptr = this.ffi.QTS_GetTrue();
- return this._true = new lifetime_1.StaticLifetime(ptr);
- }
- /**
- * [`false`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/false).
- */
- get false() {
- if (this._false) {
- return this._false;
- }
- const ptr = this.ffi.QTS_GetFalse();
- return this._false = new lifetime_1.StaticLifetime(ptr);
- }
- /**
- * [`global`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects).
- * A handle to the global object inside the interpreter.
- * You can set properties to create global variables.
- */
- get global() {
- if (this._global) {
- return this._global;
- }
- const ptr = this.ffi.QTS_GetGlobalObject(this.ctx.value);
- this.memory.manage(this.memory.heapValueHandle(ptr));
- this._global = new lifetime_1.StaticLifetime(ptr, this.runtime);
- return this._global;
- }
- // New values ---------------------------------------------------------------
- /**
- * Converts a Javascript number into a QuickJS value.
- */
- newNumber(num) {
- return this.memory.heapValueHandle(this.ffi.QTS_NewFloat64(this.ctx.value, num));
- }
- /**
- * Create a QuickJS [string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String) value.
- */
- newString(str) {
- const ptr = this.memory.newHeapCharPointer(str).consume((charHandle) => this.ffi.QTS_NewString(this.ctx.value, charHandle.value));
- return this.memory.heapValueHandle(ptr);
- }
- /**
- * Create a QuickJS [symbol](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol) value.
- * No two symbols created with this function will be the same value.
- */
- newUniqueSymbol(description) {
- const key = (typeof description === "symbol" ? description.description : description) ?? "";
- const ptr = this.memory.newHeapCharPointer(key).consume((charHandle) => this.ffi.QTS_NewSymbol(this.ctx.value, charHandle.value, 0));
- return this.memory.heapValueHandle(ptr);
- }
- /**
- * Get a symbol from the [global registry](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#shared_symbols_in_the_global_symbol_registry) for the given key.
- * All symbols created with the same key will be the same value.
- */
- newSymbolFor(key) {
- const description = (typeof key === "symbol" ? key.description : key) ?? "";
- const ptr = this.memory.newHeapCharPointer(description).consume((charHandle) => this.ffi.QTS_NewSymbol(this.ctx.value, charHandle.value, 1));
- return this.memory.heapValueHandle(ptr);
- }
- /**
- * Create a QuickJS [bigint](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt) value.
- */
- newBigInt(num) {
- if (!this._BigInt) {
- const bigIntHandle2 = this.getProp(this.global, "BigInt");
- this.memory.manage(bigIntHandle2);
- this._BigInt = new lifetime_1.StaticLifetime(bigIntHandle2.value, this.runtime);
- }
- const bigIntHandle = this._BigInt;
- const asString = String(num);
- return this.newString(asString).consume((handle) => this.unwrapResult(this.callFunction(bigIntHandle, this.undefined, handle)));
- }
- /**
- * `{}`.
- * Create a new QuickJS [object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer).
- *
- * @param prototype - Like [`Object.create`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create).
- */
- newObject(prototype) {
- if (prototype) {
- this.runtime.assertOwned(prototype);
- }
- const ptr = prototype ? this.ffi.QTS_NewObjectProto(this.ctx.value, prototype.value) : this.ffi.QTS_NewObject(this.ctx.value);
- return this.memory.heapValueHandle(ptr);
- }
- /**
- * `[]`.
- * Create a new QuickJS [array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array).
- */
- newArray() {
- const ptr = this.ffi.QTS_NewArray(this.ctx.value);
- return this.memory.heapValueHandle(ptr);
- }
- newPromise(value) {
- const deferredPromise = lifetime_1.Scope.withScope((scope) => {
- const mutablePointerArray = scope.manage(this.memory.newMutablePointerArray(2));
- const promisePtr = this.ffi.QTS_NewPromiseCapability(this.ctx.value, mutablePointerArray.value.ptr);
- const promiseHandle = this.memory.heapValueHandle(promisePtr);
- const [resolveHandle, rejectHandle] = Array.from(mutablePointerArray.value.typedArray).map((jsvaluePtr) => this.memory.heapValueHandle(jsvaluePtr));
- return new deferred_promise_1.QuickJSDeferredPromise({
- context: this,
- promiseHandle,
- resolveHandle,
- rejectHandle
- });
- });
- if (value && typeof value === "function") {
- value = new Promise(value);
- }
- if (value) {
- Promise.resolve(value).then(deferredPromise.resolve, (error) => error instanceof lifetime_1.Lifetime ? deferredPromise.reject(error) : this.newError(error).consume(deferredPromise.reject));
- }
- return deferredPromise;
- }
- /**
- * Convert a Javascript function into a QuickJS function value.
- * See [[VmFunctionImplementation]] for more details.
- *
- * A [[VmFunctionImplementation]] should not free its arguments or its return
- * value. A VmFunctionImplementation should also not retain any references to
- * its return value.
- *
- * To implement an async function, create a promise with [[newPromise]], then
- * return the deferred promise handle from `deferred.handle` from your
- * function implementation:
- *
- * ```
- * const deferred = vm.newPromise()
- * someNativeAsyncFunction().then(deferred.resolve)
- * return deferred.handle
- * ```
- */
- newFunction(name, fn2) {
- const fnId = ++this.fnNextId;
- this.setFunction(fnId, fn2);
- return this.memory.heapValueHandle(this.ffi.QTS_NewFunction(this.ctx.value, fnId, name));
- }
- newError(error) {
- const errorHandle = this.memory.heapValueHandle(this.ffi.QTS_NewError(this.ctx.value));
- if (error && typeof error === "object") {
- if (error.name !== void 0) {
- this.newString(error.name).consume((handle) => this.setProp(errorHandle, "name", handle));
- }
- if (error.message !== void 0) {
- this.newString(error.message).consume((handle) => this.setProp(errorHandle, "message", handle));
- }
- } else if (typeof error === "string") {
- this.newString(error).consume((handle) => this.setProp(errorHandle, "message", handle));
- } else if (error !== void 0) {
- this.newString(String(error)).consume((handle) => this.setProp(errorHandle, "message", handle));
- }
- return errorHandle;
- }
- // Read values --------------------------------------------------------------
- /**
- * `typeof` operator. **Not** [standards compliant](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof).
- *
- * @remarks
- * Does not support BigInt values correctly.
- */
- typeof(handle) {
- this.runtime.assertOwned(handle);
- return this.memory.consumeHeapCharPointer(this.ffi.QTS_Typeof(this.ctx.value, handle.value));
- }
- /**
- * Converts `handle` into a Javascript number.
- * @returns `NaN` on error, otherwise a `number`.
- */
- getNumber(handle) {
- this.runtime.assertOwned(handle);
- return this.ffi.QTS_GetFloat64(this.ctx.value, handle.value);
- }
- /**
- * Converts `handle` to a Javascript string.
- */
- getString(handle) {
- this.runtime.assertOwned(handle);
- return this.memory.consumeJSCharPointer(this.ffi.QTS_GetString(this.ctx.value, handle.value));
- }
- /**
- * Converts `handle` into a Javascript symbol. If the symbol is in the global
- * registry in the guest, it will be created with Symbol.for on the host.
- */
- getSymbol(handle) {
- this.runtime.assertOwned(handle);
- const key = this.memory.consumeJSCharPointer(this.ffi.QTS_GetSymbolDescriptionOrKey(this.ctx.value, handle.value));
- const isGlobal = this.ffi.QTS_IsGlobalSymbol(this.ctx.value, handle.value);
- return isGlobal ? Symbol.for(key) : Symbol(key);
- }
- /**
- * Converts `handle` to a Javascript bigint.
- */
- getBigInt(handle) {
- this.runtime.assertOwned(handle);
- const asString = this.getString(handle);
- return BigInt(asString);
- }
- /**
- * `Promise.resolve(value)`.
- * Convert a handle containing a Promise-like value inside the VM into an
- * actual promise on the host.
- *
- * @remarks
- * You may need to call [[executePendingJobs]] to ensure that the promise is resolved.
- *
- * @param promiseLikeHandle - A handle to a Promise-like value with a `.then(onSuccess, onError)` method.
- */
- resolvePromise(promiseLikeHandle) {
- this.runtime.assertOwned(promiseLikeHandle);
- const vmResolveResult = lifetime_1.Scope.withScope((scope) => {
- const vmPromise = scope.manage(this.getProp(this.global, "Promise"));
- const vmPromiseResolve = scope.manage(this.getProp(vmPromise, "resolve"));
- return this.callFunction(vmPromiseResolve, vmPromise, promiseLikeHandle);
- });
- if (vmResolveResult.error) {
- return Promise.resolve(vmResolveResult);
- }
- return new Promise((resolve) => {
- lifetime_1.Scope.withScope((scope) => {
- const resolveHandle = scope.manage(this.newFunction("resolve", (value) => {
- resolve({ value: value && value.dup() });
- }));
- const rejectHandle = scope.manage(this.newFunction("reject", (error) => {
- resolve({ error: error && error.dup() });
- }));
- const promiseHandle = scope.manage(vmResolveResult.value);
- const promiseThenHandle = scope.manage(this.getProp(promiseHandle, "then"));
- this.unwrapResult(this.callFunction(promiseThenHandle, promiseHandle, resolveHandle, rejectHandle)).dispose();
- });
- });
- }
- // Properties ---------------------------------------------------------------
- /**
- * `handle[key]`.
- * Get a property from a JSValue.
- *
- * @param key - The property may be specified as a JSValue handle, or as a
- * Javascript string (which will be converted automatically).
- */
- getProp(handle, key) {
- this.runtime.assertOwned(handle);
- const ptr = this.borrowPropertyKey(key).consume((quickJSKey) => this.ffi.QTS_GetProp(this.ctx.value, handle.value, quickJSKey.value));
- const result = this.memory.heapValueHandle(ptr);
- return result;
- }
- /**
- * `handle[key] = value`.
- * Set a property on a JSValue.
- *
- * @remarks
- * Note that the QuickJS authors recommend using [[defineProp]] to define new
- * properties.
- *
- * @param key - The property may be specified as a JSValue handle, or as a
- * Javascript string or number (which will be converted automatically to a JSValue).
- */
- setProp(handle, key, value) {
- this.runtime.assertOwned(handle);
- this.borrowPropertyKey(key).consume((quickJSKey) => this.ffi.QTS_SetProp(this.ctx.value, handle.value, quickJSKey.value, value.value));
- }
- /**
- * [`Object.defineProperty(handle, key, descriptor)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty).
- *
- * @param key - The property may be specified as a JSValue handle, or as a
- * Javascript string or number (which will be converted automatically to a JSValue).
- */
- defineProp(handle, key, descriptor) {
- this.runtime.assertOwned(handle);
- lifetime_1.Scope.withScope((scope) => {
- const quickJSKey = scope.manage(this.borrowPropertyKey(key));
- const value = descriptor.value || this.undefined;
- const configurable = Boolean(descriptor.configurable);
- const enumerable = Boolean(descriptor.enumerable);
- const hasValue = Boolean(descriptor.value);
- const get = descriptor.get ? scope.manage(this.newFunction(descriptor.get.name, descriptor.get)) : this.undefined;
- const set = descriptor.set ? scope.manage(this.newFunction(descriptor.set.name, descriptor.set)) : this.undefined;
- this.ffi.QTS_DefineProp(this.ctx.value, handle.value, quickJSKey.value, value.value, get.value, set.value, configurable, enumerable, hasValue);
- });
- }
- // Evaluation ---------------------------------------------------------------
- /**
- * [`func.call(thisVal, ...args)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call).
- * Call a JSValue as a function.
- *
- * See [[unwrapResult]], which will throw if the function returned an error, or
- * return the result handle directly. If evaluation returned a handle containing
- * a promise, use [[resolvePromise]] to convert it to a native promise and
- * [[executePendingJobs]] to finish evaluating the promise.
- *
- * @returns A result. If the function threw synchronously, `result.error` be a
- * handle to the exception. Otherwise `result.value` will be a handle to the
- * value.
- */
- callFunction(func, thisVal, ...args) {
- this.runtime.assertOwned(func);
- const resultPtr = this.memory.toPointerArray(args).consume((argsArrayPtr) => this.ffi.QTS_Call(this.ctx.value, func.value, thisVal.value, args.length, argsArrayPtr.value));
- const errorPtr = this.ffi.QTS_ResolveException(this.ctx.value, resultPtr);
- if (errorPtr) {
- this.ffi.QTS_FreeValuePointer(this.ctx.value, resultPtr);
- return { error: this.memory.heapValueHandle(errorPtr) };
- }
- return { value: this.memory.heapValueHandle(resultPtr) };
- }
- /**
- * Like [`eval(code)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval#Description).
- * Evaluates the Javascript source `code` in the global scope of this VM.
- * When working with async code, you many need to call [[executePendingJobs]]
- * to execute callbacks pending after synchronous evaluation returns.
- *
- * See [[unwrapResult]], which will throw if the function returned an error, or
- * return the result handle directly. If evaluation returned a handle containing
- * a promise, use [[resolvePromise]] to convert it to a native promise and
- * [[executePendingJobs]] to finish evaluating the promise.
- *
- * *Note*: to protect against infinite loops, provide an interrupt handler to
- * [[setInterruptHandler]]. You can use [[shouldInterruptAfterDeadline]] to
- * create a time-based deadline.
- *
- * @returns The last statement's value. If the code threw synchronously,
- * `result.error` will be a handle to the exception. If execution was
- * interrupted, the error will have name `InternalError` and message
- * `interrupted`.
- */
- evalCode(code, filename = "eval.js", options) {
- const detectModule = options === void 0 ? 1 : 0;
- const flags = (0, types_1.evalOptionsToFlags)(options);
- const resultPtr = this.memory.newHeapCharPointer(code).consume((charHandle) => this.ffi.QTS_Eval(this.ctx.value, charHandle.value, filename, detectModule, flags));
- const errorPtr = this.ffi.QTS_ResolveException(this.ctx.value, resultPtr);
- if (errorPtr) {
- this.ffi.QTS_FreeValuePointer(this.ctx.value, resultPtr);
- return { error: this.memory.heapValueHandle(errorPtr) };
- }
- return { value: this.memory.heapValueHandle(resultPtr) };
- }
- /**
- * Throw an error in the VM, interrupted whatever current execution is in progress when execution resumes.
- * @experimental
- */
- throw(error) {
- return this.errorToHandle(error).consume((handle) => this.ffi.QTS_Throw(this.ctx.value, handle.value));
- }
- /**
- * @private
- */
- borrowPropertyKey(key) {
- if (typeof key === "number") {
- return this.newNumber(key);
- }
- if (typeof key === "string") {
- return this.newString(key);
- }
- return new lifetime_1.StaticLifetime(key.value, this.runtime);
- }
- /**
- * @private
- */
- getMemory(rt) {
- if (rt === this.rt.value) {
- return this.memory;
- } else {
- throw new Error("Private API. Cannot get memory from a different runtime");
- }
- }
- // Utilities ----------------------------------------------------------------
- /**
- * Dump a JSValue to Javascript in a best-effort fashion.
- * Returns `handle.toString()` if it cannot be serialized to JSON.
- */
- dump(handle) {
- this.runtime.assertOwned(handle);
- const type = this.typeof(handle);
- if (type === "string") {
- return this.getString(handle);
- } else if (type === "number") {
- return this.getNumber(handle);
- } else if (type === "bigint") {
- return this.getBigInt(handle);
- } else if (type === "undefined") {
- return void 0;
- } else if (type === "symbol") {
- return this.getSymbol(handle);
- }
- const str = this.memory.consumeJSCharPointer(this.ffi.QTS_Dump(this.ctx.value, handle.value));
- try {
- return JSON.parse(str);
- } catch (err) {
- return str;
- }
- }
- /**
- * Unwrap a SuccessOrFail result such as a [[VmCallResult]] or a
- * [[ExecutePendingJobsResult]], where the fail branch contains a handle to a QuickJS error value.
- * If the result is a success, returns the value.
- * If the result is an error, converts the error to a native object and throws the error.
- */
- unwrapResult(result) {
- if (result.error) {
- const context = "context" in result.error ? result.error.context : this;
- const cause = result.error.consume((error) => this.dump(error));
- if (cause && typeof cause === "object" && typeof cause.message === "string") {
- const { message, name, stack } = cause;
- const exception = new errors_1.QuickJSUnwrapError("");
- const hostStack = exception.stack;
- if (typeof name === "string") {
- exception.name = cause.name;
- }
- if (typeof stack === "string") {
- exception.stack = `${name}: ${message}
-${cause.stack}Host: ${hostStack}`;
- }
- Object.assign(exception, { cause, context, message });
- throw exception;
- }
- throw new errors_1.QuickJSUnwrapError(cause, context);
- }
- return result.value;
- }
- /** @private */
- getFunction(fn_id) {
- const map_id = fn_id >> 8;
- const fnMap = this.fnMaps.get(map_id);
- if (!fnMap) {
- return void 0;
- }
- return fnMap.get(fn_id);
- }
- /** @private */
- setFunction(fn_id, handle) {
- const map_id = fn_id >> 8;
- let fnMap = this.fnMaps.get(map_id);
- if (!fnMap) {
- fnMap = /* @__PURE__ */ new Map();
- this.fnMaps.set(map_id, fnMap);
- }
- return fnMap.set(fn_id, handle);
- }
- errorToHandle(error) {
- if (error instanceof lifetime_1.Lifetime) {
- return error;
- }
- return this.newError(error);
- }
- };
- exports.QuickJSContext = QuickJSContext;
- }
-});
-
-// .yarn/unplugged/@tootallnate-quickjs-emscripten-npm-0.23.0-a889ea7aeb/node_modules/@tootallnate/quickjs-emscripten/dist/runtime.js
-var require_runtime = __commonJS({
- ".yarn/unplugged/@tootallnate-quickjs-emscripten-npm-0.23.0-a889ea7aeb/node_modules/@tootallnate/quickjs-emscripten/dist/runtime.js"(exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.QuickJSRuntime = void 0;
- var asyncify_helpers_1 = require_asyncify_helpers();
- var context_1 = require_context();
- var debug_1 = require_debug2();
- var errors_1 = require_errors();
- var lifetime_1 = require_lifetime();
- var memory_1 = require_memory();
- var types_1 = require_types2();
- var QuickJSRuntime = class {
- /** @private */
- constructor(args) {
- this.scope = new lifetime_1.Scope();
- this.contextMap = /* @__PURE__ */ new Map();
- this.cToHostCallbacks = {
- shouldInterrupt: (rt) => {
- if (rt !== this.rt.value) {
- throw new Error("QuickJSContext instance received C -> JS interrupt with mismatched rt");
- }
- const fn2 = this.interruptHandler;
- if (!fn2) {
- throw new Error("QuickJSContext had no interrupt handler");
- }
- return fn2(this) ? 1 : 0;
- },
- loadModuleSource: (0, asyncify_helpers_1.maybeAsyncFn)(this, function* (awaited, rt, ctx, moduleName) {
- const moduleLoader = this.moduleLoader;
- if (!moduleLoader) {
- throw new Error("Runtime has no module loader");
- }
- if (rt !== this.rt.value) {
- throw new Error("Runtime pointer mismatch");
- }
- const context = this.contextMap.get(ctx) ?? this.newContext({
- contextPointer: ctx
- });
- try {
- const result = yield* awaited(moduleLoader(moduleName, context));
- if (typeof result === "object" && "error" in result && result.error) {
- (0, debug_1.debugLog)("cToHostLoadModule: loader returned error", result.error);
- throw result.error;
- }
- const moduleSource = typeof result === "string" ? result : "value" in result ? result.value : result;
- return this.memory.newHeapCharPointer(moduleSource).value;
- } catch (error) {
- (0, debug_1.debugLog)("cToHostLoadModule: caught error", error);
- context.throw(error);
- return 0;
- }
- }),
- normalizeModule: (0, asyncify_helpers_1.maybeAsyncFn)(this, function* (awaited, rt, ctx, baseModuleName, moduleNameRequest) {
- const moduleNormalizer = this.moduleNormalizer;
- if (!moduleNormalizer) {
- throw new Error("Runtime has no module normalizer");
- }
- if (rt !== this.rt.value) {
- throw new Error("Runtime pointer mismatch");
- }
- const context = this.contextMap.get(ctx) ?? this.newContext({
- /* TODO: Does this happen? Are we responsible for disposing? I don't think so */
- contextPointer: ctx
- });
- try {
- const result = yield* awaited(moduleNormalizer(baseModuleName, moduleNameRequest, context));
- if (typeof result === "object" && "error" in result && result.error) {
- (0, debug_1.debugLog)("cToHostNormalizeModule: normalizer returned error", result.error);
- throw result.error;
- }
- const name = typeof result === "string" ? result : result.value;
- return context.getMemory(this.rt.value).newHeapCharPointer(name).value;
- } catch (error) {
- (0, debug_1.debugLog)("normalizeModule: caught error", error);
- context.throw(error);
- return 0;
- }
- })
- };
- args.ownedLifetimes?.forEach((lifetime) => this.scope.manage(lifetime));
- this.module = args.module;
- this.memory = new memory_1.ModuleMemory(this.module);
- this.ffi = args.ffi;
- this.rt = args.rt;
- this.callbacks = args.callbacks;
- this.scope.manage(this.rt);
- this.callbacks.setRuntimeCallbacks(this.rt.value, this.cToHostCallbacks);
- this.executePendingJobs = this.executePendingJobs.bind(this);
- }
- get alive() {
- return this.scope.alive;
- }
- dispose() {
- return this.scope.dispose();
- }
- newContext(options = {}) {
- if (options.intrinsics && options.intrinsics !== types_1.DefaultIntrinsics) {
- throw new Error("TODO: Custom intrinsics are not supported yet");
- }
- const ctx = new lifetime_1.Lifetime(options.contextPointer || this.ffi.QTS_NewContext(this.rt.value), void 0, (ctx_ptr) => {
- this.contextMap.delete(ctx_ptr);
- this.callbacks.deleteContext(ctx_ptr);
- this.ffi.QTS_FreeContext(ctx_ptr);
- });
- const context = new context_1.QuickJSContext({
- module: this.module,
- ctx,
- ffi: this.ffi,
- rt: this.rt,
- ownedLifetimes: options.ownedLifetimes,
- runtime: this,
- callbacks: this.callbacks
- });
- this.contextMap.set(ctx.value, context);
- return context;
- }
- /**
- * Set the loader for EcmaScript modules requested by any context in this
- * runtime.
- *
- * The loader can be removed with [[removeModuleLoader]].
- */
- setModuleLoader(moduleLoader, moduleNormalizer) {
- this.moduleLoader = moduleLoader;
- this.moduleNormalizer = moduleNormalizer;
- this.ffi.QTS_RuntimeEnableModuleLoader(this.rt.value, this.moduleNormalizer ? 1 : 0);
- }
- /**
- * Remove the the loader set by [[setModuleLoader]]. This disables module loading.
- */
- removeModuleLoader() {
- this.moduleLoader = void 0;
- this.ffi.QTS_RuntimeDisableModuleLoader(this.rt.value);
- }
- // Runtime management -------------------------------------------------------
- /**
- * In QuickJS, promises and async functions create pendingJobs. These do not execute
- * immediately and need to be run by calling [[executePendingJobs]].
- *
- * @return true if there is at least one pendingJob queued up.
- */
- hasPendingJob() {
- return Boolean(this.ffi.QTS_IsJobPending(this.rt.value));
- }
- /**
- * Set a callback which is regularly called by the QuickJS engine when it is
- * executing code. This callback can be used to implement an execution
- * timeout.
- *
- * The interrupt handler can be removed with [[removeInterruptHandler]].
- */
- setInterruptHandler(cb) {
- const prevInterruptHandler = this.interruptHandler;
- this.interruptHandler = cb;
- if (!prevInterruptHandler) {
- this.ffi.QTS_RuntimeEnableInterruptHandler(this.rt.value);
- }
- }
- /**
- * Remove the interrupt handler, if any.
- * See [[setInterruptHandler]].
- */
- removeInterruptHandler() {
- if (this.interruptHandler) {
- this.ffi.QTS_RuntimeDisableInterruptHandler(this.rt.value);
- this.interruptHandler = void 0;
- }
- }
- /**
- * Execute pendingJobs on the runtime until `maxJobsToExecute` jobs are
- * executed (default all pendingJobs), the queue is exhausted, or the runtime
- * encounters an exception.
- *
- * In QuickJS, promises and async functions *inside the runtime* create
- * pendingJobs. These do not execute immediately and need to triggered to run.
- *
- * @param maxJobsToExecute - When negative, run all pending jobs. Otherwise execute
- * at most `maxJobsToExecute` before returning.
- *
- * @return On success, the number of executed jobs. On error, the exception
- * that stopped execution, and the context it occurred in. Note that
- * executePendingJobs will not normally return errors thrown inside async
- * functions or rejected promises. Those errors are available by calling
- * [[resolvePromise]] on the promise handle returned by the async function.
- */
- executePendingJobs(maxJobsToExecute = -1) {
- const ctxPtrOut = this.memory.newMutablePointerArray(1);
- const valuePtr = this.ffi.QTS_ExecutePendingJob(this.rt.value, maxJobsToExecute ?? -1, ctxPtrOut.value.ptr);
- const ctxPtr = ctxPtrOut.value.typedArray[0];
- ctxPtrOut.dispose();
- if (ctxPtr === 0) {
- this.ffi.QTS_FreeValuePointerRuntime(this.rt.value, valuePtr);
- return { value: 0 };
- }
- const context = this.contextMap.get(ctxPtr) ?? this.newContext({
- contextPointer: ctxPtr
- });
- const resultValue = context.getMemory(this.rt.value).heapValueHandle(valuePtr);
- const typeOfRet = context.typeof(resultValue);
- if (typeOfRet === "number") {
- const executedJobs = context.getNumber(resultValue);
- resultValue.dispose();
- return { value: executedJobs };
- } else {
- const error = Object.assign(resultValue, { context });
- return {
- error
- };
- }
- }
- /**
- * Set the max memory this runtime can allocate.
- * To remove the limit, set to `-1`.
- */
- setMemoryLimit(limitBytes) {
- if (limitBytes < 0 && limitBytes !== -1) {
- throw new Error("Cannot set memory limit to negative number. To unset, pass -1");
- }
- this.ffi.QTS_RuntimeSetMemoryLimit(this.rt.value, limitBytes);
- }
- /**
- * Compute memory usage for this runtime. Returns the result as a handle to a
- * JSValue object. Use [[QuickJSContext.dump]] to convert to a native object.
- * Calling this method will allocate more memory inside the runtime. The information
- * is accurate as of just before the call to `computeMemoryUsage`.
- * For a human-digestible representation, see [[dumpMemoryUsage]].
- */
- computeMemoryUsage() {
- const serviceContextMemory = this.getSystemContext().getMemory(this.rt.value);
- return serviceContextMemory.heapValueHandle(this.ffi.QTS_RuntimeComputeMemoryUsage(this.rt.value, serviceContextMemory.ctx.value));
- }
- /**
- * @returns a human-readable description of memory usage in this runtime.
- * For programmatic access to this information, see [[computeMemoryUsage]].
- */
- dumpMemoryUsage() {
- return this.memory.consumeHeapCharPointer(this.ffi.QTS_RuntimeDumpMemoryUsage(this.rt.value));
- }
- /**
- * Set the max stack size for this runtime, in bytes.
- * To remove the limit, set to `0`.
- */
- setMaxStackSize(stackSize) {
- if (stackSize < 0) {
- throw new Error("Cannot set memory limit to negative number. To unset, pass 0.");
- }
- this.ffi.QTS_RuntimeSetMaxStackSize(this.rt.value, stackSize);
- }
- /**
- * Assert that `handle` is owned by this runtime.
- * @throws QuickJSWrongOwner if owned by a different runtime.
- */
- assertOwned(handle) {
- if (handle.owner && handle.owner.rt !== this.rt) {
- throw new errors_1.QuickJSWrongOwner(`Handle is not owned by this runtime: ${handle.owner.rt.value} != ${this.rt.value}`);
- }
- }
- getSystemContext() {
- if (!this.context) {
- this.context = this.scope.manage(this.newContext());
- }
- return this.context;
- }
- };
- exports.QuickJSRuntime = QuickJSRuntime;
- }
-});
-
-// .yarn/unplugged/@tootallnate-quickjs-emscripten-npm-0.23.0-a889ea7aeb/node_modules/@tootallnate/quickjs-emscripten/dist/module.js
-var require_module = __commonJS({
- ".yarn/unplugged/@tootallnate-quickjs-emscripten-npm-0.23.0-a889ea7aeb/node_modules/@tootallnate/quickjs-emscripten/dist/module.js"(exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.QuickJSWASMModule = exports.applyModuleEvalRuntimeOptions = exports.applyBaseRuntimeOptions = exports.QuickJSModuleCallbacks = void 0;
- var debug_1 = require_debug2();
- var errors_1 = require_errors();
- var lifetime_1 = require_lifetime();
- var runtime_1 = require_runtime();
- var types_1 = require_types2();
- var QuickJSEmscriptenModuleCallbacks = class {
- constructor(args) {
- this.callFunction = args.callFunction;
- this.shouldInterrupt = args.shouldInterrupt;
- this.loadModuleSource = args.loadModuleSource;
- this.normalizeModule = args.normalizeModule;
- }
- };
- var QuickJSModuleCallbacks = class {
- constructor(module3) {
- this.contextCallbacks = /* @__PURE__ */ new Map();
- this.runtimeCallbacks = /* @__PURE__ */ new Map();
- this.suspendedCount = 0;
- this.cToHostCallbacks = new QuickJSEmscriptenModuleCallbacks({
- callFunction: (asyncify, ctx, this_ptr, argc, argv, fn_id) => this.handleAsyncify(asyncify, () => {
- try {
- const vm = this.contextCallbacks.get(ctx);
- if (!vm) {
- throw new Error(`QuickJSContext(ctx = ${ctx}) not found for C function call "${fn_id}"`);
- }
- return vm.callFunction(ctx, this_ptr, argc, argv, fn_id);
- } catch (error) {
- console.error("[C to host error: returning null]", error);
- return 0;
- }
- }),
- shouldInterrupt: (asyncify, rt) => this.handleAsyncify(asyncify, () => {
- try {
- const vm = this.runtimeCallbacks.get(rt);
- if (!vm) {
- throw new Error(`QuickJSRuntime(rt = ${rt}) not found for C interrupt`);
- }
- return vm.shouldInterrupt(rt);
- } catch (error) {
- console.error("[C to host interrupt: returning error]", error);
- return 1;
- }
- }),
- loadModuleSource: (asyncify, rt, ctx, moduleName) => this.handleAsyncify(asyncify, () => {
- try {
- const runtimeCallbacks = this.runtimeCallbacks.get(rt);
- if (!runtimeCallbacks) {
- throw new Error(`QuickJSRuntime(rt = ${rt}) not found for C module loader`);
- }
- const loadModule = runtimeCallbacks.loadModuleSource;
- if (!loadModule) {
- throw new Error(`QuickJSRuntime(rt = ${rt}) does not support module loading`);
- }
- return loadModule(rt, ctx, moduleName);
- } catch (error) {
- console.error("[C to host module loader error: returning null]", error);
- return 0;
- }
- }),
- normalizeModule: (asyncify, rt, ctx, moduleBaseName, moduleName) => this.handleAsyncify(asyncify, () => {
- try {
- const runtimeCallbacks = this.runtimeCallbacks.get(rt);
- if (!runtimeCallbacks) {
- throw new Error(`QuickJSRuntime(rt = ${rt}) not found for C module loader`);
- }
- const normalizeModule = runtimeCallbacks.normalizeModule;
- if (!normalizeModule) {
- throw new Error(`QuickJSRuntime(rt = ${rt}) does not support module loading`);
- }
- return normalizeModule(rt, ctx, moduleBaseName, moduleName);
- } catch (error) {
- console.error("[C to host module loader error: returning null]", error);
- return 0;
- }
- })
- });
- this.module = module3;
- this.module.callbacks = this.cToHostCallbacks;
- }
- setRuntimeCallbacks(rt, callbacks) {
- this.runtimeCallbacks.set(rt, callbacks);
- }
- deleteRuntime(rt) {
- this.runtimeCallbacks.delete(rt);
- }
- setContextCallbacks(ctx, callbacks) {
- this.contextCallbacks.set(ctx, callbacks);
- }
- deleteContext(ctx) {
- this.contextCallbacks.delete(ctx);
- }
- handleAsyncify(asyncify, fn2) {
- if (asyncify) {
- return asyncify.handleSleep((done) => {
- try {
- const result = fn2();
- if (!(result instanceof Promise)) {
- (0, debug_1.debugLog)("asyncify.handleSleep: not suspending:", result);
- done(result);
- return;
- }
- if (this.suspended) {
- throw new errors_1.QuickJSAsyncifyError(`Already suspended at: ${this.suspended.stack}
-Attempted to suspend at:`);
- } else {
- this.suspended = new errors_1.QuickJSAsyncifySuspended(`(${this.suspendedCount++})`);
- (0, debug_1.debugLog)("asyncify.handleSleep: suspending:", this.suspended);
- }
- result.then((resolvedResult) => {
- this.suspended = void 0;
- (0, debug_1.debugLog)("asyncify.handleSleep: resolved:", resolvedResult);
- done(resolvedResult);
- }, (error) => {
- (0, debug_1.debugLog)("asyncify.handleSleep: rejected:", error);
- console.error("QuickJS: cannot handle error in suspended function", error);
- this.suspended = void 0;
- });
- } catch (error) {
- (0, debug_1.debugLog)("asyncify.handleSleep: error:", error);
- this.suspended = void 0;
- throw error;
- }
- });
- }
- const value = fn2();
- if (value instanceof Promise) {
- throw new Error("Promise return value not supported in non-asyncify context.");
- }
- return value;
- }
- };
- exports.QuickJSModuleCallbacks = QuickJSModuleCallbacks;
- function applyBaseRuntimeOptions(runtime, options) {
- if (options.interruptHandler) {
- runtime.setInterruptHandler(options.interruptHandler);
- }
- if (options.maxStackSizeBytes !== void 0) {
- runtime.setMaxStackSize(options.maxStackSizeBytes);
- }
- if (options.memoryLimitBytes !== void 0) {
- runtime.setMemoryLimit(options.memoryLimitBytes);
- }
- }
- exports.applyBaseRuntimeOptions = applyBaseRuntimeOptions;
- function applyModuleEvalRuntimeOptions(runtime, options) {
- if (options.moduleLoader) {
- runtime.setModuleLoader(options.moduleLoader);
- }
- if (options.shouldInterrupt) {
- runtime.setInterruptHandler(options.shouldInterrupt);
- }
- if (options.memoryLimitBytes !== void 0) {
- runtime.setMemoryLimit(options.memoryLimitBytes);
- }
- if (options.maxStackSizeBytes !== void 0) {
- runtime.setMaxStackSize(options.maxStackSizeBytes);
- }
- }
- exports.applyModuleEvalRuntimeOptions = applyModuleEvalRuntimeOptions;
- var QuickJSWASMModule = class {
- /** @private */
- constructor(module3, ffi) {
- this.module = module3;
- this.ffi = ffi;
- this.callbacks = new QuickJSModuleCallbacks(module3);
- }
- /**
- * Create a runtime.
- * Use the runtime to set limits on CPU and memory usage and configure module
- * loading for one or more [[QuickJSContext]]s inside the runtime.
- */
- newRuntime(options = {}) {
- const rt = new lifetime_1.Lifetime(this.ffi.QTS_NewRuntime(), void 0, (rt_ptr) => {
- this.callbacks.deleteRuntime(rt_ptr);
- this.ffi.QTS_FreeRuntime(rt_ptr);
- });
- const runtime = new runtime_1.QuickJSRuntime({
- module: this.module,
- callbacks: this.callbacks,
- ffi: this.ffi,
- rt
- });
- applyBaseRuntimeOptions(runtime, options);
- if (options.moduleLoader) {
- runtime.setModuleLoader(options.moduleLoader);
- }
- return runtime;
- }
- /**
- * A simplified API to create a new [[QuickJSRuntime]] and a
- * [[QuickJSContext]] inside that runtime at the same time. The runtime will
- * be disposed when the context is disposed.
- */
- newContext(options = {}) {
- const runtime = this.newRuntime();
- const context = runtime.newContext({
- ...options,
- ownedLifetimes: (0, types_1.concat)(runtime, options.ownedLifetimes)
- });
- runtime.context = context;
- return context;
- }
- /**
- * One-off evaluate code without needing to create a [[QuickJSRuntime]] or
- * [[QuickJSContext]] explicitly.
- *
- * To protect against infinite loops, use the `shouldInterrupt` option. The
- * [[shouldInterruptAfterDeadline]] function will create a time-based deadline.
- *
- * If you need more control over how the code executes, create a
- * [[QuickJSRuntime]] (with [[newRuntime]]) or a [[QuickJSContext]] (with
- * [[newContext]] or [[QuickJSRuntime.newContext]]), and use its
- * [[QuickJSContext.evalCode]] method.
- *
- * Asynchronous callbacks may not run during the first call to `evalCode`. If
- * you need to work with async code inside QuickJS, create a runtime and use
- * [[QuickJSRuntime.executePendingJobs]].
- *
- * @returns The result is coerced to a native Javascript value using JSON
- * serialization, so properties and values unsupported by JSON will be dropped.
- *
- * @throws If `code` throws during evaluation, the exception will be
- * converted into a native Javascript value and thrown.
- *
- * @throws if `options.shouldInterrupt` interrupted execution, will throw a Error
- * with name `"InternalError"` and message `"interrupted"`.
- */
- evalCode(code, options = {}) {
- return lifetime_1.Scope.withScope((scope) => {
- const vm = scope.manage(this.newContext());
- applyModuleEvalRuntimeOptions(vm.runtime, options);
- const result = vm.evalCode(code, "eval.js");
- if (options.memoryLimitBytes !== void 0) {
- vm.runtime.setMemoryLimit(-1);
- }
- if (result.error) {
- const error = vm.dump(scope.manage(result.error));
- throw error;
- }
- const value = vm.dump(scope.manage(result.value));
- return value;
- });
- }
- /**
- * Get a low-level interface to the QuickJS functions in this WebAssembly
- * module.
- * @experimental
- * @unstable No warranty is provided with this API. It could change at any time.
- * @private
- */
- getFFI() {
- return this.ffi;
- }
- };
- exports.QuickJSWASMModule = QuickJSWASMModule;
- }
-});
-
-// .yarn/unplugged/@tootallnate-quickjs-emscripten-npm-0.23.0-a889ea7aeb/node_modules/@tootallnate/quickjs-emscripten/dist/context-asyncify.js
-var require_context_asyncify = __commonJS({
- ".yarn/unplugged/@tootallnate-quickjs-emscripten-npm-0.23.0-a889ea7aeb/node_modules/@tootallnate/quickjs-emscripten/dist/context-asyncify.js"(exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.QuickJSAsyncContext = void 0;
- var context_1 = require_context();
- var debug_1 = require_debug2();
- var types_1 = require_types2();
- var QuickJSAsyncContext = class extends context_1.QuickJSContext {
- /**
- * Asyncified version of [[evalCode]].
- */
- async evalCodeAsync(code, filename = "eval.js", options) {
- const detectModule = options === void 0 ? 1 : 0;
- const flags = (0, types_1.evalOptionsToFlags)(options);
- let resultPtr = 0;
- try {
- resultPtr = await this.memory.newHeapCharPointer(code).consume((charHandle) => this.ffi.QTS_Eval_MaybeAsync(this.ctx.value, charHandle.value, filename, detectModule, flags));
- } catch (error) {
- (0, debug_1.debugLog)("QTS_Eval_MaybeAsync threw", error);
- throw error;
- }
- const errorPtr = this.ffi.QTS_ResolveException(this.ctx.value, resultPtr);
- if (errorPtr) {
- this.ffi.QTS_FreeValuePointer(this.ctx.value, resultPtr);
- return { error: this.memory.heapValueHandle(errorPtr) };
- }
- return { value: this.memory.heapValueHandle(resultPtr) };
- }
- /**
- * Similar to [[newFunction]].
- * Convert an async host Javascript function into a synchronous QuickJS function value.
- *
- * Whenever QuickJS calls this function, the VM's stack will be unwound while
- * waiting the async function to complete, and then restored when the returned
- * promise resolves.
- *
- * Asyncified functions must never call other asyncified functions or
- * `import`, even indirectly, because the stack cannot be unwound twice.
- *
- * See [Emscripten's docs on Asyncify](https://emscripten.org/docs/porting/asyncify.html).
- */
- newAsyncifiedFunction(name, fn2) {
- return this.newFunction(name, fn2);
- }
- };
- exports.QuickJSAsyncContext = QuickJSAsyncContext;
- }
-});
-
-// .yarn/unplugged/@tootallnate-quickjs-emscripten-npm-0.23.0-a889ea7aeb/node_modules/@tootallnate/quickjs-emscripten/dist/runtime-asyncify.js
-var require_runtime_asyncify = __commonJS({
- ".yarn/unplugged/@tootallnate-quickjs-emscripten-npm-0.23.0-a889ea7aeb/node_modules/@tootallnate/quickjs-emscripten/dist/runtime-asyncify.js"(exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.QuickJSAsyncRuntime = void 0;
- var _1 = require_dist10();
- var context_asyncify_1 = require_context_asyncify();
- var runtime_1 = require_runtime();
- var types_1 = require_types2();
- var QuickJSAsyncRuntime = class extends runtime_1.QuickJSRuntime {
- /** @private */
- constructor(args) {
- super(args);
- }
- newContext(options = {}) {
- if (options.intrinsics && options.intrinsics !== types_1.DefaultIntrinsics) {
- throw new Error("TODO: Custom intrinsics are not supported yet");
- }
- const ctx = new _1.Lifetime(this.ffi.QTS_NewContext(this.rt.value), void 0, (ctx_ptr) => {
- this.contextMap.delete(ctx_ptr);
- this.callbacks.deleteContext(ctx_ptr);
- this.ffi.QTS_FreeContext(ctx_ptr);
- });
- const context = new context_asyncify_1.QuickJSAsyncContext({
- module: this.module,
- ctx,
- ffi: this.ffi,
- rt: this.rt,
- ownedLifetimes: [],
- runtime: this,
- callbacks: this.callbacks
- });
- this.contextMap.set(ctx.value, context);
- return context;
- }
- setModuleLoader(moduleLoader, moduleNormalizer) {
- super.setModuleLoader(moduleLoader, moduleNormalizer);
- }
- /**
- * Set the max stack size for this runtime in bytes.
- * To remove the limit, set to `0`.
- *
- * Setting this limit also adjusts the global `ASYNCIFY_STACK_SIZE` for the entire {@link QuickJSAsyncWASMModule}.
- * See the [pull request](https://github.com/justjake/quickjs-emscripten/pull/114) for more details.
- */
- setMaxStackSize(stackSize) {
- return super.setMaxStackSize(stackSize);
- }
- };
- exports.QuickJSAsyncRuntime = QuickJSAsyncRuntime;
- }
-});
-
-// .yarn/unplugged/@tootallnate-quickjs-emscripten-npm-0.23.0-a889ea7aeb/node_modules/@tootallnate/quickjs-emscripten/dist/module-asyncify.js
-var require_module_asyncify = __commonJS({
- ".yarn/unplugged/@tootallnate-quickjs-emscripten-npm-0.23.0-a889ea7aeb/node_modules/@tootallnate/quickjs-emscripten/dist/module-asyncify.js"(exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.QuickJSAsyncWASMModule = void 0;
- var errors_1 = require_errors();
- var lifetime_1 = require_lifetime();
- var module_1 = require_module();
- var runtime_asyncify_1 = require_runtime_asyncify();
- var QuickJSAsyncWASMModule = class extends module_1.QuickJSWASMModule {
- /** @private */
- constructor(module3, ffi) {
- super(module3, ffi);
- this.ffi = ffi;
- this.module = module3;
- }
- /**
- * Create a new async runtime inside this WebAssembly module. All runtimes inside a
- * module are limited to a single async call at a time. For multiple
- * concurrent async actions, create multiple WebAssembly modules.
- */
- newRuntime(options = {}) {
- const rt = new lifetime_1.Lifetime(this.ffi.QTS_NewRuntime(), void 0, (rt_ptr) => {
- this.callbacks.deleteRuntime(rt_ptr);
- this.ffi.QTS_FreeRuntime(rt_ptr);
- });
- const runtime = new runtime_asyncify_1.QuickJSAsyncRuntime({
- module: this.module,
- ffi: this.ffi,
- rt,
- callbacks: this.callbacks
- });
- (0, module_1.applyBaseRuntimeOptions)(runtime, options);
- if (options.moduleLoader) {
- runtime.setModuleLoader(options.moduleLoader);
- }
- return runtime;
- }
- /**
- * A simplified API to create a new [[QuickJSRuntime]] and a
- * [[QuickJSContext]] inside that runtime at the same time. The runtime will
- * be disposed when the context is disposed.
- */
- newContext(options = {}) {
- const runtime = this.newRuntime();
- const lifetimes = options.ownedLifetimes ? options.ownedLifetimes.concat([runtime]) : [runtime];
- const context = runtime.newContext({ ...options, ownedLifetimes: lifetimes });
- runtime.context = context;
- return context;
- }
- /** Synchronous evalCode is not supported. */
- evalCode() {
- throw new errors_1.QuickJSNotImplemented("QuickJSWASMModuleAsyncify.evalCode: use evalCodeAsync instead");
- }
- /**
- * One-off evaluate code without needing to create a [[QuickJSRuntimeAsync]] or
- * [[QuickJSContextSync]] explicitly.
- *
- * This version allows for asynchronous Ecmascript module loading.
- *
- * Note that only a single async action can occur at a time inside the entire WebAssembly module.
- * **Multiple concurrent async actions is an error.**
- *
- * See the documentation for [[QuickJSWASMModule.evalCode]] for more details.
- */
- evalCodeAsync(code, options) {
- return lifetime_1.Scope.withScopeAsync(async (scope) => {
- const vm = scope.manage(this.newContext());
- (0, module_1.applyModuleEvalRuntimeOptions)(vm.runtime, options);
- const result = await vm.evalCodeAsync(code, "eval.js");
- if (options.memoryLimitBytes !== void 0) {
- vm.runtime.setMemoryLimit(-1);
- }
- if (result.error) {
- const error = vm.dump(scope.manage(result.error));
- throw error;
- }
- const value = vm.dump(scope.manage(result.value));
- return value;
- });
- }
- };
- exports.QuickJSAsyncWASMModule = QuickJSAsyncWASMModule;
- }
-});
-
-// .yarn/unplugged/@tootallnate-quickjs-emscripten-npm-0.23.0-a889ea7aeb/node_modules/@tootallnate/quickjs-emscripten/dist/generated/ffi.WASM_RELEASE_SYNC.js
-var require_ffi_WASM_RELEASE_SYNC = __commonJS({
- ".yarn/unplugged/@tootallnate-quickjs-emscripten-npm-0.23.0-a889ea7aeb/node_modules/@tootallnate/quickjs-emscripten/dist/generated/ffi.WASM_RELEASE_SYNC.js"(exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.QuickJSFFI = void 0;
- var QuickJSFFI = class {
- constructor(module3) {
- this.module = module3;
- this.DEBUG = false;
- this.QTS_Throw = this.module.cwrap("QTS_Throw", "number", ["number", "number"]);
- this.QTS_NewError = this.module.cwrap("QTS_NewError", "number", ["number"]);
- this.QTS_RuntimeSetMemoryLimit = this.module.cwrap("QTS_RuntimeSetMemoryLimit", null, ["number", "number"]);
- this.QTS_RuntimeComputeMemoryUsage = this.module.cwrap("QTS_RuntimeComputeMemoryUsage", "number", ["number", "number"]);
- this.QTS_RuntimeDumpMemoryUsage = this.module.cwrap("QTS_RuntimeDumpMemoryUsage", "number", ["number"]);
- this.QTS_RecoverableLeakCheck = this.module.cwrap("QTS_RecoverableLeakCheck", "number", []);
- this.QTS_BuildIsSanitizeLeak = this.module.cwrap("QTS_BuildIsSanitizeLeak", "number", []);
- this.QTS_RuntimeSetMaxStackSize = this.module.cwrap("QTS_RuntimeSetMaxStackSize", null, ["number", "number"]);
- this.QTS_GetUndefined = this.module.cwrap("QTS_GetUndefined", "number", []);
- this.QTS_GetNull = this.module.cwrap("QTS_GetNull", "number", []);
- this.QTS_GetFalse = this.module.cwrap("QTS_GetFalse", "number", []);
- this.QTS_GetTrue = this.module.cwrap("QTS_GetTrue", "number", []);
- this.QTS_NewRuntime = this.module.cwrap("QTS_NewRuntime", "number", []);
- this.QTS_FreeRuntime = this.module.cwrap("QTS_FreeRuntime", null, ["number"]);
- this.QTS_NewContext = this.module.cwrap("QTS_NewContext", "number", ["number"]);
- this.QTS_FreeContext = this.module.cwrap("QTS_FreeContext", null, ["number"]);
- this.QTS_FreeValuePointer = this.module.cwrap("QTS_FreeValuePointer", null, ["number", "number"]);
- this.QTS_FreeValuePointerRuntime = this.module.cwrap("QTS_FreeValuePointerRuntime", null, ["number", "number"]);
- this.QTS_FreeVoidPointer = this.module.cwrap("QTS_FreeVoidPointer", null, ["number", "number"]);
- this.QTS_FreeCString = this.module.cwrap("QTS_FreeCString", null, ["number", "number"]);
- this.QTS_DupValuePointer = this.module.cwrap("QTS_DupValuePointer", "number", ["number", "number"]);
- this.QTS_NewObject = this.module.cwrap("QTS_NewObject", "number", ["number"]);
- this.QTS_NewObjectProto = this.module.cwrap("QTS_NewObjectProto", "number", ["number", "number"]);
- this.QTS_NewArray = this.module.cwrap("QTS_NewArray", "number", ["number"]);
- this.QTS_NewFloat64 = this.module.cwrap("QTS_NewFloat64", "number", ["number", "number"]);
- this.QTS_GetFloat64 = this.module.cwrap("QTS_GetFloat64", "number", ["number", "number"]);
- this.QTS_NewString = this.module.cwrap("QTS_NewString", "number", ["number", "number"]);
- this.QTS_GetString = this.module.cwrap("QTS_GetString", "number", ["number", "number"]);
- this.QTS_NewSymbol = this.module.cwrap("QTS_NewSymbol", "number", ["number", "number", "number"]);
- this.QTS_GetSymbolDescriptionOrKey = this.module.cwrap("QTS_GetSymbolDescriptionOrKey", "number", ["number", "number"]);
- this.QTS_IsGlobalSymbol = this.module.cwrap("QTS_IsGlobalSymbol", "number", ["number", "number"]);
- this.QTS_IsJobPending = this.module.cwrap("QTS_IsJobPending", "number", ["number"]);
- this.QTS_ExecutePendingJob = this.module.cwrap("QTS_ExecutePendingJob", "number", ["number", "number", "number"]);
- this.QTS_GetProp = this.module.cwrap("QTS_GetProp", "number", ["number", "number", "number"]);
- this.QTS_SetProp = this.module.cwrap("QTS_SetProp", null, ["number", "number", "number", "number"]);
- this.QTS_DefineProp = this.module.cwrap("QTS_DefineProp", null, ["number", "number", "number", "number", "number", "number", "boolean", "boolean", "boolean"]);
- this.QTS_Call = this.module.cwrap("QTS_Call", "number", ["number", "number", "number", "number", "number"]);
- this.QTS_ResolveException = this.module.cwrap("QTS_ResolveException", "number", ["number", "number"]);
- this.QTS_Dump = this.module.cwrap("QTS_Dump", "number", ["number", "number"]);
- this.QTS_Eval = this.module.cwrap("QTS_Eval", "number", ["number", "number", "string", "number", "number"]);
- this.QTS_Typeof = this.module.cwrap("QTS_Typeof", "number", ["number", "number"]);
- this.QTS_GetGlobalObject = this.module.cwrap("QTS_GetGlobalObject", "number", ["number"]);
- this.QTS_NewPromiseCapability = this.module.cwrap("QTS_NewPromiseCapability", "number", ["number", "number"]);
- this.QTS_TestStringArg = this.module.cwrap("QTS_TestStringArg", null, ["string"]);
- this.QTS_BuildIsDebug = this.module.cwrap("QTS_BuildIsDebug", "number", []);
- this.QTS_BuildIsAsyncify = this.module.cwrap("QTS_BuildIsAsyncify", "number", []);
- this.QTS_NewFunction = this.module.cwrap("QTS_NewFunction", "number", ["number", "number", "string"]);
- this.QTS_ArgvGetJSValueConstPointer = this.module.cwrap("QTS_ArgvGetJSValueConstPointer", "number", ["number", "number"]);
- this.QTS_RuntimeEnableInterruptHandler = this.module.cwrap("QTS_RuntimeEnableInterruptHandler", null, ["number"]);
- this.QTS_RuntimeDisableInterruptHandler = this.module.cwrap("QTS_RuntimeDisableInterruptHandler", null, ["number"]);
- this.QTS_RuntimeEnableModuleLoader = this.module.cwrap("QTS_RuntimeEnableModuleLoader", null, ["number", "number"]);
- this.QTS_RuntimeDisableModuleLoader = this.module.cwrap("QTS_RuntimeDisableModuleLoader", null, ["number"]);
- }
- };
- exports.QuickJSFFI = QuickJSFFI;
- }
-});
-
-// .yarn/unplugged/@tootallnate-quickjs-emscripten-npm-0.23.0-a889ea7aeb/node_modules/@tootallnate/quickjs-emscripten/dist/generated/emscripten-module.WASM_RELEASE_SYNC.js
-var require_emscripten_module_WASM_RELEASE_SYNC = __commonJS({
- ".yarn/unplugged/@tootallnate-quickjs-emscripten-npm-0.23.0-a889ea7aeb/node_modules/@tootallnate/quickjs-emscripten/dist/generated/emscripten-module.WASM_RELEASE_SYNC.js"(exports, module2) {
- "use strict";
- var QuickJSRaw = (() => {
- var _scriptDir = typeof document !== "undefined" && document.currentScript ? document.currentScript.src : void 0;
- if (typeof __filename !== "undefined")
- _scriptDir = _scriptDir || __filename;
- return function(QuickJSRaw2 = {}) {
- var a;
- a || (a = typeof QuickJSRaw2 !== "undefined" ? QuickJSRaw2 : {});
- var m, n;
- a.ready = new Promise(function(b, c) {
- m = b;
- n = c;
- });
- var p = Object.assign({}, a), t = "./this.program", u = "object" == typeof window, v = "function" == typeof importScripts, w = "object" == typeof process && "object" == typeof process.versions && "string" == typeof process.versions.node, x = "", y, z, A;
- if (w) {
- var fs8 = require("fs"), B = require("path");
- x = v ? B.dirname(x) + "/" : __dirname + "/";
- y = (b, c) => {
- var d = C(b);
- if (d)
- return c ? d : d.toString();
- b = b.startsWith("file://") ? new URL(b) : B.normalize(b);
- return fs8.readFileSync(b, c ? void 0 : "utf8");
- };
- A = (b) => {
- b = y(b, true);
- b.buffer || (b = new Uint8Array(b));
- return b;
- };
- z = (b, c, d) => {
- var e = C(b);
- e && c(e);
- b = b.startsWith("file://") ? new URL(b) : B.normalize(b);
- fs8.readFile(b, function(f, g) {
- f ? d(f) : c(g.buffer);
- });
- };
- !a.thisProgram && 1 < process.argv.length && (t = process.argv[1].replace(/\\/g, "/"));
- process.argv.slice(2);
- a.inspect = function() {
- return "[Emscripten Module object]";
- };
- } else if (u || v)
- v ? x = self.location.href : "undefined" != typeof document && document.currentScript && (x = document.currentScript.src), _scriptDir && (x = _scriptDir), 0 !== x.indexOf("blob:") ? x = x.substr(0, x.replace(/[?#].*/, "").lastIndexOf("/") + 1) : x = "", y = (b) => {
- try {
- var c = new XMLHttpRequest();
- c.open("GET", b, false);
- c.send(null);
- return c.responseText;
- } catch (f) {
- if (b = C(b)) {
- c = [];
- for (var d = 0; d < b.length; d++) {
- var e = b[d];
- 255 < e && (e &= 255);
- c.push(String.fromCharCode(e));
- }
- return c.join("");
- }
- throw f;
- }
- }, v && (A = (b) => {
- try {
- var c = new XMLHttpRequest();
- c.open("GET", b, false);
- c.responseType = "arraybuffer";
- c.send(null);
- return new Uint8Array(c.response);
- } catch (d) {
- if (b = C(b))
- return b;
- throw d;
- }
- }), z = (b, c, d) => {
- var e = new XMLHttpRequest();
- e.open("GET", b, true);
- e.responseType = "arraybuffer";
- e.onload = () => {
- if (200 == e.status || 0 == e.status && e.response)
- c(e.response);
- else {
- var f = C(b);
- f ? c(f.buffer) : d();
- }
- };
- e.onerror = d;
- e.send(null);
- };
- var aa = a.print || console.log.bind(console), D = a.printErr || console.warn.bind(console);
- Object.assign(a, p);
- p = null;
- a.thisProgram && (t = a.thisProgram);
- var E;
- a.wasmBinary && (E = a.wasmBinary);
- var noExitRuntime = a.noExitRuntime || true;
- "object" != typeof WebAssembly && F("no native wasm support detected");
- var G, H = false, I, J, K, L;
- function M() {
- var b = G.buffer;
- a.HEAP8 = I = new Int8Array(b);
- a.HEAP16 = new Int16Array(b);
- a.HEAP32 = K = new Int32Array(b);
- a.HEAPU8 = J = new Uint8Array(b);
- a.HEAPU16 = new Uint16Array(b);
- a.HEAPU32 = L = new Uint32Array(b);
- a.HEAPF32 = new Float32Array(b);
- a.HEAPF64 = new Float64Array(b);
- }
- var ba = [], ca = [], da = [];
- function ea() {
- var b = a.preRun.shift();
- ba.unshift(b);
- }
- var N = 0, O = null, P = null;
- function F(b) {
- if (a.onAbort)
- a.onAbort(b);
- b = "Aborted(" + b + ")";
- D(b);
- H = true;
- b = new WebAssembly.RuntimeError(b + ". Build with -sASSERTIONS for more info.");
- n(b);
- throw b;
- }
- var Q = "data:application/octet-stream;base64,", R;
- R = "data:application/octet-stream;base64,AGFzbQEAAAAB9QZxYAJ/fwBgA39/fwF/YAR/fn9/AX5gAn9/AX9gAX8Bf2AFf35/f38BfmADf39/AGAEf39/fwF/YAJ/fgF+YAF/AGAFf39/f38Bf2ABfAF8YAJ/fgBgAn9/AX5gAn9+AX9gA39/fgF/YAN/fn8BfmADf35/AGAGf35/f39/AX5gBn9/f39/fwF/YAR/f39/AGADf35/AX9gBn9+fn9/fwF+YAR/f35/AX9gA39+fgF+YAN/f38BfmAFf39/fn4Bf2AEf39/fgF/YAR/f35+AX9gBX9+fn5+AGABfwF+YAN/fn4Bf2AEf39/fwF+YAd/f39/f39/AX9gBX9/f39/AX5gAnx8AXxgAAF/YAV/f39/fwBgBX9+f35/AX9gBX9+fn9/AX5gAX4Bf2AEf35+fwBgB39+f35+fn8Bf2AIf39/f39/f38Bf2AFf35+fn8Bf2AGf35/fn5/AX9gBH9+f34BfmAEf35/fwBgBH9+f34AYAZ/f39/f38BfmAEf35+fwF/YAl/f39/f39/f38Bf2AEf35+fwF+YAR/fn9/AX9gA39+fgBgA35/fwF/YAV/fn5/fwBgA39/fgF+YAd/fn9/f39/AX5gAABgA39/fgBgBH9+f34Bf2AFf39+f38Bf2AEf35+fgF/YAd/f39/f39/AGACfH8BfGABfAF/YAN8fH8BfGACf38BfGAEf39+fwBgBH9+fn4BfmABfgF+YAJ/fAF/YAZ/fH9/f38Bf2AAAXxgBX9+f35/AX5gBn9/fn5+fgF/YAJ+fwBgAn98AGAEf39+fwF+YAV/f39/fgF+YAd/fn5+f39/AX5gBH5+fn4Bf2AHf39/f39/fgF+YAp/f39/f39/f39/AX9gB39/fn5/f38Bf2AFf3x/f38BfmACfn8Bf2AGfH9/f39/AGAFf35/f38AYAV/f35/fwBgBn9+fn5+fwF/YAV/f35+fwF/YAZ/fn9/f38Bf2ADf3x/AX9gBX9+f39/AX9gBX9/fn5+AX5gBX9+fn5+AX9gBn9/fn5/fwF/YAd/f39+fn5/AX9gBH9/f34BfmACfH8Bf2AGf39/f39/AGAIf39/f39/f38AYAN/fnwBfmAAAX5gAnx8AX9gAn5+AXxgAX8BfGADfn5+AX9gA39/fABgCH9+fn5+f35+AX5gCX9/f39/f39/fwACWw8B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rgitCKcIqAimCKUIpAj0B44JjQmKCYgJjAnwB/EH7gfrB+QH4gfhB9MHwQeaB/EEvAmbCZoJmQmYCZcJlgmVCZQJkwmSCZEJiwntCOwInQicCJsImgiZCKAFmAiXCJYIlQiUCJMIkQiQCI8IjgiNCIwIiwiKCIkIiAiHCIYI6QOFCOkDhAiDCIIIgQieCKEIoAifCKII2QP/B/4HkQeQB5kHmAeWB5UHlAeTB5IH4AffB94H6QPdB6AF3AfbB9oH2AerCKoIqQj/BooHiQeIB4cHhgeFB4QHgweCB4EHgAfoB4sHjweOB5sHpAehB6MHogefB54HnQecB6UH5wfmB+UH/gHsB+kH7QfvB/IH9QbPBPQG8wbyBvEGyATwBu8G9wbRBPYG9gf1B/sH+gf5B/gH/QeoCeMGpwnmBqYJpQmkCaMJ4QbfBsYEogmhCaAJsQafCZ4JnQmwBrIJsQmwCa8JrgmtCawJqwmqCbgJnQO3CbYJtQm0CbMJxgnJB8gHxQnECcMJwgnWA8EJwAn3BPgEvwm+CbsJugm5CckJyAnHCdAJzwm9BLwEzgnNCcwJywnKCbQG1AnTCdIJ0Qm4BrcGtga1BroGuQa9BrwGuwbSBtEG0AbPBs4GzQbMBssGygbJBsgGxwbGBsUGxAbDBsEGwAa/Br4G0wbcBoAJ+gj7CNsGgwmECYEJnQT+CPkI6wPMAtoG9QjxCO8I2Qb4CPQI8AiCCf8I/QiXAqcD1gnyCPwI2AbXBtYG1QbUBugG5wblBuQG4gbgBt4G3QbrBuoG6QbtBuwG7gapB6cHpgfPB4EF1weABc4HzQfMB8sHxwfGB8UHxAfDB8IHwAe/B9IH0AfWB9QHtAezB7EHsAevB64HrQesB6sHqge+B70HvAe7B7oHuQe4B7cHtge1B4cJhQmGCdgD8wgK15YXyAk1AQF/AkAgAUIgiKdBdUkNACABpyICIAIoAgAiAkEBazYCACACQQFKDQAgACgCECABEJYECwtNAQJ/IAAoAkAiAkGAAmohAyACKAKcAiAAKAIERwRAIANBwgEQESADIAAoAgQQHSACIAAoAgQ2ApwCCyACIAIoAoQCNgKYAiADIAEQEQsmAQF/IwBBEGsiAiQAIAIgAToADyAAIAJBD2pBARByIAJBEGokAAv/FwIGfwJ+IwBBEGsiAiQAAn8CQCAAKAIA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NwMgIABBgH82AhAMAwsgACACQQxqIAJBCGogBkEAEOoEIgFFDQAgACABNgIgIAIoAgghBSAAQQA2AiggACAFNgIkAkAgAUElSQ0AIAFBLU0EQCAAKAJAIgMtAG5BAXENASABQS1HDQMgAy8BbCIGQQFxDQEgBkGA/gNxQYAGRw0DIAMoAmQNAyADKAIEIgNFDQMgAy0AbEEBcQ0BDAMLIAFBLkcNAiAAKAJEDQAgACgCQCIDLwFsIgZBAnENACAGQYD+A3FBgAZHDQIgAygCZA0CIAMoAgQiA0UNAiADLQBsQQJxRQ0CCyAFBEAgAEGDfzYCECAAQQE2AigMAwsgBCABQdQAazYCAAwCCyAEQap/NgIADAULIARBg382AgALIAAgAigCDDYCOEEADAQLIABBATYCMCAAIANBAWo2AggLIAIoAgwhAQwACwALQX8LIQEgAkEQaiQAIAELFQAgAUHeAU4EQCAAKAIQIAEQ6AULC7oHAgZ/AX4jAEEgayIHJABCgICAgOAAIQsCQAJAAkACQAJAAkACQAJAAkACQCABQiCIpyIGQQFqDggDBQUAAQUFCQILIAAgAkGH1AAQjwEMBgsgACACQff4ABCPAQwFCyAGQXlGDQEMAgsgAachBgwCCyABpyEGIAJBAEgEQCACQf////8HcSIFIAYpAgQiC6dB/////wdxTw0BIAZBEGohAiAAAn8gC0KAgICACINQRQRAIAIgBUEBdGovAQAMAQsgAiAFai0AAAtB//8DcRCfAyELDAULIAJBMEcNACAGKQIEQv////8HgyELDAQLIAAgARCNBKciBkUNAgsgAkH/////B3EhCQNAIAYoAhAiBUEwaiEKIAUgBSgCGCACcUF/c0ECdGooAgAhBQJAA0AgBUUNASACIAogBUEBa0EDdCIFaiIIKAIERwRAIAgoAgBB////H3EhBQwBCwsgBigCFCAFaiEFAkACQAJAAkAgCCgCAEEedkEBaw4DAAECAwsgBSgCACICRQ0GIAIgAigCAEEBajYCACAAIAKtQoCAgIBwhCADQQBBABAvIQsMBwsgBSgCACgCECkDACILQoCAgIBwg0KAgICAwABRBEAgACACENkBDAULIAtCIIinQXVJDQYgC6ciACAAKAIAQQFqNgIADAYLIAAgBiACIAUgCBDIAkUNAgwDCyAFKQMAIgtCIIinQXVJDQQgC6ciACAAKAIAQQFqNgIADAQLAkAgBi0ABSIFQQRxRQ0AIAVBCHEEQCACQQBIBEAgBigCKCAJSwRAIAAgBq1CgICAgHCEIAkQsAEhCwwHCyAGLwEGQSBrQf//A3FB9f8DTw0FDAILIAYvAQZBFWtB//8DcUEKSw0BIAAgAhCeAyIFRQ0BQoCAgIDgAEKAgICAMCAFQQBIGyELDAULIAAoAhAoAkQgBi8BBkEYbGooAhQiBUUNACAFKAIUIggEQCAGIAYoAgBBAWo2AgAgACAGrUKAgICAcIQiASACIAMgCBEuACELIAAgARAPDAULIAUoAgAiBUUNACAGIAYoAgBBAWo2AgAgACAHIAatQoCAgIBwhCIBIAIgBREXACEFIAAgARAPIAVBAEgNAiAFRQ0AIActAABBEHEEQCAAIAcpAxgQDyAAIAcpAxAgA0EAQQAQLyELDAULIAcpAwghCwwECyAGKAIQKAIsIgYNAAtCgICAgDAhCyAERQ0CIAAgAhDHAgtCgICAgOAAIQsMAQtCgICAgDAhCwsgB0EgaiQAIAsLDQAgACABIAJBBBDOAgtfAQN/IwBBEGsiBCQAIAAoAgAhAyAEIAI2AgwgA0EDIAEgAkEAEPAFIAMgAygCECkDgAEgACgCDCAAKAIIIAAoAkAiAQR/IAEoAmhBAEdBAXQFQQALEMoCIARBEGokAAsMACAAQYACaiABECoLKwAgAUHeAU4EQCAAKAIQKAI4IAFBAnRqKAIAIgAgACgCAEEBajYCAAsgAQspACAAIAEgAiADQoCAgIAwQoCAgIAwIARBgM4AchBtIQIgACADEA8gAgsZACAAKAIAIAEQGCEBIABBQGsoAgAgARA5Cy0BAX8CQCAAKAIAIgFFDQAgACgCECIARQ0AIAEoAgAgAEEAIAEoAgQRAQAaCwtcAQF/IABBQGsoAgAiAxDmAkUEQEF/DwsgAkEASARAIAMQMiECCyAAIAFB/wFxEBAgAEFAayIAKAIAIAIQOSAAKAIAKAKkAiACQRRsaiIAIAAoAgBBAWo2AgAgAgsmAQF/IwBBEGsiAiQAIAIgATYCDCAAIAJBDGpBBBByIAJBEGokAAs5ACABQQBOBEAgAEG2ARAQIABBQGsiACgCACABEDkgACgCACIAKAKkAiABQRRsaiAAKAKEAjYCBAsLMwEBfyACBEAgACEDA0AgAyABLQAAOgAAIANBAWohAyABQQFqIQEgAkEBayICDQALCyAACxgBAX4gASkDACEDIAEgAjcDACAAIAMQDwsXACAAIAEgAkKAgICAMCADIARBAhDYAQvABQICfgZ/IwBB4ABrIgkkACADQQAgA0EAShshCwNAIAogC0ZFBEAgACACIApBBHRqIgMoAgAQtAUhBiADLQAEIQdCgICAgDAhBAJAAkACQAJAAkACQAJAAkACQAJAIAMtAAUOCgECAgUHAwQIBQAGCyAAIAMoAggQtAUhCAJ+AkACQAJAIAMoAgxBAWoOAwIAAQkLIAAgACkDwAEiBCAIIARBABAUDAILIAAgACgCKCkDECIEIAggBEEAEBQMAQsgACABIAggAUEAEBQLIQQgACAIEBMgBkHQAUYEQEEBIQcMCAsgBkHZAUcNB0EAIQcMBwsCQCAGQdABRgRAQQEhBwwBCyAGQdkBRw0AQQAhBwsgACABIAZBAiADIAcQlQMaDAcLQoCAgIAwIQUgAygCCARAIAkgAygCADYCECAJQSBqIghBwABBzDwgCUEQahBOGiAAIAMoAgggCEEAQQpBCCADLQAFQQJGGyADLgEGEIIBIQULIAMoAgwEQCAJIAMoAgA2AgAgCUEgaiIIQcAAQcU8IAkQThogACADKAIMIAhBAUELQQkgAy0ABUECRhsgAy4BBhCCASEECyAAIAEgBkKAgICAMCAFIAQgB0GAOnIQbRogACAFEA8gACAEEA8MBgsgAykDCCIEQoCAgIAIfEL/////D1gEQCAEQv////8PgyEEDAULQoCAgIDAfiAEub0iBEKAgICAwIGA/P8AfSAEQv///////////wCDQoCAgICAgID4/wBWGyEEDAQLQoCAgIDAfiADKQMIIgRCgICAgMCBgPz/AH0gBEL///////////8Ag0KAgICAgICA+P8AVhshBAwDCyAAIAEgBkECIAMgBxCVAxoMAwsQAQALIAM1AgghBAsgACABIAYgBCAHEBkaCyAAIAYQEyAKQQFqIQoMAQsLIAlB4ABqJAALMgEBfwJAIAFCIIinQXVJDQAgAaciAiACKAIAIgJBAWs2AgAgAkEBSg0AIAAgARCWBAsLCwAgAEGAMUEAEBULogICAn4BfwJAAkACQAJAAkACQAJAAkACQAJAAkBBByABQiCIpyIEIARBB2tBbkkbQQtqDhMEAgMIBgAAAAAAAQUHAAAAAAEFAAsgAEGVMEEAEBVCgICAgOAADwsgBEF1SQ0IIAGnIgAgACgCAEEBajYCAAwICyAAQSEQdiECDAYLIABBIhB2IQIMBQsgAEEkEHYhAgwECyAAQQQQdiECDAMLIAAgAEEFEHYiAkEwIAGnKQIEQv////8Hg0EAEBkaDAILIABBBhB2IQIMAQsgAEEHEHYhAgtCgICAgOAAIQMgAkKAgICAcINCgICAgOAAUgR+IARBdU8EQCABpyIEIAQoAgBBAWo2AgALIAAgAiABENsBIAIFQoCAgIDgAAsPCyABC9kBAgJ/AX5BfyECAkACQAJAAkACQAJAAkACQCABQiCIpyIDQQtqDhIHBwcFAgUFBQUFBAABAQEFBQYFCyABp0EARw8LIAGnDwsgAacpAgQhBCAAIAEQDyAEQv////8Hg0IAUg8LAAsgAacsAAUhAiAAIAEQDyACQQBODwsgA0EHa0FtTQRAIAFCgICAgMCBgPz/AHxC////////////AINCAX1CgICAgICAgPj/AFQPCyAAIAEQD0EBIQILIAIPCyABpygCDCECIAAgARAPIAJB/////wdqQX5JC6gEAQt/IAAoAgAhBSMAQRBrIgggAjYCDEF/IQkCQANAAkAgCCACIgNBBGoiAjYCDCADKAIAIgdBf0YNACAAKAIEIQoDQCABIgQgCk4NAyAEIAQgBWoiDC0AACIGQQJ0Ig1BgLgBai0AAGoiASAKSg0DIAZBwgFGBEAgDCgAASEJDAELCyAGIAdHBEAgBiAHQf8BcUYgBiAHQQh2Qf8BcUZyIAYgB0EQdkH/AXFGckUgB0EYdiAGR3EgBkUgB0GAAklycg0DIAAgBjYCEAsgBEEBaiEEAkACQAJAAkACQAJAAkACQCANQYO4AWotAABBBWsOGAAJAAkJAQkJAQkJAQEBAgICAgQFBgcJAwkLIAQgBWotAAAhBCAIIANBCGoiAjYCDCADKAIEIgNBf0YEQCAAIAQ2AhQMCQsgAyAERg0IDAkLIAQgBWovAAAhBCAIIANBCGoiAjYCDCADKAIEIgNBf0YEQCAAIAQ2AhQMCAsgAyAERg0HDAgLIAAgBCAFaigAADYCGAwGCyAAIAQgBWoiAygAADYCGCAAIAMvAAQ2AhwMBQsgACAEIAVqKAAANgIgDAQLIAAgBCAFaiIDKAAANgIgIAAgAy0ABDYCHAwDCyAAIAQgBWoiAygAADYCICAAIAMvAAQ2AhwMAgsgACAEIAVqIgMoAAA2AiAgACADKAAENgIYIAAgAy0ACDYCHAwBCwsgACAJNgIMIAAgATYCCEEBIQsLIAsLCwAgACABQQAQjgQLJAEBfyAAKAIQIgJBEGogASACKAIAEQMAIgFFBEAgABB8CyABCyYBAX8jAEEQayICJAAgAiABOwEOIAAgAkEOakECEHIgAkEQaiQACykBAX8gAgRAIAAhAwNAIAMgAToAACADQQFqIQMgAkEBayICDQALCyAACz8BAX8jAEEQayICJAACfyABIAAoAhBHBEAgAiABNgIAIABBoJgBIAIQFkF/DAELIAAQEgshACACQRBqJAAgAAsLACAAIAFBARDmBQvDCgIFfw9+IwBB4ABrIgUkACAEQv///////z+DIQwgAiAEhUKAgICAgICAgIB/gyEKIAJC////////P4MiDUIgiCEOIARCMIinQf//AXEhBwJAAkAgAkIwiKdB//8BcSIJQf//AWtBgoB+TwRAIAdB//8Ba0GBgH5LDQELIAFQIAJC////////////AIMiC0KAgICAgIDA//8AVCALQoCAgICAgMD//wBRG0UEQCACQoCAgICAgCCEIQoMAgsgA1AgBEL///////////8AgyICQoCAgICAgMD//wBUIAJCgICAgICAwP//AFEbRQRAIARCgICAgICAIIQhCiADIQEMAgsgASALQoCAgICAgMD//wCFhFAEQCACIAOEUARAQoCAgICAgOD//wAhCkIAIQEMAwsgCkKAgICAgIDA//8AhCEKQgAhAQwCCyADIAJCgICAgICAwP//AIWEUARAIAEgC4QhAkIAIQEgAlAEQEKAgICAgIDg//8AIQoMAwsgCkKAgICAgIDA//8AhCEKDAILIAEgC4RQBEBCACEBDAILIAIgA4RQBEBCACEBDAILIAtC////////P1gEQCAFQdAAaiABIA0gASANIA1QIgYbeSAGQQZ0rXynIgZBD2sQZ0EQIAZrIQYgBSkDWCINQiCIIQ4gBSkDUCEBCyACQv///////z9WDQAgBUFAayADIAwgAyAMIAxQIggbeSAIQQZ0rXynIghBD2sQZyAGIAhrQRBqIQYgBSkDSCEMIAUpA0AhAwsgA0IPhiILQoCA/v8PgyICIAFCIIgiBH4iECALQiCIIhMgAUL/////D4MiAX58Ig9CIIYiESABIAJ+fCILIBFUrSACIA1C/////w+DIg1+IhUgBCATfnwiESAMQg+GIhIgA0IxiIRC/////w+DIgMgAX58IhQgDyAQVK1CIIYgD0IgiIR8Ig8gAiAOQoCABIQiDH4iFiANIBN+fCIOIBJCIIhCgICAgAiEIgIgAX58IhAgAyAEfnwiEkIghnwiF3whASAHIAlqIAZqQf//AGshBgJAIAIgBH4iGCAMIBN+fCIEIBhUrSAEIAQgAyANfnwiBFatfCACIAx+fCAEIAQgESAVVK0gESAUVq18fCIEVq18IAMgDH4iAyACIA1+fCICIANUrUIghiACQiCIhHwgBCACQiCGfCICIARUrXwgAiACIBAgElatIA4gFlStIA4gEFatfHxCIIYgEkIgiIR8IgJWrXwgAiACIA8gFFStIA8gF1atfHwiAlatfCIEQoCAgICAgMAAg1BFBEAgBkEBaiEGDAELIAtCP4ghAyAEQgGGIAJCP4iEIQQgAkIBhiABQj+IhCECIAtCAYYhCyADIAFCAYaEIQELIAZB//8BTgRAIApCgICAgICAwP//AIQhCkIAIQEMAQsCfiAGQQBMBEBBASAGayIHQf8ATQRAIAVBMGogCyABIAZB/wBqIgYQZyAFQSBqIAIgBCAGEGcgBUEQaiALIAEgBxCOAiAFIAIgBCAHEI4CIAUpAzAgBSkDOIRCAFKtIAUpAyAgBSkDEISEIQsgBSkDKCAFKQMYhCEBIAUpAwAhAiAFKQMIDAILQgAhAQwCCyAEQv///////z+DIAatQjCGhAsgCoQhCiALUCABQgBZIAFCgICAgICAgICAf1EbRQRAIAogAkIBfCIBUK18IQoMAQsgCyABQoCAgICAgICAgH+FhFBFBEAgAiEBDAELIAogAiACQgGDfCIBIAJUrXwhCgsgACABNwMAIAAgCjcDCCAFQeAAaiQACyEAIAAgASACQoCAgIAwIAMgBEECENgBIQIgACABEA8gAgumAQEEfyAAQQA2AgQgAVAEQCAAQYCAgIB4NgIIIABBABBBGkEADwsCQCABQv////8PWARAIABBARBBDQEgACgCECABIAGnZyICrYY+AgAg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IAMQ2QEMAgtBACEEIAItAAUiBUEEcUUNACAFQQhxBEAgA0EATg0BIANB/////wdxIgMgAigCKCIFSSEEIAFFIAMgBU9yDQEgAUKAgICAMDcDGCABQoCAgIAwNwMQIAFBBzYCACABIAAgAq1CgICAgHCEIAMQsAE3AwgMAwsgACgCECgCRCACLwEGQRhsaigCFCIFRQ0AIAUoAgAiBUUNACAAIAEgAq1CgICAgHCEIAMgBREXACEECyAEDwtBfw8LQQELoQQBAn8CQAJAIAFCgICAgHBUIAJC/////w9Wcg0AIAKnIgQgAaciAygCKE8NAAJAAkACQAJAAkACQAJAAkACQAJAAkAgAy8BBkECaw4eAAsLCwsLAAsLCwsLCwsLCwsLCwIBAgMEBQYHCAkKCwsgAygCJCAEQQN0aikDACIBQiCIp0F1SQ0LIAGnIgAgACgCAEEBajYCACABDwsgAygCJCAEajAAAEL/////D4MPCyADKAIkIARqMQAADwsgAygCJCAEQQF0ajIBAEL/////D4MPCyADKAIkIARBAXRqMwEADwsgAygCJCAEQQJ0ajUCAA8LIAMoAiQgBEECdGooAgAiAEEATgRAIACtDwtCgICAgMB+IAC4vSIBQoCAgIDAgYD8/wB9IAFC////////////AINCgICAgICAgPj/AFYbDwsgACADKAIkIARBA3RqKQMAEIcCDwsgACADKAIkIARBA3RqKQMAEPsDDwtCgICAgMB+IAMoAiQgBEECdGoqAgC7vSIBQoCAgIDAgYD8/wB9IAFC////////////AINCgICAgICAgPj/AFYbDwtCgICAgMB+IAMoAiQgBEEDdGopAwAiAUKAgICAwIGA/P8AfSABQv///////////wCDQoCAgICAgID4/wBWGw8LIAAgAhAxIQMgACACEA8gA0UEQEKAgICA4AAPCyAAIAEgAyABQQAQFCEBIAAgAxATCyABCyoBAX8jAEEQayIEJAAgBCADNgIMIAAgASACIAMQywIhACAEQRBqJAAgAAuMAQECfyABKAJ8IgRBgIAETgRAIABBjTpBABBGQX8PC0F/IQMgACABQfQAakEQIAFB+ABqIARBAWoQeAR/QX8FIAEgASgCfCIDQQFqNgJ8IAEoAnQgA0EEdGoiA0IANwIAIANCADcCCCADIAAgAhAYNgIA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AwsNACAAIAEgARA/EJMCC20BAX8jAEGAAmsiBSQAIARBgMAEcSACIANMckUEQCAFIAFB/wFxIAIgA2siA0GAAiADQYACSSIBGxArGiABRQRAA0AgACAFQYACEFsgA0GAAmsiA0H/AUsNAAsLIAAgBSADEFsLIAVBgAJqJAALDAAgAEGAAmogARARC74BAgF+AX8CQAJAIAFCgICAgHCDQoCAgIAwUQRAIAAoAiggAkEDdGopAwAiA0IgiKdBdEsNAQwCCyAAIAFBOyABQQAQFCIDQoCAgIBwg0KAgICA4ABRBEAgAw8LIANC/////29WDQEgACADEA8gACABEIADIgRFBEBCgICAgOAADwsgBCgCKCACQQN0aikDACIDQiCIp0F1SQ0BCyADpyIEIAQoAgBBAWo2AgALIAAgAyACEEkhASAAIAMQDyABC3UBAX4gACABIAR+IAIgA358IANCIIgiAiABQiCIIgR+fCADQv////8PgyIDIAFC/////w+DIgF+IgVCIIggAyAEfnwiA0IgiHwgASACfiADQv////8Pg3wiAUIgiHw3AwggACAFQv////8PgyABQiCGhDcDAAtQAQF+AkAgA0HAAHEEQCABIANBQGqthiECQgAhAQwBCyADRQ0AIAIgA60iBIYgAUHAACADa62IhCECIAEgBIYhAQsgACABNwMAIAAgAjcDCAtVAQN/IAEgAkEFdSIESwRAIAAgBEECdGooAgAhAwsgAkEfcSICBH8gASAEQQFqIgRLBH8gACAEQQJ0aigCAAVBAAtBAXQgAkEfc3QgAyACdnIFIAMLC2QAAkACQCABQQBIDQAgACgCrAIgAUwNACAAKAKkAiABQRRsaiIAIAAoAgAgAmoiADYCACAAQQBIDQEgAA8LQYUpQa78AEHIqAFBlNUAEAAAC0GmjgFBrvwAQcuoAUGU1QAQAAALYAAgACABIAJCgICAgAh8Qv////8PWAR+IAJC/////w+DBUKAgICAwH4gArm9IgJCgICAgMCBgPz/AH0gAkL///////////8Ag0KAgICAgICA+P8AVhsLIANBh4ABEL0BCwwAIABBhvsAQQAQFQsLACAAIAFBARDBBQvSEAIMfwF+IwBBEGsiCiQAAkACQCABQv////9vWARAIAAQJAwBCyAGQYAwcSIORSAGIAZBCHYiEHEgEEF/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A6ciAiACKAIAQQFqNgIACyAAIAkgAyAGEMsFIQILIAZBggRxQYAERgRAIAogCSgCECIGQTBqNgIMQX8hByAAIAkgCkEMaiAGKAIwQRp2QT1xEJEDDQULIAIhBwwECyAMBEAgACAIKQMAEA8gA0IgiKdBdU8EQCADpyICIAIoAgBBAWo2AgALIAggAzcDAAsgBkGABHFFDQBBfyEHIAAgCSAKQQxqIAooAgwoAgBBGnZBPXEgBkECcXIQkQMNAwtBf0EBIAAgCSAKQQxqIBBBBXEiAEF/cyAKKAIMKAIAQRp2cSAAIAZxchCRAxshBwwCCyAAIAZB4ekAEG8hBwwBC0F/IQcLIApBEGokACAHC/8BAgJ/AXwjAEEQayIEJAACQCACQiCIpyIDQQJNBEAgASACp7c5AwBBACEADAELIANBB2tBbU0EQCABIAJCgICAgMCBgPz/AHw3AwBBACEADAELAn8gACACEI0BIgJCgICAgHCDQoCAgIDgAFEEQEQAAAAAAAD4fyEFQX8MAQsCfAJAAkBBByACQiCIpyIDIANBB2tBbkkbIgNBCmpBAk8EQCADQQdGDQIgAw0BIAKntwwDCyACp0EEaiAEQQhqELUFIAAgAhAPIAQrAwghBUEADAMLEAEACyACQoCAgIDAgYD8/wB8vwshBUEACyEAIAEgBTkDAAsgBEEQaiQAIAALXQECfyMAQRBrIgMkAAJAIAFBgIABcUUEQCABQYCAAnFFDQEgACgCECgCjAEiAUUNASABLQAoQQFxRQ0BCyADQQA2AgwgAEEEIAJBABCSBEF/IQQLIANBEGokACAEC8YJAgR/BX4jAEHwAGsiBiQAIARC////////////AIMhCQJAAkAgAVAiBSACQv///////////wCDIgpCgICAgICAwP//AH1CgICAgICAwICAf1QgClAbRQRAIANCAFIgCUKAgICAgIDA//8AfSILQoCAgICAgMCAgH9WIAtCgICAgICAwICAf1EbDQELIAUgCkKAgICAgIDA//8AVCAKQoCAgICAgMD//wBRG0UEQCACQoCAgICAgCCEIQQgASEDDAILIANQIAlCgICAgICAwP//AFQgCUKAgICAgIDA//8AURtFBEAgBEKAgICAgIAghCEEDAILIAEgCkKAgICAgIDA//8AhYRQBEBCgICAgICA4P//ACAC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IAAgAaciAkEAIAIoAgRB/////wdxEFEhAiAAKAIAIAEQDyACC7UCAQd/IwBBEGsiBSQAAkAgAEFAaygCACIBRQRADAELAkAgAQJ/IAEoAsgBIgQgASgCxAEiAkgEQCABKALMASEDIAQMAQsgBEEBaiIDIAJBA2xBAm0iAiACIANIGyIGQQN0IQIgACgCACEDAkAgASgCzAEiByABQdABakYEQCADQQAgAiAFQQxqEKgBIgNFDQMgAyABKALMASABKALIAUEDdBAfGgwBCyADIAcgAiAFQQxqEKgBIgNFDQILIAUoAgwhAiABIAM2AswBIAEgAkEDdiAGajYCxAEgASgCyAELQQFqNgLIASADIARBA3RqIgIgASgCvAE2AgAgAiABKALAATYCBCAAQbQBEBAgAEFAaygCACAEQf//A3EQFyABIAQ2ArwBDAELQX8hBAsgBUEQaiQAIAQLoQECA38BfiMAIQYCQCACQoCAgIBwVA0AIAKnIgUvAQZBMEcNACAFKAIgIQQLAn8gBiAAKAIQKAJ4SQRAIAAQ6QFBAAwBCyAELQARBEAgABC2AkEADAELQQAgACAEKQMIIgIgAyACQQAQFCIHQoCAgIBwgyICQoCAgIDgAFENABogAUKAgICAMCAHIAJCgICAgCBRGzcDACAECyEFIAYkACAFCxYAIAAgASACIAMgBCAFIAApAzAQ8QELKQEBfyMAQRBrIgIkACACIAA2AgwgAkEMaiABEJMEIQAgAkEQaiQAIAALngICA38BfiACIAEpAgQiB6dB/////wdxIANHckUEQCABIAEoAgBBAWo2AgAgAa1CgICAgJB/hA8LIAFBEGohBSAHQoCAgIAIg1AgAyACayIEQQBMckUEQCADIAIgAiADSBshBkEAIQMgAiEBA0AgASAGRkUEQCAFIAFBAXRqLwEAIANyIQMgAUEBaiEBDAELCyADQf//A3FBgAJPBEAgACAFIAJBAXRqIAQQ7gMPC0EAIQEgACAEQQAQ6gEiAEUEQEKAgICA4AAPCyAAQRBqIQMDQCABIARGRQRAIAEgA2ogBSABIAJqQQF0ai0AADoAACABQQFqIQEMAQsLIAMgBGpBADoAACAArUKAgICAkH+EDwsgACACIAVqIAQQhAMLugEBAn8CQAJAIAJC/////wdYBEAgACABIAKnQYCAgIB4chBx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IANBCGogAhDiA0UEQEEAIQQgASADKQMIIgJCgICAgICAgBBaBH4gAEGAIEEAEFBBfyEEQgAFIAILNwMACyADQRBqJAAgBAsRACAAIAEgASACIANBAhCKBAtTAQF/IAAoAhAiBEEQaiABIAIgBCgCCBEBACIBIAJFckUEQCAAEHwgAQ8LIAMEQCADIAEgACgCECgCDBEEACIAIAJrIgJBACAAIAJPGzYCAAsgAQvAAQAgAAJ/IAEoAggiAEH+////B04EQEEAIAJBAXENARpB/////wcgAEH+////B0cNARogASgCBEH/////B2oMAQtBACAAQQBMDQAaIABBH00EQEEAIAEoAhAgASgCDEECdGpBBGsoAgBBICAAa3YiAmsgAiABKAIEGwwBCyACQQFxRQRAQYCAgIB4Qf////8HIAEoAgQbDAELQQAgASgCECABKAIMIgIgAkEFdCAAaxBoIgJrIAIgASgCBBsLNgIACw0AIAAgASABED8QhQML+QECA34CfyMAQRBrIgUkAAJ+IAG9IgNC////////////AIMiAkKAgICAgICACH1C/////////+//AFgEQCACQjyGIQQgAkIEiEKAgICAgICAgDx8DAELIAJCgICAgICAgPj/AFoEQCADQjyGIQQgA0IEiEKAgICAgIDA//8AhAwBCyACUARAQgAMAQsgBSACQgAgA6dnQSBqIAJCIIinZyACQoCAgIAQVBsiBkExahBnIAUpAwAhBCAFKQMIQoCAgICAgMAAhUGM+AAgBmutQjCGhAshAiAAIAQ3AwAgACACIANCgICAgICAgICAf4OENwMIIAVBEGokAAu2AQEBfyMAQRBrIgMkAAJAAkAgAkEASARAIAEgAkH/////B3E2AgBBASECDAELIAAoAhAiACgCLCACTQ0BAn8CQCAAKAI4IAJBAnRqKAIAIgApAgRCgICAgICAgIBAg0KAgICAgICAgMAAUg0AIANBDGogABC9BUUNAEEBIAMoAgwiAEF/Rw0BGgtBACEAQQALIQIgASAANgIACyADQRBqJAAgAg8LQe/fAEGu/ABBvxhBryAQAAAL1QECAn8DfgJ/IAJFBEBCgICAgDAhBUEADAELIAAoAhAiAykDgAEhBSADQoCAgIAgNwOAAUF/CyEDAkAgACABQQYgAUEAEBQiB0KAgICAcIMiBkKA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BUEgahBGQX8MAQsCQCABKAIEIARODQAgASAENgIEIARB//8DSA0AIAUgAjYCBCAFIAM2AgAgAEGjkwEgBRBGQX8MAQsgASgCCCACQQF0aiIDLwEAIgZB//8DRwRAQQAgBCAGRg0BGiAFIAI2AhggBSAENgIUIAUgBjYCECAAQdSSASAFQRBqEEZBfwwBCyADIAQ7AQBBfyAAIAFBDGpBBCABQRRqIAEoAhBBAWoQeA0AGiABIAEoAhAiAEEBajYCECABKAIMIABBAnRqIAI2AgBBAAshAyAFQTBqJAAgAwsTACAAIAEgAiADIARBAEEAEPgBCzkAIABB/wBNBEAgAEEDdkH8////AXFBoIECaigCACAAdkEBcQ8LIABBfnFBjMAARiAAENIEQQBHcgtmAQF/An9BACAAKAIIIgIgAU8NABpBfyAAKAIMDQAaIAAoAhQgACgCACACQQNsQQF2IgIgASABIAJJGyIBIAAoAhARAQAiAkUEQCAAQQE2AgxBfw8LIAAgATYCCCAAIAI2AgBBAAsLrAECAX8BfiAAKQIEIgSnQf////8HcSEDAkACQCAEQoCAgIAIg1BFBEAgAiADIAIgA0obIQMgAEEQaiEAA0AgAiADRg0CIAAgAkEBdGovAQAgAUYNAyACQQFqIQIMAAsACyABQf8BSw0AIAIgAyACIANKGyEDIABBEGohACABQf8BcSEBA0AgAiADRg0BIAAgAmotAAAgAUYNAiACQQFqIQIMAAsAC0F/IQILIAILpgEBAX8jAEEQayIDJAAgAyACNwMIAkAgACABQYYBIAFBABAUIgJCgICAgHCDQoCAgIDgAFENACAAIAIQOARAIAAgAiABQQEgA0EIahAvIgJC/////29WIAJCgICAgLB/g0KAgICAIFFyDQEgACACEA8gAEGK0wBBABAVQoCAgIDgACECDAELIAAgAhAPIAAgASADIANBCGoQ8QQhAgsgA0EQaiQAIAILowECA38BfiAAQRBqIQIgASgCACIEQQFqIQMCQCAAKQIEIgVCgICAgAiDUEUEQCACIARBAXRqLwEAIgBBgPgDcUGAsANHIAMgBadB/////wdxTnINASACIANBAXRqLwEAIgJBgPgDcUGAuANHDQEgAEEKdEGA+D9xIAJB/wdxckGAgARqIQAgBEECaiEDDAELIAIgBGotAAAhAAsgASADNgIAIAALUQEDfwJAA0AgAUKAgICAcFQNASABpyICLwEGIgRBMEYEQCACKAIgIgJFDQIgAi0AEQRAIAAQtgJBfw8LIAIpAwAhAQwBCwsgBEECRiEDCyADCxIAIAAgASACIAMgBEHKABCkBAtOAQF/IAAoAgwiBEUEQEEADwsgACAAKAIIQf////8DQYGAgIB8IAEgAUGBgICAfEwbIgEgAUH/////A04bajYCCCAAIAIgAyAEQQAQqgMLJQAgACABIAAoAhAoAowBIgAEfyAAKAIoQQJ2QQFxBUEACxCWBQsfAQF/IAAoAgwiA0UEQEEADwsgACABIAIgA0EAEKoDC90BAgJ/An4CQCAAIAApAzBBDxBJIghCgICAgHCDQoCAgIDgAFENACAAIARBA3RBCGoQKSIGRQRAIAAgCBAPDAELIAYgAzsBBiAGIAQ6AAUgBiACOgAEIAYgATYCAEEAIQMgBEEAIARBAEobIQEDQCABIANHBEAgBSADQQN0IgRqKQMAIglCIIinQXVPBEAgCaciByAHKAIAQQFqNgIACyAEIAZqIAk3AwggA0EBaiEDDAELCyAIQoCAgIBwWgRAIAinIAY2AiALIAAgCEEvIAIQlgMgCA8LQoCAgIDgAAuDCwIHfwF+IwBBIGsiCSQAAkACQAJAAkACQAJAAn8CQAJAAkACQAJAIAFCIIinQQFqDgUDAgIAAQILIAAgAxAPIAAgAkHm0wAQjwFBfyEFDAoLIAAgAxAPIAAgAkHR+AAQjwFBfyEFDAkLIAAgARCNBKchBgwBCyABpyEGAkADQCAGKAIQIgdBMGohCCAHIAcoAhggAnFBf3NBAnRqKAIAIQUDQCAFRQRAIAYhB0EADAULIAIgCCAFQQFrQQN0IgdqIgUoAgRHBEAgBSgCAEH///8fcSEFDAELCyAGKAIUIAdqIQcgBSgCACIIQYCAgMB+cUGAgIDAAEYEQCAAIAcgAxAgDAULAkAgCEGAgICAAnEEQCAGLwEGQQJHDQEgAkEwRw0DIAAgBiADIAQQywUhBQwLCyAIQRp2QTBxIghBMEcEQCAIQSBHBEAgCEEQRw0IIAAgBygCBCABIAMgBBCLAyEFDAwLIAYvAQZBC0YNByAAIAcoAgAoAhAgAxAgDAYLIAAgBiACIAcgBRDIAkUNAQwJCwtB2YABQa78AEGPwgBBuNYAEAAAC0HK2ABBrvwAQZDCAEG41gAQAAALQQELIQUDQAJAAkAgBUUEQAJAIAYtAAUiBUEEcUUNAAJAIAVBCHEEQCACQQBIBEAgAkH/////B3EiBSAGKAIoTw0CIAYgB0cNBSAAIAEgBa0gAyAEENcBIQUMDQsgBi8BBkEVa0H//wNxQQpLDQIgACACEJ4DIghFDQJBfyEFIAhBAE4NCQwKCyAAKAIQKAJEIAYvAQZBGGxqKAIUIgVFDQEgBSgCGCIIBEAgBiAGKAIAQQFqNgIAIAAgBq1CgICAgHCEIgwgAiADIAEgBCAIES0AIQUgACAMEA8MCgsgBSgCACIFRQ0BIAYgBigCAEEBajYCACAAIAkgBq1CgICAgHCEIgwgAiAFERcAIQUgACAMEA8gBUEASA0JIAVFDQEgCS0AAEEQcQRAIAAgCSkDGCIMp0EAIAxCgICAgHCDQoCAgIAwUhsgASADIAQQiwMhBSAAIAkpAxAQDyAAIAkpAxgQDwwMCyAAIAkpAwgQDyAJLQAAQQJxRQ0HIAYgB0cNAyAAIAEgAiADQoCAgIAwQoCAgIAwQYDAABBtIQUMCQsgBi8BBkEVa0H//wNxQQtJDQcLIAYoAhAoAiwhBkEBIQUMAwsgBkUNAANAIAYoAhAiBUEwaiEKIAUgBSgCGCACcUF/c0ECdGooAgAhBQNAIAVFDQMgAiAKIAVBAWtBA3QiBWoiCCgCBEcEQCAIKAIAQf///x9xIQUMAQsLIAYoAhQgBWohCgJAIAgoAgAiBUEadkEwcSILQTBHBEAgC0EQRw0BIAAgCigCBCABIAMgBBCLAyEFDAsLQX8hBSAAIAYgAiAKIAgQyAJFDQEMCgsLIAVBgICAwABxDQEMBAsgBEGAgARxBEAgACADEA8gACACEMcCQX8hBQwICyAHRQRAIAAgAxAPIAAgBEGAMRBvIQUMCAsgBy0ABSIGQQFxRQRAIAAgAxAPIAAgBEH36AAQbyEFDAgLIAZBBHEEQAJAIAJBAE4NACAGQQhxRSAHLwEGQQJHcg0AIAcoAiggAkH/////B3FHDQAgACAHIAMgBBD9AyEFDAkLIAAgByACIANCgICAgDBCgICAgDAgBEGHzgByEIEEIQUMBgsgACAHIAJBBxB6IgJFDQYgAiADNwMADAILQQAhBQwACwALQQEhBQwECyAAIAMQDyAAIAQgAhDAAiEFDAMLIAAgACADEI0BIgEQD0F/IQUgAUKAgICAcINCgICAgOAAUQ0CIAAgBEGUIBBvIQUMAgsgACADEA8MAQsgACADEA9BfyEFCyAJQSBqJAAgBQsOACAAQQAgAUEQchDOAQthACAAIAEgAkKAgICACHxC/////w9YBH4gAkL/////D4MFQoCAgIDAfiACub0iAkKAgICAwIGA/P8AfSACQv///////////wCDQoCAgICAgID4/wBWGwsgAyAEQQdyEL0BC6sBAQh/IAAoAggiAyABKAIIIgJHBEBBf0EBIAIgA0obDwsgASgCDCIFIAAoAgwiBiAFIAUgBkgbIgJrIQggBiACayEJAn8DQEEAIAJBAWsiAkEASA0BGkEAIQNBACEEIAIgCWoiByAGSQRAIAAoAhAgB0ECdGooAgAhBAsgAiAIaiIHIAVJBEAgASgCECAHQQJ0aigCACEDCyADIARGDQALQX9BASADIARLGwsLigEBAn8gASgCECIDLQAQRQRAQQAPCwJAIAMoAgBBAUcEQCACBH8gAigCACADa0Ewa0EDdQVBAAshBCAAIAMQzgUiA0UEQEF/DwsgACgCECABKAIQEJECIAEgAzYCECACRQ0BIAIgAyAEQQN0akEwajYCAEEADwsgACgCECADEJAEIANBADoAEAtBAAt7AQF/QX8hBAJAIAAgARAlIgFCgICAgHCDQoCAgIDgAFENACAAIAGnIAIQ+QMhBCAAIAEQDyAEDQAgA0GAgAFxRQRAQQAhBCADQYCAAnFFDQEgACgCECgCjAEiAkUNASACLQAoQQFxRQ0BCyAAQawbQQAQFUF/IQQLIAQLNQAgACACQTAgAkEAEBQiAkKAgICAcINCgICAgOAAUQRAIAFBADYCAEF/DwsgACABIAIQmAELxAUBBH8jAEEgayIIJAACQAJAAkACQAJAIAFCgICAgHBUIAJC/////w9Wcg0AIAKnIQYCQAJAAkACQAJAAkACQAJAAkACQCABpyIFLwEGQQJrDh4ACgoKCgoJCgoKCgoKCgoKCgoKBwYGBQUEBAMDAgEKCyAFKAIoIgcgBksNCyAGIAdHDQkgBS0ABUEJcUEJRw0JIAUoAhAhBgNAAkAgBigCLCIHBEAgBygCECEGAkAgBy8BBkEBaw4CAAINCyAGLQARRQ0CDAwLIAAgBSADIAQQ/QMhBwwPCyAHLQAFQQhxDQALDAkLQX8hByAAIAhBGGogAxBuDQwgBSgCKCAGTQ0GIAUoAiQgBkEDdGogCCsDGDkDAAwLC0F/IQcgACAIQRhqIAMQbg0LIAUoAiggBk0NBSAFKAIkIAZBAnRqIAgrAxi2OAIADAoLIAAgCEEIaiADEMUFDQcgBSgCKCAGTQ0EIAUoAiQgBkEDdGogCCkDCDcDAAwJC0F/IQcgACAIQRRqIAMQmAENCSAFKAIoIAZNDQMgBSgCJCAGQQJ0aiAIKAIUNgIADAgLQX8hByAAIAhBFGogAxCYAQ0IIAUoAiggBk0NAkEBIQcgBSgCJCAGQQF0aiAIKAIUOwEADAgLQX8hByAAIAhBFGogAxCYAQ0HIAUoAiggBk0NASAFKAIkIAZqIAgoAhQ6AAAMBgtBfyEHIAAgCEEUaiADEMQFDQYgBSgCKCAGTQ0AIAUoAiQgBmogCCgCFDoAAAwFCyAAIARBlCAQbyEHDAULIAUoAiggBk0NACAAIAUoAiQgBkEDdGogAxAgDAMLIAAgAhAxIQUgACACEA8gBUUEQCAAIAMQDwwBCyAAIAEgBSADIAQQ0AEhByAAIAUQEwwDC0F/IQcMAgsgACAFKAIkIAZBA3RqIAMQIAtBASEHCyAIQSBqJAAgBwuuyAEDJn8HfgN8IwBBoAFrIgghDiAIJAAgACgCECEWQoCAgIDgACEuAkAgABB7DQACfwJAAkACQAJAAkAgAUL/////b1gEQCAGQQRxRQ0BIAGnIgcoAjwhCCAHKAIYIhooAiQhFCAaKAIgIhMoAjAhBiATLwEqIQ0gB0EANgI8IAcgFigCjAE2AhAgBygCICEVIAcoAjAhCiAHKAIkIREgFiAHQRBqIhI2AowBIBEgDUEDdGohHCAVIRcgCiENIAcoAgxFDQQMBQsgAaciGi8BBiIHQQ1GDQIgFigCRCAHQRhsaigCECIIDQELIABBm8wAQQAQFQwFCyAAIAEgAiAEIAUgBiAIERYAIS4MBAsgFigCeCAOIBooAiAiEy8BLiATLwEqIgtqIBMvASgiByAHQQAgBCAHSBsgBkECcUEBdhsiBmpBA3QiFWtLBEAgABDpAQwECyATLQAQIQogDiAOQcgAaiIXNgJMIA4gBDYCVCAOIAo2AlggDiAXNgJIIA4gATcDOCAaKAIkIRQgCCAVQQ9qQfD//wFxayIXJAAgBSEVIAYEQCAHIAQgByAEIAdIGyIIQQAgCEEAShsiCGsiFUEAIAcgFU8bIREDQAJAIAggCUYEQANAIAggEUYNAiAXIAhBA3RqQoCAgIAwNwMAIAhBAWohCAwACwALIAUgCUEDdCIVaikDACIBQiCIp0F1TwRAIAGnIgogCigCAEEBajYCAAsgFSAXaiABNwMAIBFBAWohESAJQQFqIQkMAQsLIA4gBzYCVCAXIRULIA4gFTYCQCAOIBcgBkEDdGoiETYCREEAIQgDQCAIIAtHBEAgESAIQQN0akKAgICAMDcDACAIQQFqIQgMAQsLIBMoAhQhCiAOIBYoAowBNgIwIBYgDkEwaiISNgKMASATKAIwIQYgESALQQN0aiIIIRwLQQAMAQtBAQshBwNAAkACQAJAAkAgB0UEQCAEQQN0IScgA0KAgICAcIMhMyARQQhqIR0gEUEQaiEeIBFBGGohHyAVQQhqISAgFUEQaiEhIBVBGGohIiASQRhqISggBkHIAWohGyAcQRhqISkgBkHAAWohGSACQiCIpyIkQX5xISogA0IgiKchKyAErSEyIAOnISUgDkEwaiEsIA5B6ABqISYgCCEHAkADQAJAIApBAWohDUIBIS5CgICAgDAhAQJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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ajYCAAsgCCABNwMIIAhBCGspAwAiAUIgiKdBdU8EQCABpyIHIAcoAgBBAWo2AgALIAggATcDECAIQRhqIQcM2wELIAggCEEIayIHKQMANwMAIAhBEGspAwAiAUIgiKdBdU8EQCABpyIKIAooAgBBAWo2AgALIAcgATcDACAIQQhqIQcM2gELIAggCEEIayIHKQMAIgE3AwAgByAIQRBrIgcpAwA3AwAgAUIgiKdBdU8EQCABpyIKIAooAgBBAWo2AgALIAcgATcDACAIQQhqIQcM2QELIAggCEEIayIHKQMAIgE3AwAgCEEQayIKKQMAIS0gCiAIQRhrIgopAwA3AwAgByAtNwMAIAFCIIinQXVPBEAgAaciByAHKAIAQQFqNgIACyAKIAE3AwAgCEEIaiEHDNgBCyAIIAhBCGsiBykDACIBNwMAIAhBEGsiCikDACEtIAogCEEYayIKKQMANwMAIAcgLTcDACAKIAhBIGsiBykDADcDACABQiCIp0F1TwRAIAGnIgogCigCAEEBajYCAAsgByABNwMAIAhBCGohBwzXAQsgCEEQayIHKQMAIQEgByAIQRhrIgcpAwA3AwAgByABNwMADNABCyAIQRhrIgcpAwAhASAHIAhBEGsiBykDADcDACAIQQhrIgopAwAhLSAKIAE3AwAgByAtNwMADM8BCyAIQSBrIgcpAwAhASAHIAhBGGsiBykDADcDACAIQRBrIgopAwAhLSAKIAhBCGsiCikDADcDACAHIC03AwAgCiABNwMADM4BCyAIQShrIgcpAwAhASAHIAhBIGsiBykDADcDACAIQRhrIgopAwAhLSAKIAhBEGsiCikDADcDACAHIC03AwAgCiAIQQhrIgcpAwA3AwAgByABNwMADM0BCyAIQQhrIgcpAwAhASAHIAhBEGsiBykDADcDACAIQRhrIgopAwAhLSAKIAE3AwAgByAtNwMADMwBCyAIQRBrIgcpAwAhASAHIAhBGGsiBykDADcDACAIQSBrIgopAwAhLSAKIAE3AwAgByAtNwMADMsBCyAIQRBrIgcpAwAhASAHIAhBGGsiBykDADcDACAIQSBrIgopAwAhLSAKIAhBKGsiCikDADcDACAHIC03AwAgCiABNwMADMoBCyAIQQhrIgcpAwAhASAHIAhBEGsiBykDADcDACAHIAE3AwAMyQEL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ayIHKQMAIgFC/////z9YBEAgAacMAQsgBiABECYLBH8gCQUgDSgAACAJakEEawshDSAGEHtFDXUMJwsgCkECaiEJAn8gCEEIayIHKQMAIgFC/////z9YBEAgAacMAQsgBiABECYLBH8gDSwAACAJakEBawUgCQshDSAGEHtFDXQMJgsgCkECaiEJAn8gCEEIayIHKQMAIgFC/////z9YBEAgAacMAQsgBiABECYLBH8gCQUgDSwAACAJakEBawshDSAGEHtFDXMMJQsgCCANIAooAAFqIBMoAhRrrUKAgICA0ACENwMAIApBBWohDSAIQQhqIQcMcgsgCigAASEHIAggCiATKAIUa0EFaq03AwAgByANaiENIAhBCGohBwxxCwJAIAhBCGsiBykDACIBQv////8PVg0AIAGnIgkgEygCGE8NACATKAIUIAlqIQ0McQsgBkH14QBBABBGDHQLIAhBCGsiDykDACItQiCIpyIHQQFqIglBBE1BAEEBIAl0QRlxG0UEQCAGIC0Q3AUhLQsCQCAGQRgQKSIJBEAgBkKAgICAIEEREEkiLkKAgICAcINCgICAgOAAUg0BIAYoAhAiB0EQaiAJIAcoAgQRAAALIC0hLgxlCyAJQQA2AhAgCSAtNwMAIAlBADYCCCAupyAJNgIgIAdBfnFBAkYNZSAtIgFCIIinIgdBdU8EQCAtpyILIAsoAgBBAWo2AgALA0AgBiABEIwCIgFCgICAgHCDIi9CgICAgCBSBEAgL0KAgICA4ABRDWYgBiAOQeAAaiAOQYABaiABp0EREI4BDWUgBiAOKAJgIA4oAoABIgsQWiALBEAgBiABEA8gB0F1SQ1lIC2nIgcgBygCAEEBajYCAAxlCyAGEHtFDQEMZQsLAkACQCAtpyIMLQAFQQhxRQ0AQQAhByAMKAIQIgsoAiAiEEEAIBBBAEobIRAgC0EwaiELA0AgByAQRg0CIAstAANBEHENASALQQhqIQsgB0EBaiEHDAALAAsgBiAOQeAAaiAOQYABaiAMQREQjgENZUEAIQcgDigCYCEKIA4oAoABIQkDQCAHIAlHBEAgBiAuIAogB0EDdGooAgRCgICAgCBBABDQARogB0EBaiEHDAELCyAGIAogCRBaDGYLIAlBATYCCCAJIAwoAig2AgwMZQtCgYCAgBAhLgJAIAhBCGspAwAi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/wB8v6G9IgFCgICAgMCBgPz/AH0gAUL///////////8Ag0KAgICAgICA+P8AVhs3AwAMSAsCfCAIQQhrIgcpAwAiLUIgiKciDCAIQRBrIgspAwAiLkIgiKciD3JFBEAgLcQgLsR+IgFCgICAgAh8QoCAgIAQWgRAIBItAChBBHFBACABQoCAgICAgIAQfUKBgICAgICAYFQbDQUgAbkMAgtEAAAAAAAAAIAgLSAuhEKAgICACINQIAFCAFJyRQ0BGiALIAFC/////w+DNwMADEkLIA9BB2tBbUsgDEEHa0FtS3INAyASLQAoQQRxDQMgLkKAgICAwIGA/P8AfL8gLUKAgICAwIGA/P8AfL+iCyE0IAtCgICAgMB+IDS9IgFCgICAgMCBgPz/AH0gAUL///////////8Ag0KAgICAgICA+P8AVhs3AwAMRwsgCEEIayIHKQMAIgEgCEEQayILKQMAIi2EQv////8PVg0BIBItAChBBHENASALAn4gLae3IAGnt6MiNL0iAQJ/IDSZRAAAAAAAAOBBYwRAIDSqDAELQYCAgIB4CyIIt71RBEAgCK0MAQtCgICAgMB+IAFCgICAgMCBgPz/AH0gAUL///////////8Ag0KAgICAgICA+P8AVhsLNwMADEYLIAhBCGsiBykDACIBIAhBEGsiCykDACIthEL/////D1YNACAtpyIMQQBIDQAgAaciD0EATA0AIAsgDCAPcK03AwAMRQsjAEEgayIHJAACfwJAAkACQAJAAn4CQAJAAkACQAJAAkACQEEHIAhBEGsiCykDACIBQiCIpyIMIAxBB2tBbkkbIgxBB0dBByAIQQhrIiMpAwAiLkIgiKciDyAPQQdrQW5JGyIPQQdHckUEQCAHIC5CgICAgMCBgPz/AHw3AwggByABQoCAgIDAgYD8/wB8NwMQDAELAkAgDEF/RiAPQX5xQQJHcUUgDEF+cUECRiAPQX9HcnENACAGIAdBGGogASAuIAlBAUEAEIUCIgxFDQAgBiABEA8gBiAuEA8gDEEASA0MIAsgBykDGDcDAAwJCyAGIAEQbCIBQoCAgIBwg0KAgICA4ABRDQogBiAuEGwiLkKAgICAcINCgICAgOAAUQRAIAYgARAPDAwLQQcgAUIgiKciDCAMQQdrQW5JGyIMQQcgLkIgiKciDyAPQQdrQW5JGyIPckUEQCAupyEMIAGnIQ8CQAJAAkACQAJAAkAgCUGaAWsOBgABAgkFAwQLIC7EIAHEfiEtAkAgBigCECIQKAKMASIYRQ0AIBgtAChBBHFFDQAgLUKAgICAgICAEH1CgYCAgICAgGBUDQgLQgAhASAtQgBSDQogDCAPckEATg0LIAtCgICAgMD+/wM3AwAMDgsgBigCECIQKAKMASIYBEAgGC0AKEEEcQ0HCyALQoCAgIDAfiAPtyAMt6O9IgFCgICAgMCBgPz/AH0gAUL///////////8Ag0KAgICAgICA+P8AVhs3AwAMDQsgDEEASiAPQQBOcUUEQCALAn4gD7cgDLcQjgMiNL0iAQJ/IDSZRAAAAAAAAOBBYwRAIDSqDAELQYCAgIB4CyIJt71RBEAgCa0MAQtCgICAgMB+IAFCgICAgMCBgPz/AH0gAUL///////////8Ag0KAgICAgICA+P8AVhsLNwMADA0LIA8gDHCtIS0MCAsgBigCECIQKAKMASIYBEAgGC0AKEEEcQ0FCyAPtyE0IAsCfgJ8IAy3IjW9QoCAgICAgID4/wCDQoCAgICAgID4/wBRBEBEAAAAAAAA+H8gNJlEAAAAAAAA8D9hDQEaCyA0IDUQjwMLIjS9IgECfyA0mUQAAAAAAADgQWMEQCA0qgwBC0GAgICAeAsiCbe9UQRAIAmtDAELQoCAgIDAfiABQoCAgIDAgYD8/wB9IAFC////////////AINCgICAgICAgPj/AFYbCzcDAAwLCyAJQbIBRg0FDAQLIAHEIC7EfSEtDAULIAxBdUcgD0F1R3FFBEAgBiAJIAsgASAuIAYoAhAoAtgCERoADQwMCQsgDEF3RyAPQXdHcUUEQCAGIAkgCyABIC4gBigCECgCvAIRGgBFDQkMDAsgDEF2RyAPQXZHcUUEQCAGKAIQIRAMAgsgBiAHQRBqIAEQbg0KIAYgB0EIaiAuEG4NCwsCQCAGKAIQIhAoAowBIgxFDQAgDC0AKEEEcUUNACAHKwMQEL0CRQ0AIAcrAwgQvQINAQsCQAJAAkACQAJAAkACQCAJQZoBaw4GAAECCAUEAwsgBysDECAHKwMIoiE0DAULIAcrAxAgBysDCKMhNAwECyAHKwMQIAcrAwgQjgMhNAwDCyAJQbIBRw0EIAcrAxAgBysDCJkiNRCOAyI0RAAAAAAAAAAAY0UNAiA1IDSgITQMAgsgBysDECE1IAcrAwgiNr1CgICAgICAgPj/AINCgICAgICAgPj/AFEEQEQAAAAAAAD4fyE0IDWZRAAAAAAAAPA/YQ0CCyA1IDYQjwMhNAwBCyAHKwMQIAcrAwihITQLIAtCgICAgMB+IDS9IgFCgICAgMCBgPz/AH0gAUL///////////8Ag0KAgICAgICA+P8AVhs3AwAMBwsgBiAJIAsgASAuIBAoAqACERoARQ0GDAkLEAEACyAMRQ0FIAHEIC7EIgGBIi1CAFkNACAMQQBIBEAgLSABfSEtDAELIAEgLXwhLQsgLUKAgICACHxC/////w9WDQEgLSEBCyABQv////8PgwwBC0KAgICAwH4gLbm9IgFCgICAgMCBgPz/AH0gAUL///////////8Ag0KAgICAgICA+P8AVhsLIQEgCyABNwMAC0EADAMLIAZBAhCEAgwBCyAGIC4QDwsgC0KAgICAMDcDACAjQoCAgIAwNwMAQX8LIQkgB0EgaiQAIAkNSCAIQQhrIQcMRAsgCEEEaygCACIHRSAHQQdrQW5Jcg09IAghByAGIAhBjQEQ5gFFDUMMRwsCQAJ8IAhBCGsiBykDACIBQiCIpyIJRQRARAAAAAAAAACAIAGnIgpFDQEaRAAAAAAAAOBBIApBgICAgHhGDQEaIAdCACABfUL/////D4M3AwAMPwsgCUEHa0FtSw0BIAFCgICAgMD+/wN9vwshNCAHQoCAgIDAfiA0vSIBQoCAgIDAgYD8/wB9IAFC////////////AINCgICAgICAgPj/AFYbNwMADD0LIAghByAGIAhBjAEQ5gFFDUIMRgsgCEEIayIHKQMAIgFC/////w9WIAFC/////w+DQv////8HUXJFBEAgByABQgF8Qv////8PgzcDAAw8CyAIIQcgBiAIQY8BEOYBRQ1BDEULIAhBCGsiBykDACIBQv////8PViABQv////8Pg0KAgICACFFyRQRAIAcgAUIBfUL/////D4M3AwAMOwsgCCEHIAYgCEGOARDmAUUNQAxECyAGIAhBCGsiBykDABBsIgFCgICAgHCDQoCAgIDgAFEEQCAHQoCAgIAwNwMADEQLIAcgATcDACABQiCIp0F1TwRAIAGnIgcgBygCAEEBajYCAAsgCCABNwMAIAYgCEEIaiIHIAlBAmsQ5gFFDT8MQwsgCkECaiENIBEgCi0AAUEDdGoiBykDACIBQv////8PViABQv////8Pg0L/////B1FyRQRAIAcgAUIBfEL/////D4M3AwAMOQsgAUIgiKdBdU8EQCABpyIJIAkoAgBBAWo2AgALIA4gATcDYCAGICZBjwEQ5gENQiAGIAcgDikDYBAgDDgLIApBAmohDSARIAotAAFBA3RqIgcpAwAiAUL/////D1YgAUL/////D4NCgICAgAhRckUEQCAHIAFCAX1C/////w+DNwMADDgLIAFCIIinQXVPBEAgAaciCSAJKAIAQQFqNgIACyAOIAE3A2AgBiAmQY4BEOYBDUEgBiAHIA4pA2AQIAw3CyAIQQhrIgcpAwAiAUL/////D1gEQCAHIAFC/////w+FNwMADDcLIAghByMAQRBrIgkkAAJ/AkACQAJAIAhBCGsiCykDACIBQoCAgIBwVA0AIAYgCUEIaiABQZUBEMIFIgxBAEgNASAMRQ0AIAYgARAPIAsgCSkDCDcDAAwCCwJAIAYgARBsIgFCgICAgHCDIi1CgICAgOAAUQ0AIAYoAhAiDCgCjAEiDwR/IA8tAChBBHFBAnYFQQALRSAtQoCAgIDgflJxRQRAIAYgC0GVASABIAwoApwCERsADQEMAwsgBiAJQQRqIAEQmAENACALIAk1AgRC/////w+FNwMADAILIAtCgICAgDA3AwALQX8MAQtBAAshCyAJQRBqJAAgC0UNPAxACwJAAkACQCAIQQhrIgcpAwAiASAIQRBrIgspAwAiLYRC/////w9WDQAgAachCSASLQAoQQRxRQ0BIAlBH0sNACAtIAGGQoCAgIAIfEKAgICAEFQNAgsgBiAIQaABEMMCRQ09DEELIAlBH3EhCQsgCyAtpyAJdK03AwAMOwsgCEEIayIHKQMAIgEgCEEQayIJKQMAIi2EQv////8PWARAIAkCfiAtpyABp3YiCEEATgRAIAitDAELQoCAgIDAfiAIuL0iAUKAgICAwIGA/P8AfSABQv///////////wCDQoCAgICAgID4/wBWGws3AwAMOwsjAEEQayIJJAAgCEEIayIMKQMAIS0CfwJAAkAgBiAIQRBrIgspAwAQbCIBQoCAgIBwgyIuQoCAgIDgAFEEQCAGIC0QDwwBCyAGIC0QbCItQoCAgIBw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gICAgOAAIQEgACACKQMAEOgBIgZCgICAgHCDQoCAgIDgAFEEQCAAIAUQDwwGCyAAIAYQDyAGpyAFp0YNBAsgACAFEA8gAEGE5ABBABAVC0KAgICA4AAhAQwDCyACKAIQKAIsIgBFBEBCgICAgCAhAQwDCyAAIAAoAgBBAWo2AgAgAK1CgICAgHCEIQEMAgsgACABEI0EIgFCIIinQXVJDQEgAaciACAAKAIAQQFqNgIADAELIAUhAQsgA0EQaiQAIAELCwAgAEGNIkEAEEYLGgAgACgCECABIAIQ7wQiAUUEQCAAEHwLIAELgAEBAn8CQAJAIAFFDQAgASgCACICQQBMDQEgASACQQFrIgI2AgAgAg0AIAEtAAVBAXEEQCAAIAEpAxgQIwsgASgCCCICIAEoAgwiAzYCBCADIAI2AgAgAUIANwIIIABBEGogASAAKAIEEQAACw8LQdaNAUGu/ABB9ChB6t0AEAAACxIAIAFB3gFOBEAgACABEOgFCwvbAQIBfwJ+QQEhBAJAIABCAFIgAUL///////////8AgyIFQoCAgICAgMD//wBWIAVCgICAgICAwP//AFEbDQAgAkIAUiADQv///////////wCDIgZCgICAgICAwP//AFYgBkKAgICAgIDA//8AURsNACAAIAKEIAUgBoSEUARAQQAPCyABIAODQgBZBEBBfyEEIAAgAlQgASADUyABIANRGw0BIAAgAoUgASADhYRCAFIPC0F/IQQgACACViABIANVIAEgA1EbDQAgACAChSABIAOFhEIAUiEECyAECy0BAX9BASEBAkACQAJAIABBDWsOBAIBAQIACyAAQTRGDQELIABBOEYhAQsgAQsfACAAIAEgACACEKoBIgIgAyAEEBkhBCAAIAIQEyAEC0QBAX9BfyEDIAAgACgCBCACahDGAQR/QX8FIAAoAgAgAWoiAyACaiADIAAoAgQgAWsQnAEgACAAKAIEIAJqNgIEQQALC44BAQF/IAAgBkEMEEkiBkKAgICAcINCgICAgOAAUgRAIAAgACgCAEEBajYCACAGpyIHIAU7ASogByAEOgApIAcgAzoAKCAHIAE2AiQgByAANgIgIAcgBy0ABUHvAXEgBEECa0EESUEEdHI6AAUgACAGIAAgAkHMngEgAhsQqgEiASADEJYDIAAgARATCyAGCykBAX9B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IAAgD0ElEEsiCEUNACAAIANB3QEgA0EAEBQiDkKAgICAcIMiDUKAgICA4ABRDQAgDUKAgICAMFEEQCAAIA8QD0EADAILIAAgDkElEEsiC0UNAAJAIAgoAgRFDQAgCygCBEUNACAAIA8QDyAAIA4QD0EADAILIAQQ9wMhBwJ/IAgoAgAiCiALKAIAIgxGBEAgCCAHQQJ0aigCCAwBCyAKIAxLBEAgCEHUAGogDCAHELgFDAELIAtB3ABqIAogBxC4BQsiCkUEQCAJIAdBAnRBwMABajYCACAAQZL6ACAJEBUMAQsCQCAIKAIEBEACfiAFBEAgACACELkCDAELIAAgAiAGEJACCyICQoCAgIBwg0KAgICA4ABSDQEMAgsgAkIgiKdBdUkNACACpyIIIAgoAgBBAWo2AgALAkAgCygCBARAAn4gBQRAIAAgAxC5AgwBCyAAIAMgBhCQAgsiA0KAgICAcINCgICAgOAAUg0BIAAgAhAPDAILIANCIIinQXVJDQAgA6ciBSAFKAIAQQFqNgIACyAKIAooAgBBAWo2AgAgCSACIAMgBEF+cUGkAUYgB0ENRnEiBRs3AxggCSADIAIgBRs3AxAgACAKrUKAgICAcIRCgICAgDBBAiAJQRBqEC8hDSAAIAIQDyAAIAMQDyANQoCAgIBwgyICQoCAgIDgAFENAAJ+IAdBDEYEQCAAIA0QJiAEQaoBRketQoCAgIAQhAwBCyANIAdBDUcNABpCgICAgBAgAkKAgICAMFENABogACANECYgBEF9cUGkAUZHrUKAgICAEIQLIQMgACAPEA8gACAOEA8gASADNwMAQQEMAQsgACAPEA8gACAOEA8gAUKAgICAMDcDAEF/CyEHIAlBIGokACAHC2MCAX8BfiMAQRBrIgIkACAAAn4gAUUEQEIADAELIAIgAa1CACABZyIBQdEAahBnIAIpAwhCgICAgICAwACFQZ6AASABa61CMIZ8IQMgAikDAAs3AwAgACADNwMIIAJBEGokAAvHAQIBfgF/AkAgACgCECgCjAEiA0UgAUL/////////D3xC/v///////x9Wcg0AIAMoAihBBHFFDQAgAUKAgICACHxC/////w9YBEAgAUL/////D4MPC0KAgICAwH4gAbm9IgFCgICAgMCBgPz/AH0gAUL///////////8Ag0KAgICAgICA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ACAAIAEQiANBH3YLvgEBB38gACgCDCIFIQMCQANAIAMiBEUNASAAKAIQIgkgBEEBayIDQQJ0aiIGKAIARQ0ACyAAIAAoAgggBCAFa0EFdGo2AgggBigCAGciBwRAQSAgB2shBUEAIQMDQCADIARGRQRAIAkgA0ECdGoiBiAIIAV2IAYoAgAiCCAHdHI2AgAgA0EBaiEDDAELCyAAIAAoAgggB2s2AggLIAAgASACIARBABCqAw8LIABBgICAgHg2AgggAEEAEEEaQQALTgIBfwF+An4jACICIAAoAhAoAnhJBEAgABDpAUKAgICA4AAMAQsgACABrSABKQMAQoCAgIAwIAEoAgggASgCIEEEENgBCyEDIAIkACADCwwAIABB+swAQQAQFQsLACAAQcMaQQAQFQvVAQEDfyMAQRBrIgUkAEF/IQMCQCAAKAIUDQACQAJAIAFBgICAgAROBEAgACgCAEHA2gBBABBGDAELIAEgACgCDEEDbEECbSIEIAEgBEobIQEgACgCECIEIAJBgAJIckUEQCAAIAEQ9QMhAwwDCyAAKAIAIAAoAgQgASAEdCAEa0ERaiAFQQxqEKgBIgINAQsgABCDAwwBCyAFKAIMIQMgACACNgIEIABB/////wMgAyAAKAIQdiABaiIAIABB/////wNOGzYCDEEAIQMLIAVBEGokACADCxEAIAAgASACIAMgBEEAELcFCyYBAX8gAUIgiKdBdU8EQCABpyICIAIoAgBBAWo2AgALIAAgARBsCycBAX8gAUIAUwRAIABCACABfRAwIQIgAEEBNgIEIAIPCyAAIAEQMAvsAQEBfwJAAkACQAJAAkACQAJAQQcgAkIgiKciAyADQQdrQW5JGyIDDggAAAAEBAQEAQMLIAAoAtgBIQAgAUIANwIMIAFCgICAgICAgICAfzcCBCABIAA2AgAgASACxBC6Ag0BDAQLIAAoAtgBIQAgAUIANwIMIAFCgICAgICAgICAfzcCBCABIAA2AgAgASACQoCAgIDAgYD8/wB8vxC6BUUNAwsgARAbQQAPCyADQQpqQQJJDQILIAAoAtgBIQAgAUIANwIMIAFCgICAgICAgICAfzcCBCABIAA2AgAgARA1CyABDwsgAqdBBGoL5AEBBH8jAEEQayICJAAgACACQQhqIAEQ5QEhAyAAIAEQDwJAIANFBEBC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IAMoAgAgAygCBHEMBAsgAygCACADKAIEcgwDCyADKAIAIAMoAgRzDAILEAEACyADKAIEIAMoAgB0C603AwAMAQsgAUKAgICAMDcDACAGQoCAgIAwNwMAQX8MAQtBAAshACADQRBqJAAgAAuGBQIHfwJ+AkAgAUKAgICAcINCgICAgJB/UgRAQoCAgIDgACEKIAAgARA3IgFCgICAgHCDQoCAgIDgAFENAQsCQCACQoCAgIBwg0KAgICAkH9RDQBCgICAgOAAIQogACACEDciAkKAgICAcINCgICAgOAAUg0AIAEhAgwBCwJAIAKnIgUpAgQiCkL/////B4NQDQAgAaciAykCBCELAkAgAygCAEEBRyAKIAuFQoCAgIAIg0IAUnINACADIAAoAhAoAgwRBAAgBSkCBCIKpyIEQf////8HcSIHIAMpAgQiC6ciBkH/////B3EiCGogBEEfdnQgBkEfdiIJQRFzakkNACAFQRBqIQYgA0EQaiEEIAkEQCAEIAhBAXRqIAYgB0EBdBAfGiADIAMpAgQiCiAFKQIEfEL/////B4MgCkKAgICAeIOENwIEDAILIAQgCGogBiAHEB8aIAMgAykCBCIKIAUpAgR8Qv////8HgyILIApCgICAgHiDhDcCBCAEIAunakEAOgAADAELAn4CQAJAIAunQf////8HcSAKp0H/////B3FqIgdBgICAgARPBEAgAEHA2gBBABBGDAELIAAgByAKIAuEpyIGQR92EOoBIggNAQtCgICAgOAADAELIAhBEGohBAJAIAZBAE4EQCAEIANBEGogAygCBEH/////B3EQHyIEIAMoAgRB/////wdxaiAFQRBqIAUoAgRB/////wdxEB8aIAQgB2pBADoAAAwBCyAEIAMgAygCBEH/////B3EQwwUgBCADKAIEQQF0aiAFIAUoAgRB/////wdxEMMFCyAIrUKAgICAkH+ECyEKIAAgARAPDAELIAEhCgsgACACEA8gCgtAACAAAn8CfyADBEAgASgCJCACQQN0akEEagwBC0EAIAEoAiAiA0UNARogAyABLwEoIAJqQQR0agsoAgALENkBCw0AIAAgASACQQIQzgILNQEBfyMAQdAAayICJAAgAiAAKAIQIAJBEGogARCQATYCACAAQef5ACACEMYCIAJB0ABqJAALowECAX8BfiMAQRBrIgUkACAFIAQ2AgxBfyEEIAAgASAFQQxqENQBRQRAIAMoAgAiAEF8cSABIAIgAygCBCAAQQNxQQJ0QZTAAWooAgARIAAhBiADKAIAEOoFIAUoAgwiACAAKAIAQf////8DcTYCACADQoCAgIAwIAYgBkKAgICAcINCgICAgOAAUSIAGzcDAEF/QQAgABshBAsgBUEQaiQAIAQL9QEBA38jAEEQayIGJAAgBiAAOQMIIAYgAUEBayIHNgIAIAVBgAFB+PAAIAYQThogAyAFLQAAQS1GNgIAIAQgBS0AAToAACABQQJOBEAgBEEBaiAFQQNqIAcQHxoLIAEgBGpBADoAACACIQggASAFaiABQQFKakECaiECQQAhA0EAIQQDQCACIgFBAWohAiABLAAAIgUQjgYNAAsCQAJAAkAgBUEraw4DAQIAAgtBASEECyACIQELA0AgASwAACICENECBEAgAUEBaiEBIANBCmwgAmtBMGohAwwBCwsgCCADQQAgA2sgBBtBAWo2AgAgBkEQaiQAC5kHAgp/AX4jAEHwAGsiBSQAIAAoAhAhBiAFQgA3A1ggBUIANwNQIAUgBjYCZCAFQTs2AmACQCACBH8gBSACNgJAIAVB0ABqQdM8IAVBQGsQkgIgA0F/RwRAIAUgAzYCMCAFQdAAakHZ+wAgBUEwahCSAgsgBUHQAGpBChARIAAgAUExIAAgAhBiQQMQGRogACABQTIgA61BAxAZGiAEQQJxDQEgACgCEAUgBgtBjAFqIQggBEEBcUUhCwNAIAgoAgAiCEUNASALRQRAQQEhCwwBC0HgiAEhAkEAIQYCQCAIKQMIIg9CgICAgHBUDQAgD6ciBCgCECIDQTBqIQcgAyADKAIYQX9zQQJ0QaR+cmooAgAhAwNAIANFDQEgByADQQFrQQN0IglqIgooAgAhAyAKKAIEQTZHBEAgA0H///8fcSEDDAELCyADQf////8DSw0AIAQoAhQgCWopAwAiD0KAgICAcINCgICAgJB/Ug0AIAAgDxCzASIDRQ0AIANB4IgBIAMtAAAbIQIgAyEGCyAFIAI2AiAgBUHQAGpB0zwgBUEgahCSAiAAIAYQVAJAIAgoAggiAi8BBhDuAQRAIAIoAiAiBy8AESICQQt2QQFxIQogAkGACHFFDQFBfyEGAkAgBygCUCICRQ0AIAgoAiAgBygCFEF/c2ohDiACIAcoAkxqIQkgBygCRCEEQQAhDANAIAQhBiACIAlPDQEgAkEBaiEDAn8gAi0AACICRQRAAkAgBUHoAGogAyAJEO4FIgJBAEgNACAFKAJoIQ0gBUHsAGogAiADaiICIAkQ7gUiA0EASA0AIAUoAmwiBEEBdkEAIARBAXFrcyAGaiEEIAIgA2oMAgsgBygCRCEGDAMLIAYgAkEBayICQf8BcUEFbiINQXtsIAJqQf8BcWpBAWshBCADCyECIAwgDWoiDCAOTQ0ACwsgBSAAIAcoAkAQkQQiAkHziAEgAhs2AhAgBUHQAGpBwDwgBUEQahCSAiAAIAIQVCAGQX9HBEAgBSAGNgIAIAVB0ABqQdn7ACAFEJICCyAFQdAAakEpEBEMAQtBACEKIAVB0ABqQaeSAUEAEJICCyAFQdAAakEKEBEgCkUNAAsLIAVB0ABqQQAQEUKAgICAICEPIAUoAlAhAiAFKAJcRQRAIAAgAhBiIQ8LIAIEQCAFKAJkIAJBACAFKAJgEQEAGgsgACABQTUgD0EDEBkaIAVB8ABqJAALpgEBA38jAEGgAWsiBCQAIAQgACAEQZ4BaiABGyIFNgKUAUF/IQAgBCABQQFrIgZBACABIAZPGzYCmAEgBEEAQZABECsiBEF/NgJMIARBOjYCJCAEQX82AlAgBCAEQZ8BajYCLCAEIARBlAFqNgJUAkAgAUEASARAQaDUBEE9NgIADAELIAVBADoAACAEIAIgA0HjAEHkABCZBCEACyAEQaABaiQAIAALnQMDAX4DfwN8AkACQAJAAkAgAL0iAUIAWQRAIAFCIIinIgJB//8/Sw0BCyABQv///////////wCDUARARAAAAAAAAPC/IAAgAKKjDwsgAUIAWQ0BIAAgAKFEAAAAAAAAAACjDwsgAkH//7//B0sNAkGAgMD/AyEDQYF4IQQgAkGAgMD/A0cEQCACIQMMAgsgAacNAUQAAAAAAAAAAA8LIABEAAAAAAAAUEOivSIBQiCIpyEDQct3IQQLIAQgA0HiviVqIgJBFHZqtyIGRAAA4P5CLuY/oiABQv////8PgyACQf//P3FBnsGa/wNqrUIghoS/RAAAAAAAAPC/oCIAIAAgAEQAAAAAAAAAQKCjIgUgACAARAAAAAAAAOA/oqIiByAFIAWiIgUgBaIiACAAIABEn8Z40Amawz+iRK94jh3Fccw/oKJEBPqXmZmZ2T+goiAFIAAgACAARERSPt8S8cI/okTeA8uWZEbHP6CiRFmTIpQkSdI/oKJEk1VVVVVV5T+goqCgoiAGRHY8eTXvOeo9oqAgB6GgoCEACyAACw8AIAAgAUKAgICAMBC/AgsmAQF/IwBBEGsiBCQAIAQgAjYCDCAAIAMgASACEJIEIARBEGokAAuZAQEDfCAAIACiIgMgAyADoqIgA0R81c9aOtnlPaJE65wriublWr6goiADIANEff6xV+Mdxz6iRNVhwRmgASq/oKJEpvgQERERgT+goCEFIAMgAKIhBCACRQRAIAQgAyAFokRJVVVVVVXFv6CiIACgDwsgACADIAFEAAAAAAAA4D+iIAUgBKKhoiABoSAERElVVVVVVcU/oqChC5IBAQN8RAAAAAAAAPA/IAAgAKIiAkQAAAAAAADgP6IiA6EiBEQAAAAAAADwPyAEoSADoSACIAIgAiACRJAVyxmgAfo+okR3UcEWbMFWv6CiRExVVVVVVaU/oKIgAiACoiIDIAOiIAIgAkTUOIi+6fqovaJExLG0vZ7uIT6gokStUpyAT36SvqCioKIgACABoqGgoAsKACAAQTBrQQpJC40BACAAIAAgACAAIABECff9DeE9Aj+iRIiyAXXg70k/oKJEO49otSiCpL+gokRVRIgOVcHJP6CiRH1v6wMS1tS/oKJEVVVVVVVVxT+gIACiIAAgACAAIABEgpIuscW4sz+iRFkBjRtsBua/oKJEyIpZnOUqAECgokRLLYocJzoDwKCiRAAAAAAAAPA/oKMLqwIBCH8jAEEwayIEJAAgAkEHcSEJIAAoAgAiBUEIaiEGQSAhBwNAIAUoAhwiAyABIAdqIghJBEACQCAFKAIUBEAgBigCACEDDAELIAAoAgAhAyAFQgA3AhQgBUKAgICAgICAgIB/NwIMIAUgAzYCCAsgBEIANwIoIARCgICAgICAgICAfzcCICAEIAM2AhwgBEIANwIUIARCgICAgICAgICAfzcCDCAEIAM2AgggBiAEQRxqIgogBEEIaiIDQQAgCEEPakEDbkEBakEAEKAEIAYgBiADIAhBABCVARogChAbIAMQGyAFIAg2AhwgCCEDCyAAIAYQRBogAEEANgIEIAAgASAJIAMQ4QNFBEAgB0EBdiAHaiEHDAELCyAAIAEgAhDOARogBEEwaiQAC1cBAn8jAEEgayIFJAAgACgCACEGIAVCADcCGCAFQoCAgICAgICAgH83AhAgBSAGNgIMIAVBDGoiBiACELoCGiAAIAEgBiADIAQQQxogBhAbIAVBIGokAAseACABBEAgACgCACIAKAIAIAFBACAAKAIEEQEAGgsLEAAgAa0gAK1+IAIgAxCoBAtiAQF/IwBBIGsiBiQAAkACQCADIAUgAyAFSBtB5ABOBEAgBiABNgIcQX8hASAAIAZBDGogAiADIAQgBUEEEJ8GRQ0BDAILIAEgAiADIAQgBRCeBgtBACEBCyAGQSBqJAAgAQtQAQJ/IAJBACACQQBKGyECAkADQCACIARGDQEgACAEQQJ0aiIDIAMoAgAiAyABazYCACAEQQFqIQQgASADSyEDQQEhASADDQALQQAhAQsgAQtTAQF/IAEgACgCBCICSgRAIAAoAgwgACgCCCABIAJBA2xBAm0iAiABIAJKGyIBQQJ0IAAoAhARAQAiAkUEQEF/DwsgACABNgIEIAAgAjYCCAtBAAtZAQN/QX8hASAAIAAoAgAiAkECaiIDENkCBH9BfwUgACgCCCIBQQRqIAEgAkECdCICEJwBIAAoAggiAUEANgIAIAEgAmpBfzYCBCAAIAM2AgAgABCiBkEACwulAgEFfwNAAkACQAJAAkACfyACIAdMIgkgBCAGTHJFBEAgASAHQQJ0aigCACIIIAMgBkECdGooAgAiCUkEQCAIDAILIAggCUcNAyAGQQFqIQYgB0EBaiEHIAghCQwECyAJDQEgASAHQQJ0aigCAAshCSAHQQFqIQcMAgsgBCAGTA0CIAMgBkECdGooAgAhCQsgBkEBaiEGCwJ/AkACQAJAAkAgBQ4DAwABAgsgBiAHcUEBcQwDCyAGIAdzQQFxDAILEAEACyAGIAdyQQFxCyEKIAogACgCACIIQQFxRg0BIAAoAgQgCEwEQCAAIAhBAWoQ2QIEQEF/DwsgACgCACEICyAAIAhBAWo2AgAgACgCCCAIQQJ0aiAJNgIADAELCyAAEKIGQQALawIBfgJ/IAAoAgAhAwNAIAMtAAAiBEE6a0H/AXFB9gFPBEAgAkIKfiAErUL/AYN8QjB9IgJC/////wdUIgQgAXIEQCACQv////8HIAQbIQIgA0EBaiEDDAIFQX8PCwALCyAAIAM2AgAgAqcLZAEBfwJAIAFCIIinIgJFIAJBC2pBEUtyDQACQCABQoCAgIBwVA0AIAGnIgIvAQZBBEcNACACKQMgIgFCIIinIgJFIAJBC2pBEUtyDQELIABB9scAQQAQFUKAgICA4AAhAQsgAQsRACAAIAEgAiADQQBBABCCAQu+AQIGfwJ+IAEoAgAiAyAAKQIEIgmnQf////8HcSIEIAMgBEobIANrIQcgAEEQaiEFIANBAmohCCAJQoCAgIAIgyEKQQAhAEIAIQkCQANAIABBAkcEQEF/IQYgACAHRg0CAn8gClBFBEAgBSADQQF0ai8BAAwBCyADIAVqLQAACyIEQTBrQQlLDQIgAEEBaiEAIANBAWohAyAErSAJQgp+fEIwfSEJDAELCyACIAk3AwAgASAINgIAQQAhBgsgBguaAwMCfAN/AX4CfyAAKwMIIgJEAAAAAAAAKEAQjgMiA5lEAAAAAAAA4EFjBEAgA6oMAQtBgICAgHgLIgRBDGogBCAEQQBIGyIEQQBKIQYgBEEAIAYbIQYCfiAAKwMAIAJEAAAAAAAAKECjnKAiAplEAAAAAAAA4ENjBEAgArAMAQtCgICAgICAgICAfwsiBxDMBLkhAgNAIAUgBkZFBEAgBUECdEGQ0gFqKAIAIQQgBUEBRgRAIAQgBxDLBKdqQe0CayEECyAFQQFqIQUgAiAEt6AhAgwBCwsgAiAAKwMQRAAAAAAAAPC/oKBEAAAAAHCZlEGiIAArAzAgACsDKEQAAAAAAECPQKIgACsDGEQAAAAAQHdLQaIgACsDIEQAAAAAAEztQKKgoKCgIQIgAQRAIAICfiACmUQAAAAAAADgQ2MEQCACsAwBC0KAgICAgICAgIB/CxC4A0Hg1ANst6AhAgsgAp1EAAAAAAAAAACgRAAAAAAAAPh/IAJEAADcwgiyPkNlG0QAAAAAAAD4fyACRAAA3MIIsj7DZhsLdgECfyABKAIAQQBIBEAgASAAQUBrKAIAEDI2AgALIABBERAQIABBsAEQECACQQAgAkEAShshAiAAQekAQX8QHCEEA0AgAiADRkUEQCAAQQ4QECADQQFqIQMMAQsLIABBBhAQIABB6wAgASgCABAcGiAAIAQQHgtPAQF/QX8hAQJAIABB+wAQLA0AIAAoAhBB/QBHBEAgABCAARoDQCAAQQcQ4QENAiAAKAIQQf0ARw0ACyAAEPMBC0F/QQAgABASGyEBCyABC2gAIAAgASACEE8iAEEATgRAIAEoAnQgAEEEdGoiAiACKAIMQYd/cSADQQN0QfgAcXI2AgwgAiABKAK8ASIDNgIEIAIgASgCwAE2AgggASgCzAEgA0EDdGogADYCBCABIAA2AsABCyAAC20BAX8gACABQfwBakEQIAFB+AFqIAEoAvQBQQFqEHhFBEAgASABKAL0ASIDQQFqNgL0ASABKAL8ASADQQR0aiIDQX82AgAgAyADLQAEQfgBcToABCADIAEoArwBNgIIIAMgACACEBg2AgwLIAMLxgMBBH8gAEFAayIFKAIAQbACaiEDA0BBACECAkADQCADKAIAIgNFDQEgAygCHARAIAFFBEAgAEEGEBALIABBhAEQEEGDASECIAAgBSgCAC0AbEEDRgR/IABBDhAQIABBDhAQIABBwgAQECAAQQYQGiAAQREQECAAQbABEBAgAEHqAEF/EBwhASAAQSQQECAFKAIAQQAQFyAAQYEBEBAgAEGLARAQIABB6wBBfxAcIQQgACABEB4gAEEOEBAgACAEEB5BDgVBgwELEBBBfSECQQEhAQsgAygCECACaiECIAMoAhRBf0YNAAtBD0EOIAEbIQQDQCACBEAgACAEEBAgAkEBayECDAELCyABRQRAIABBBhAQCyAAQe0AIAMoAhQQHBpBASEBDAELCwJAIABBQGsoAgAiAigCYARAAkAgAUUEQEF/IQIMAQsgAEEqEBAgAEHpAEF/EBwhAiAAQQ4QEAsgAEG4ARAQIABBCBAaIABBQGsoAgBBABAXIAAgAhAeQSghAgwBCyACLQBsIgMEQCABRQRAIABBBhAQQS4hAgwCC0EuIQIgA0EDRw0BIABBiwEQEAwBC0EoQSkgARshAgsgACACEBALXQECfwJAAkAgACgCmAIiAUEASA0AIAAoAoACIAFqLQAAIgBBI2siAUENTUEAQQEgAXRB5fAAcRsNAQJAIABB6wBrDgQCAQECAAsgAEHsAWtBAkkNAQtBASECCyACCy8AIAAgASACIAMQ4wIiAEEATgRAIAEoAnQgAEEEdGoiASABKAIMQQNyNgIMCyAACy4AIABBDBApIgAEQCAAIAM2AgggACACNgIEIAAgASgCEDYCACABIAA2AhALIAALawEBfwJA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CyAAKAIQIgJBEGogAyACKAIEEQAAQQAhAgNAIAEoAvwBIQMgAiABKAL0AU5FBEAgACADIAJBBHRqKAIMEBMgAkEBaiECDAELCyAAKAIQIgJBEGogAyACKAIEEQAAQQAhAgNAIAEoAsgCIQMgAiABKALAAk5FBEAgACADIAJBA3RqKAIEEBMgAkEBaiECDAELCyAAKAIQIgJBEGogAyACKAIEEQAAIAEoAswBIgIgAUHQAWpHBEAgACgCECIDQRBqIAIgAygCBBEAAAsgACABKALsAhATIAFB9AJqEPYBIAAoAhAiAkEQaiABKAKMAyACKAIEEQAAIAEoAgQEQCABKAIYIgIgASgCHCIDNgIEIAMgAjYCACABQgA3AhgLIAAoAhAiAEEQaiABIAAoAgQRAAALggEBAn8gACABQRBqEM8FAkAgASgCICICBEAgASgCPCIDRQ0BA0AgAiADT0UEQCAAIAIpAwAQIyACQQhqIQIgASgCPCEDDAELCyAAQRBqIAEoAiAgACgCBBEAAAsgACABKQMYECMgACABKQMAECMPC0GEhAFBrvwAQYmUAUHC6wAQAAALaAEBfgJAAkAgABA0IgNCgICAgHCDQoCAgIDgAFEEQCABIQMMAQsgACADQcAAIAFBBxAZQQBIDQAgACADQekAIAJBAEetQoCAgIAQhEEHEBlBAE4NAQsgACADEA9CgICAgOAAIQMLIAMLjAEBAn8CQANAIAFCgICAgHBUDQECQAJAAkACQAJAAkAgAaciAi8BBiIDQQxrDgUFAQMHAQALIANBMEYNASADQTRrDgUABgYGAAYLIAIoAiAoAjAPCyACKAIgIgJFDQQgAi0AEUUNASAAELYCQQAPCyACKAIgIQILIAIpAwAhAQwBCwsgAigCICEACyAACyIAIAAgAkEBahApIgAEQCAAIAEgAhAfIAJqQQA6AAALIAALjQMCA34EfwJAIAEoAggiBkH+////B04EQEEBIQcgAkEBcQ0BQv///////////wAhAyAGQf7///8HRw0BIAE0AgRC////////////AHwhAwwBCyAGQQBMBEAMAQsgBkE/TQRAIAEoAhAiCSABKAIMIgJBAnRqQQRrKAIAIQhCACAGQSBNBH4gCEEgIAZrdq0FIAJBAk8EfiACQQJ0IAlqQQhrNQIABUIACyAIrUIghoRBwAAg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LQAFQf4BcToABSABIAs3A0ALIAtCIIinQXVPBEAgC6ciACAAKAIAQQFqNgIACyALIQwLIANBIGokACAMC4kEAgR+An8CQAJAIAG9IgRCAYYiA1ANACABvSECIAC9IgVCNIinQf8PcSIGQf8PRg0AIAJC////////////AINCgYCAgICAgPj/AFQNAQsgACABoiIAIACjDwsgAyAFQgGGIgJaBEAgAEQAAAAAAAAAAKIgACACIANRGw8LIARCNIinQf8PcSEHAn4gBkUEQEEAIQYgBUIMhiICQgBZBEADQCAGQQFrIQYgAkIBhiICQgBZDQALCyAFQQEgBmuthgwBCyAFQv////////8Hg0KAgICAgICACIQLIQICfiAHRQRAQQAhByAEQgyGIgNCAFkEQANAIAdBAWshByADQgGGIgNCAFkNAAsLIARBASAHa62GDAELIARC/////////weDQoCAgICAgIAIhAshBCAGIAdKBEADQAJAIAIgBH0iA0IAUw0AIAMiAkIAUg0AIABEAAAAAAAAAACiDwsgAkIBhiECIAZBAWsiBiAHSg0ACyAHIQYLAkAgAiAEfSIDQgBTDQAgAyICQgBSDQAgAEQAAAAAAAAAAKIPCwJAIAJC/////////wdWBEAgAiEDDAELA0AgBkEBayEGIAJCgICAgICAgARUIQcgAkIBhiIDIQIgBw0ACwsgBUKAgICAgICAgIB/gyADQoCAgICAgIAIfSAGrUI0hoQgA0EBIAZrrYggBkEAShuEvwvoDwMHfAh/An5EAAAAAAAA8D8hAwJAAkACQCABvSIRQiCIpyIPQf////8HcSIJIBGnIgxyRQ0AIAC9IhJCIIinIQogEqciEEUgCkGAgMD/A0ZxDQAgCkH/////B3EiC0GAgMD/B0sgC0GAgMD/B0YgEEEAR3FyIAlBgIDA/wdLckUgDEUgCUGAgMD/B0dycUUEQCAAIAGgDwsCQAJAAkACQAJAAn9BACASQgBZDQAaQQIgCUH///+ZBEsNABpBACAJQYCAwP8DSQ0AGiAJQRR2IQ0gCUGAgICKBEkNAUEAIAxBswggDWsiDnYiDSAOdCAMRw0AGkECIA1BAXFrCyEOIAwNAiAJQYCAwP8HRw0BIAtBgIDA/wNrIBByRQ0FIAtBgIDA/wNJDQMgAUQAAAAAAAAAACARQgBZGw8L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A38jAEFAaiIGJAACQCAEIANrIghBAUYEQAJAIANFBEAgAUIDEDAaDAELIAEgA60QMBogAUEBNgIECyACIANBAXRBAXKtEDAaIAIgAigCCEECajYCCCAAIAEQRBoMAQsgACgCACEHIAAgASACIAMgCEEBdiADaiIDQQEQoAQgBkIANwI4IAZCgICAgICAgICAfzcCMCAGIAc2AiwgBkIANwIkIAZCgICAgICAgICAfzcCHCAGIAc2AhggBkIANwIQIAZCgICAgICAgICAfzcCCCAGIAc2AgQgBkEsaiIHIAZBGGogBkEEaiIIIAMgBCAFEKAEIAAgACAIQf////8DQQEQQxogByAHIAFB/////wNBARBDGiAAIAAgB0H/////A0EBEMsBGiAFBEAgASABIAZBGGpB/////wNBARBDGgsgAiACIAZBBGoiAEH/////A0EBEEMaIAZBLGoQGyAGQRhqEBsgABAbCyAGQUBrJAALzgUCB38DfiMAQTBrIggkAAJ/AkACQAJAAkACQCADDgMAAQIDC0HcjAFB1PwAQbUaQZb8ABAAAAsgASACKAIQIAIoAgwiACAAQQV0IAIoAghrEGg2AgAMAgsgAigCECIDIAIoAgwiACAAQQV0IAIoAghrIgJBIGoQaK1CIIYgAyAAIAIQaK2EIQ8gBkGAlOvcA0YEQCABIA9CgJTr3AOAIhA+AgQgASAQQoDslKMMfiAPfD4CAAwCCyABIA8gBq0iEIAiET4CBCABIA8gECARfn0+AgAMAQsgAigCACEKIAhCADcCKCAIQoCAgICAgICAgH83AiAgCCAKNgIcIAhCADcCFCAIQoCAgICAgICAgH83AgwgCCAKNgIIIAMgBUEBdCAEQQFqIgt2QQFqQQF2IgprIQwgACAEQQF0QQFyQRRsaiENQQAhAyAAIARBKGxqIgQoAgxFBEAgBCAGIApB/////wNBARD8AiAIQQhqIglCARAwciANIAkgBCAKQQFqIAdsQQJqQQAQlQFyIQkLAkACQCAIQRxqIg4gAiANIAcgDGxBABBDIAlyIA5BARDRAXIgCEEIaiIJIA4gBEH/////A0EBEENyIAkgAiAJQf////8DQQEQ5AFyQSBxDQADQAJAIAgoAgxFDQAgCCgCFEUNACAIQQhqIgIgAiAEQf////8DQQEQywENAiADQQFrIQMM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3gQBCX8jAEEQayIGJAAgACAAKQOAARAjIABBEGohAyAAQaABaiEEIAAoAqQBIQEDQCABIARGRQRAIAEoAgQhBUEAIQIDQCACIAEoAhBORQRAIAAgASACQQN0aikDGBAjIAJBAWohAgwBCwsgAyABIAAoAgQRAAAgBSEBDAELCyAAIAQ2AqQBIAAgAEGgAWo2AqABIAAQogUgACgCVCAAQdAAakYEQEEAIQIDQAJAIAAoAkQhASACIAAoAkBODQAgASACQRhsaiIBKAIABEAgACABKAIEEOwBCyACQQFqIQIMAQsLIAMgASAAKAIEEQAAIAAoApACIgQEQEEAIQEDQEEAIQUgAUEFRkUEQANAQQAhAiAFQQJGRQRAA0AgAkEURwRAIAQgAUGgAWxqIAVB0ABsaiACQQJ0akGoDWoiBygCACIIBEAgBCgCACIJKAIAIAhBACAJKAIEEQEAGiAHQQA2AgALIAJBAWohAgwBCwsgBUEBaiEFDAELCyABQQFqIQEMAQsLIAAoAtgBIARBACAAKALcAREBABogAEEANgKQAgsgAEHgAWoQoQUgAEH4AWoQoQVBACECA0ACQCAAKAI4IQEgAiAAKAIsTg0AIAEgAkECdGooAgAiAUEBcUUEQCADIAEgACgCBBEAAAsgAkEBaiECDAELCyADIAEgACgCBBEAACADIAAoAjQgACgCBBEAACADIAAoAtQBIAAoAgQRAAAgBiADKQIINwMIIAYgAykCADcDACAGIAAgACgCBBEAACAGQRBqJAAPC0GNkQFBrvwAQb8PQaTlABAAAAtDAQJ/IAAoAogBIQJBfyEDAkADQCACQQBMDQEgACgCgAEgAkEBayICQQR0aigCACABRw0ACyACQYCAgIACciEDCyADC8YBAgR/AX4jAEEQayIDJAAgACABEC0iB0KAgICAcINCgICAgOAAUgRAAkAgACADQQxqIAcQ5QEiBkUEQAwBCwJAIAAgAhA/IgEgAygCDGpBAWoQKSIERQRAQQAhBAwBCyAEIAYgAygCDBAfIgUgAygCDGogAiABEB8aIAUgAygCDCABampBADoAACAAIAUgAygCDCABahCFAyEEIAAoAhAiAUEQaiAFIAEoAgQRAAALIAAgBhBUCyAAIAcQDwsgA0EQaiQAIAQLvwEBAX8gASADai0AAEE8RgRAIAAgBEH/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BEAgCygCJCIEIAJBA3RqIAQgAadBA3QQnAFBAAwBCyABpwshDUEAIQQgAkEAIAJBAEobIQIDQCACIARHBEAgAyAEQQN0aikDACIBQiCIp0F1TwRAIAGnIg4gDigCAEEBajYCAAsgCygCJCAEIA1qQQN0aiABNwMAIARBAWohBAwBCwsgCyAFPgIoIAsoAhQgBUL/////D4M3AwAgBUKAgICACHwhAQwBCyAAIAxBCGogBhA8DQEgDCkDCCIBIAKsIgh8IgVCgICAgICAgBBZBEAgAEHQ2gBBABAVDAILAkAgBEUgAkEATHJFBEBCACEHIAAgBiAIQgAgAUF/EPQCDQMMAQsgASEHCyACQQAgAkEAShutIQlCACEBA0AgASAJUgRAIAMgAadBA3RqKQMAIghCIIinQXVPBEAgCKciAiACKAIAQQFqNgIACyABIAd8IQogAUIBfCEBIAAgBiAKIAgQhgFBAE4NAQwDCwsgACAGQTAgBUKAgICACHwiAUL/////D1gEfiAFQv////8PgwVCgICAgMB+IAW5vSIHQoCAgIDAgYD8/wB9IAdC////////////AINCgICAgICAgPj/AFYbCxBFQQBIDQELIAAgBhAPIAVC/////w+DIAFC/////w9YDQEaQoCAgIDAfiAFub0iAUKAgICAwIGA/P8AfSABQv///////////wCDQoCAgICAgID4/wBWGwwBCyAAIAYQD0KAgICA4AALIQEgDEEQaiQAIAEL0gMCB38DfiMAQSBrIgQkACAEQQA2AgwgBEEANgIIAkACQCAEIAAoAhAoAnhJBEAgABDpAQwBCyAAIAEgAiABQQAQFCILQoCAgIBwg0KAgICA4ABRBEAgCyEBDAILAkACQCALQoCAgIBwVA0AIAAgCxDKASIKQQBIDQECQCAKBEAgACAEQQxqIAsQ1gFFDQEMAwsgACAEQQhqIARBDGogC6dBERCOASEJIAQoAgghBSAJQQBIDQILIAQoAgwhCANAIAcgCEYNAQJAIAoEQCAAIAcQqQUiBkUNBAwBCyAAIAUgB0EDdGooAgQQGCEGCwJ/AkAgACALIAYgAxD5BCINQoCAgIBwgyIMQoCAgIAwUgRAIAxCgICAgOAAUg0BIAAgBhATDAULIAAgCyAGQQAQ1QEMAQsgACALIAYgDUEHEBkLIQkgACAGEBMgB0EBaiEHIAlBAE4NAAsMAQsgACAFIAgQWkEAIQUgACACEFwiDEKAgICAcINCgICAgOAAUQ0AIAQgCzcDGCAEIAw3AxAgACADIAFBAiAEQRBqECEhASAAIAwQDyAAIAsQDwwCCyAAIAUgBCgCDBBaIAAgCxAPC0KAgICA4AAhAQsgBEEgaiQAIAELPwEBfyABQQAgAUEAShshAQNAAkAgASADRgRAQX8hAwwBCyAAIANBA3RqKAIEIAJGDQAgA0EBaiEDDAELCyADC/8EAgJ/BH4CQCACQv////9vWARAIAAQJAwBCwJAIAAgAkE9EHEEf0KAgICAMCEFQoCAgIAwIQZCgICAgDAhCCAAIAJBPSACQQAQFCIHQoCAgIBwg0KAgICA4ABRDQFBgQJBgAIgACAHECYbBUEACyEDIAAgAkE+EHEEQEKAgICAMCEFQoCAgIAwIQZCgICAgDAhCCAAIAJBPiACQQAQFCIHQoCAgIBwg0KAgICA4ABRDQFBggRBgAQgACAHECYbIANyIQMLIAAgAkE/EHEEQEKAgICAMCEFQoCAgIAwIQZCgICAgDAhCCAAIAJBPyACQQAQFCIHQoCAgIBwg0KAgICA4ABRDQFBhAhBgAggACAHECYbIANyIQMLQoCAgIAwIQYCQCAAIAJBwAAQcUUEQEKAgICAMCEIDAELQoCAgIAwIQUgACACQcAAIAJBABAUIghCgICAgHCDQoCAgIDgAFEEQAwCCyADQYDAAHIhAwsCQAJAIAAgAkHBABBxRQ0AQoCAgIAwIQUgA0GAEHIhAyAAIAJBwQAgAkEAEBQiBkKAgICAcIMiB0KAgICAMFENAEHDwgAhBCAHQoCAgIDgAFENASAAIAYQOEUNAQsCQCAAIAJBwgAQcUUEQEKAgICAMCEFDAELIANBgCByIQMgACACQcIAIAJBABAUIgVCgICAgHCDIgJCgICAgDBRDQBBtMIAIQQgAkKAgICA4ABRDQEgACAFEDhFDQELIANBgDBxBEBBsekAIQQgA0GAxABxDQELIAEgBTcDGCABIAY3AxAgASAINwMIIAEgAzYCAEEADwsgACAEQQAQFQsgACAIEA8gACAGEA8gACAFEA8LQX8LwgEBAn8gAigCBEUEQCACKAIYIgMgAigCHCIENgIEIAQgAzYCACACQgA3AhgCQCABKAIABEAgAhCfBQwBCyAAIAIpAyAQIwsgACACKQMoECMgAiACKAIAQQFrIgM2AgACQCADRQRAIAIoAhAiAyACKAIUIgQ2AgQgBCADNgIAIAJCADcCECAAQRBqIAIgACgCBBEAAAwBCyACQoCAgIAwNwMoIAJCgICAgDA3AyAgAkEBNgIECyABIAEoAgxBAWs2AgwLC5UBAQN+IAG9IgJC////////////AIMhAyAAvSIEQv///////////wCDQoGAgICAgID4/wBaBEAgA0KBgICAgICA+P8AVA8LAn9BfyADQoCAgICAgID4/wBWIAAgAWNyDQAaQQEgACABZA0AGkEAIABEAAAAAAAAAABiDQAaIARCAFMEQCACQj+Hp0F/cw8LIAJCP4inCwswACABQoCAgIAQhEKAgICAcINCgICAgDBRBEAgACABEDcPCyAAIAFBOEEAQQAQrQILKQEBfyACQiCIp0F1TwRAIAKnIgMgAygCAEEBajYCAAsgACABIAIQxQULUgIBfwF+QoCAgIDgACEEIAAgASACEJMBIgMEfiADKAIgIgMoAgwoAiAtAAQEQCACRQRAQgAPCyAAEGtCgICAgOAADwsgAzUCEAVCgICAgOAACws4ACAAIAEgAhCTASIARQRAQoCAgIDgAA8LIAAoAiAoAgwiACAAKAIAQQFqNgIAIACtQoCAgIBwhAtRAgF+AX8gACAAKQOQAUEDEEkiAkKAgICAcINCgICAgOAAUgRAIAFCIIinQXVPBEAgAaciAyADKAIAQQFqNgIACyAAIAJBNCABQQMQGRoLIAILlQEBA38jAEEQayIEJAAgBCACNwMIIAEoAgAiBSABKAIEIgY2AgQgBiAFNgIAIAFCADcCACAAIAAgAUEgaiADQQN0aikDAEKAgICAMEEBIARBCGoQIRAPIAAgASkDEBAPIAAgASkDGBAPIAAgASkDIBAPIAAgASkDKBAPIAAoAhAiAEEQaiABIAAoAgQRAAAgBEEQaiQAC40BAQN/IwBBEGsiBCQAIAQgATcDCCADQQF0IQZBACEDA0ACQAJAIANBAkYNACAAQcwAQQEgAyAGakEBIARBCGoQzwEiAUKAgICAcINCgICAgOAAUg0BQX8hBSADQQFHDQAgACACKQMAEA8LIARBEGokACAFDwsgAiADQQN0aiABNwMAIANBAWohAwwACwALyAYC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IARuDAILIARBACABQQJPGyADbAwBCyAAQX9zQR92IQQgAUECayEBIAQCfiACBEAgA60iBiABQQN0IgFB5KEEajUCAH5CIIggAUHgoQRqNQIAIAZ+fEIfiAwBCyABQQJ0QYCkBGo1AgAgA61+Qh2IC6dqCyIBayABIABBAEgbC0gBAn8jAEEQayICJABBfyEDAkAgACACQQxqIAEQugENACACKAIMIgNBJWtBXEsNACAAQdmJAUEAEFBBfyEDCyACQRBqJAAgAwt1AQF/AkAgAUKAgICAcINCgICAgOB+UQRADAELAkAgAUKAgICAcFQNACABpyICLwEGQSFHDQAgAikDICIBQoCAgIBwg0KAgICA4H5SDQAMAQsgAEGiLEEAEBVCgICAgOAADwsgAaciACAAKAIAQQFqNgIAIAELrgICAXwBfwJAA0ACQAJAAkACQAJAQQcgAkIgiKciBCAEQQdrQW5JG0EJag4RAgMDAwMDAwMDAAAAAAMDBAEDCyABIALENwMADAULIAJCgICAgMCBgPz/AHwiAkL///////////8Ag0KBgICAgICA+P8AWgRAIAFCADcDAAwFCyACvyIDRAAAAAAAAODDYwRAIAFCgICAgICAgICAfzcDAAwFCyADRAAAAAAAAOBDZARAIAFC////////////ADcDAAwFCyABAn4gA5lEAAAAAAAA4ENjBEAgA7AMAQtCgICAgICAgICAfws3AwAMBAsgASACp0EEakEAEIIDGiAAIAIQDwwDCyAAIAIQjQEiAkKAgICAcINCgICAgOAAUg0BCwsgAUIANwMAQX8PC0EAC7ECAQJ/IwBBIGsiBCQAAkACQAJAIAIoAgxFBEACQAJAAkACQCACKAIIQf7///8Haw4CAQACCyAAEDUMAgsgAigCBA0DCyAAIAIQRBoLQQAhAiABRQ0DIAFCABAwGgwDCyACKAIERQ0BCyAAEDVBASECIAFFDQEgAUIAEDAaDAELIAAgAiACKAIIQQFqQQJtQQEQkQYgAEEBENEBGiABIgNFBEAgACgCACEDIARCADcCGCAEQoCAgICAgICAgH83AhAgBCADNgIMIARBDGohAwsgAyAAIABB/////wNBARBDGiADIAMoAgRBAXM2AgQgAyADIAJB/////wNBARDLARpBICECIAMoAghB/////wdHBEAgAygC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AkEAEI0FIQVBECEEA0AgA0E0aiILIAJBACAEIAVqIglBAWoiB0HgDxD8AiALIAsgA0EgaiAHQeAPEENyIgdBIHENAyAHQRBxRQ0CIANBNGogAygCPEEBIAkQ4QMNAiAEQQJtIARqIQQMAAsACyADQTRqIANBIGoQRA0BDAMLIANBNGpBARDRAUEgcUUNAgsgA0E0ahAbDAQLIANByABqIANBNGogAiAFIAUQjAUMAQsgAygCTCEFIANByABqIANBNGogAiAIIAgQjAUgAygCTCIJIAVBAWoiAiACIAlJG0EBayEIIAMoAkghByAFIQQDQAJAIAkgBCICQQFqIgRNBEAgCCECDAELIAIgB2otAABBMEcNACAEIAdqLQAAQS5HDQELCyACIAVNDQAgBSAHaiACIAdqIAkgAmsQnAEgAyAFIAJrIAlqNgJMCyADQTRqEBsLIANByABqQQAQESADKAJUDQAgAygCSAwBC0EAIAMoAkgiAkUNABogCigCACACQQAgCigCBBEBABpBAAshBCAGIAw2AgQgACAGIANBDGoQXiAERQRAIAAQfAwBCyAAIAQQYiENIAAoAtgBIgAoAgAgBEEAIAAoAgQRAQAaCyADQeAAaiQAIA0Lw3UCEn8BfiMAQaAGayIDJAAgASgCyAEiBEEAIARBAEobIQYDQCACIAZGRQRAIAEoAswBIAJBA3RqQX82AgQgAkEBaiECDAELCyABKAI8BEAgASgCzAFBfjYCDAtBACECIAEoAnwiBkEAIAZBAEobIQYCfgJAAkADQCACIAZGBEACQEECIQJBAiAEIARBAkwbIQgDQAJAIAIgCEYEQEEAIQIDQCACIAZGDQICQCABKAJ0IAJBBHRqIgQoAghBAE4NACAEKAIEIghBAkgNACAEIAEoAswBIgQgBCAIQQN0aigCAEEDdGooAgQ2AggLIAJBAWohAgwACwALIAEoAswBIgcgAkEDdGoiBCgCBEEASARAIAQgByAEKAIAQQN0aigCBDYCBAsgAkEBaiECDAELCwJAIAEoAkRFDQACQCABKAIgDQAgAS0AbkEBcQ0AIAEgACABQdIAEE82ApABIAEoAjxFDQAgASAAIAFB0wAQTzYClAELAkAgASgCTCIIRQ0AIAEoAqgBQQBIBEAgASAAIAEQygM2AqgBCyABKAKsAUEASARAIAEgACAB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KAIAEB0gAkHAABARIAIgACAJKAIMEBgQHSACIBEQEQsgACAJKAIMEBMgBEEBaiEEDAALAAtBhSlBrvwAQYzyAUH7ORAAAAtBmoIBQa78AEHY6wFB3/QAEAAAC0GuhAFBrvwAQZvrAUHf9AAQAAALA0AgAiAOTkUEQCADQYAGaiACIA1qIgQgBC0AAEECdEGAuAFqLQAAIgQQciACIARqIQIMAQsLIAwQ9gEgDCADKQOQBjcCECAMIAMpA4gGNwIIIAwgAykDgAY3AgAMDAsgDBD2ASAMIAMpA5AGNwIQIAwgAykDiAY3AgggDCADKQOABjcCAAJAIAEoAowCDQAgASgCpAIhDSADIAEoAvACNgKYBiADIAEoAoACIgk2AtwFIAMgASgChAIiCzYC4AUgACgCECECIANCADcDiAYgA0IANwOABiADIAI2ApQGIANBOzYCkAYgASgC0AIiAgRAIAEgASgCACACQQR0EF8iAjYCzAIgAkUNDQsCQCABKALcAiICRQ0AIAEtAG5BAnENACABIAEoAgAgAkEDdBBfIgI2AtgCIAJFDQ0gAUEANgLoAiABIAEoAvACNgLkAgsgASgCtAFBAE4EQCADQYAGaiICQQwQESACQQQQESACQdkAIAEoArQBEF0LIAEoArABQQBOBEAgA0GABmoiAkEMEBEgAkECEBEgAkHZACABKAKwARBdCyABKAKsAUEATgRAIANBgAZqIgJBDBARIAJBAxARIAJB2QAgASgCrAEQXQsCQCABKAKoAUEASA0AIAEoAmAEQCADQYAGaiICQeEAEBEgAiABLwGoARAqDAELIANBgAZqIgJBCBARIAJB2QAgASgCqAEQXQsgASgCmAFBAE4EQEEAIQIgAS0AbkEBcUUEQCABKAI4QQBHIQILIANBgAZqIgRBDBARIAQgAhARIAEoApwBIgJBAE4EQCADQYAGakHaACACEF0LIANBgAZqQdkAIAEoApgBEF0LIAEoAqABQQBOBEAgA0GABmoiAkEMEBEgAkECEBEgAkHZACABKAKgARBdCyABKAKQAUEATgRAIANBgAZqIgJBDBARIAJBBRARIAJB2QAgASgCkAEQXQsgASgClAFBAE4EQCADQYAGaiICQQwQESACQQUQESACQdkAIAEoApQBEF0LQQAhAgJAA0ACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAiALTgRAQQAhAiABKAKsAiIEQQAgBEEAShshBANAIAIgBEYNAiACQRRsIQYgAkEBaiECIAYgDWooAhBFDQALQdWDAUGu/ABB/foBQZQ4EAAACyACIAIgCWoiBi0AACIFQQJ0QYC4AWotAAAiB2ohBAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgBUHYAGsOIBASGhESGhESGhoaGhoaGhoaBAQBAwIaGgwMBQUFBQUFAAsCQCAFQQFrDhUJCgoLGg0HGggIGhoaBhoaDxoaGg4ACyAFQSJrIghBH0sNGEEBIAh0IgpBwOEBcQ0SIApBBXFFBEAgCEEfRw0ZIAYoAAFBMEcNGiABIAMoAoQGIAMoApgGEDMgA0GABmpB6QEQESAEIQIMIwsgBi8AASECIANCqICAgHA3A1AgA0HcBWogBCADQdAAahAnBEACQCADKALoBSIEQQBIBEAgAygCmAYhBAwBCyADIAQ2ApgGCyABIAMoAoQGIAQQMyADQYAGaiAFQQFqIAIQXSABIAkgCyADKALkBSADQZgGahCkAiECDCMLIAEgAygChAYgAygCmAYQMyADQYAGaiAFIAIQXSAEIQIMIgsgBigAASEFIAQhBgwWCyAGKAABIQdB7QAhBQwUCyAGKAABIQdB7AAhBQwTCyABIAYoAAEgA0GcBmpBABDHAyEHIAMoAtwFIAMoAuAFIAQgBxDGAwRAIAEgB0F/EGkaIANBgAZqQQ4QESAEIQIMHwsgA0LrgICAcDcDYCADQdwFaiAEIANB4ABqECdFDRIgAygC6AUhCCADKALcBSADKALgBSADKALkBSIGIAcQxgNFDRIgCEEATgRAIAMgCDYCmAYLIAEgB0F/EGkaIAVBA3MhBSADKAL0BSEHDBwLIAYtAAkhCCAGKAABIQcgASAGKAAFIANBnAZqQQAQxwMiAkEASA0PIAIgASgCrAJODQ8gASADKAKEBiADKAKYBhAzIAEgASgC1AIiBkEBajYC1AIgASgCzAIgBkEEdGoiBkEENgIEIAYgBTYCACADKAKEBiEKIAYgAjYCDCAGIApBBWo2AgggA0GABmoiBiAFEBEgBiAHEB0gBiANIAJBFGxqIgIoAgwgAygChAZrEB0gAigCDEF/RgRAIAAgAiADKAKEBkEEa0EEEOgCRQ0dCyADQYAGaiAIEBEgBCECDB0LIANCqYCAgHA3A3AgA0HcBWogBCADQfAAahAnRQ0TIAQhAiADKALoBSIEQQBIDRwgAyAENgKYBgwcCyADQquBgIBwNwOgASADQdwFaiAEIANBoAFqECcEQAJAIAMoAugFIgJBAEgEQCADKAKYBiECDAELIAMgAjYCmAYLIAEgAygChAYgAhAzIANBgAZqQfMBEBEMGAsgA0F/NgKYASADQqyBgICQzRo3A5ABIANB3AVqIAQgA0GQAWoQJ0UNAAJAIAMoAugFIgVBAEgEQCADKAKYBiEFDAELIAMgBTYCmAYLIAEgAygChAYgBRAzIANBgAZqQfMBEBEgAygC7AVBA3MhBQwYCyADQunUgYBwNwOAASADQdwFaiAEIANBgAFqECdFDREgBUEKRiEKDA0LAkAgBigAASIGQYCAgIB4ckGAgICAeEYNACADQoyBgIBwNwPgASADQdwFaiAEIANB4AFqECdFDQAgAygC6AUiAkEATgRAIAMgAjYCmAYLIANCjoCAgHA3A9ABIANB3AVqIAMoAuQFIANB0AFqECcEQCADKALoBSICQQBIDRcgAyACNgKYBgwXCyABIAMoAoQGIAMoApgGEDMgA0GABmpBACAGaxDFAwwWCyADQo6AgIBwNwPAASADQdwFaiAEIANBwAFqECcEQCADKALoBSICQQBIDRYgAyACNgKYBgwWCyADQunUgYBwNwOwASADQdwFaiAEIANBsAFqECcEQCAGQQBHIQoMDQsgASADKAKEBiADKAKYBhAzIANBgAZqIAYQxQMgBCECDBkLIAYoAAEiAkH/AUoNDyABIAMoAoQGIAMoApgGEDMgA0GABmoiBiAFQcMAa0H/AXEQESAGIAJB/wFxEBEgBCECDBgLIAYoAAEhAiADQo6AgIBwNwPwASADQdwFaiAEIANB8AFqECcEQCAAIAIQEyADKALoBSICQQBIDRQgAyACNgKYBgwUCyACQS9HDQ4gASADKAKEBiADKAKYBhAzIANBgAZqQcEBEBEgBCECDBcLIANCyYCAgHA3A6gCIANC2Lb5gnA3A6ACIANB3AVqIAQiAiADQaACahAnDRYgA0F/NgKYAiADQoGEkICQCTcDkAIgA0HcBWogAiADQZACahAnDRYgA0F/NgKIAiADQoaO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DQMgAyAGKAABNgKYBiAEIQIMDAsgBigAASICQQBIDQMgAiABKAKsAk4NAyANIAJBFGxqIggoAgxBf0cNBCAIIAMoAoQGNgIMIAgoAhAhBwNAIAciAgRAIAgoAgwgAigCBCIFayEGIAIoAgAhBwJAAkACQAJAIAIoAghBAWsOBAIBAwADCyADKAKABiAFaiAGNgAADAILIAZBgIACakGAgARPDQkgAygCgAYgBWogBjsAAAwBCyAGQYABakGAAk8NCSADKAKABiAFaiAGOgAACyAAKAIQIgZBEGogAiAGKAIEEQAADAELCyAIQQA2AhAgBCECDAsLIANCjoCAgHA3A6gFIANC2bj9gnA3A6AFIANB3AVqIAQgA0GgBWoQJwRAIAMoAugFIgJBAE4EQCADIAI2ApgGCyADIAMoAvAFIgY2ApQFIANBfzYCmAUgAyADKALsBSIEQQFrNgKQBSADQdwFaiADKALkBSICIANBkAVqECcEQCADKALoBSICQQBOBEAgAyACNgKYBgsgBEEBaiEEIAMoAuQFIQILIAEgAygChAYgAygCmAYQMyADQYAGaiIHIAVBAmtB/wFxEBEgByAEIAYQXQwLCyADQo6AgIBwNwOIBSADQpiAgICw6A43A4AFIANB3AVqIAQgA0GABWoQJwRAAkAgAygC6AUiAkEASARAIAMoApgGIQIMAQsgAyACNgKYBgsgASADKAKEBiACEDMgA0GABmoiAiAFQQJrQf8BcRARIAIgAy0A7AUQESACIAMoAvwFEB0MBwsgA0KOgICAcDcD+AQgA0KZgICAkAk3A/AEIANB3AVqIAQgA0HwBGoQJ0UNAQJAIAMoAugFIgJBAEgEQCADKAKYBiECDAELIAMgAjYCmAYLIAEgAygChAYgAhAzIANBgAZqIgIgBUECa0H/AXEQESACQckAEBEMBgsgA0F/NgLIBSADQoSAgICwlevUqn83A8AFIANB3AVqIAQgA0HABWoQJ0UNACADKALoBSIIQQBOBEAgAyAINgKYBgsgAygC7AUhCCADKAL8BSIFQcUARgR/QfQBBSAFQRtHDQFB9QELIQogCEF9cUGpAUYEQCABIAMoAoQGIAMoApgGEDMgA0GABmogChARIAAgAygC/AUQEwwGCyADQumAgIBwNwOwBSADQdwFaiADKALkBSADQbAFahAnRQ0A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DAELIAEgAzYCACACIAY2AgBBACEECyAHQRBqJAAgBAvCAwEJfyABKAIIIgZBACAGQQBKGyEFAkACQANAIAQgBUYNASAEQQJ0IQcgBEEBaiEEIAcgASgCAGooAgAgAkcNAAtBACEFDAELQX8hBSAAIAFBBCABQQRqIAZBAWoQeA0AIAEgASgCCCIEQQFqNgIIIAEoAgAgBEECdGogAjYCACABQRBqIQkgAUEMaiEHQQAhBQNAAkAgAigCICAFTARAQQAhBUEAIQQDQCAEIAIoAixODQQgBEECdCEDIARBAWohBCAAIAEgAigCECADIAIoAihqKAIAQQN0aigCBEEBEK8FRQ0ACwwBCwJAIANBACACKAIcIAVBFGxqIgYoAhAiCkEWRhsNAEEAIQQgASgCFCIIQQAgCEEAShshCwJAAkADQCAEIAtGDQEgCiAHKAIAIARBDGxqIgwoAgBHBEAgBEEBaiEEDAELCyAEQQBODQELIAAgB0EMIAkgCEEBahB4DQIgASABKAIUIgRBAWo2AhQgASgCDCAEQQxsaiIEIAYoAhA2AgACQCADRQRAIAYoAghFDQELIARBADYCCAwCCyAEIAY2AggMAQsgDEEANgIICyAFQQFqIQUMAQsLQX8PCyAFC2gCAn8BfiAAQRBqIQIgACkCBCIEp0H/////B3EhAwJAIARCgICAgAiDUEUEQEEAIQADQCAAIANGDQIgAiAAQQF0ai8BACABQYcCbGohASAAQQFqIQAMAAsACyACIAMgARCyBSEBCyABCxIAIAAgASACIANBgIABENABGgssAQF/A0AgASADRkUEQCAAIANqLQAAIAJBhwJsaiECIANBAWohAwwBCwsgAgvOAQIDfwF+IAEgAkEBELIFIgNB/////wNxIQUgACgCNCAAKAIkQQFrIANxQQJ0aiEDA0AgAygCACIERQRAQQAPCwJAIAAoAjggBEECdGooAgAiAykCBCIGQiCIp0H/////A3EgBUcgBkKAgICAgICAgECDQoCAgICAgICAwABSciAGp0H/////B3EgAkcgBkKAgICACINCAFJycg0AIANBEGogASACEGENACAEQd4BTgRAIAMgAygCAEEBajYCAAsgBA8LIANBDGohAwwACwALfwEEfyABLQAAQdsARgRAIAFBAWoiAxA/QQFrIQIgACgCECgCOCEEQdABIQEDQCABQd4BRwRAAkAgBCABQQJ0aigCACIFKAIEQf////8HcSACRw0AIAVBEGogAyACEGENACAAIAEQGA8LIAFBAWohAQwBCwsQAQALIAAgARCqAQusAgMCfwJ+AXwjAEEgayICJABEAAAAAAAA+H8hBiAAKAIIQf////8HRwRAIAAoAgAhAyACQgA3AhggAkKAgICAgICAgIB/NwIQIAIgAzYCDCACQQxqIAAQRBoCfiACKAIUIgBB/f///wdMBEAgAkEMakE1QcgEEM4BGiACKAIUIQALQoCAgICAgID4/wAgAEH+////B0YNABogAEGAgICAeEYEQEIADAELIAIoAhwhAwJ+IAIoAhhBAkYEQCADKQIADAELIAM1AgBCIIYLIQQgAEGCeEwEQCAEQY54IABrrYghBEIADAELIARCC4hC/////////weDIQQgAEH+B2qtQjSGCyEFIAQgBYQgAjUCEEI/hoS/IQYgAkEMahAbCyABIAY5AwAgAkEgaiQACw4AIABCgICAgPB+EIAGC+4PAwt/A34BfCMAQUBqIhAkAEHfAEGAAiAEQSBxGyEJIARBgANxIQsCQAJAAkACfwJAAkACQAJAAkACQAJAAkACQCABLQAAIgZBK2sOAwEDAAMLQQEhDiABQQFqIQEMAQsgAUEBaiEBCyAEQYAIcUUNASABLQAAIQYLIAZB/wFxQTBHDQACQAJAAkAgAS0AASIHQfgARwRAIAdB7wBGDQIgB0HYAEcNAQsgA0FvcQ0FIAFBAmohB0EQIQMMCQsgAyAHQc8AR3INAQwFCyADRQ0EDAMLAkACQCAHQeIARwRAIANFIAdBwgBGcQ0BIAMgB0Ewa0H/AXFBCUtyDQQgBEEQcQ0CDAcLIAMNBAsgBEEEcUUNBUECIQMgAUECaiEHDAcLIAFBAWohB0EBIQYDQCABIAZqIQMgBkEBaiEGIAMtAAAiCEH4AXFBMEYNAAtBCCEDQYACIQlBASEKIAhB/gFxQThGDQQMBgsgBEEBcSALQYACckGAAkdyDQAgAUEIaiEHQfUcIQYgASEIA0AgBkH9HEcEQCAILQAAIAYtAABHDQIgBkEBaiEGIAhBAWohCAwBCwsgC0GAAkYEQCAAELYFIhFCgICAgHCDQoCAgIDgAFEEQEKAgICA4AAhEQwJCyARp0EEaiAOEIwBDAgLRAAAAAAAAPD/RAAAAAAAAPB/IA4bIhS9IhECfyAUmUQAAAAAAADgQWMEQCAUqgwBC0GAgICAeAsiBre9UQRAIAatIREMCAtCgICAgMB+IBFCgICAgMCBgPz/AH0gEUL///////////8Ag0KAgICAgICA+P8AVhshEQwHCyABIgcgA0UNAxoMBQsgASEHDAQLIARBBHFFDQAgAUECaiEHQQghAwwCCyABCyEHQQohAwwBC0KAgICAwH4hESAHLQAAEJYBIANPDQELQQAhBiADQQpHIQwgByEBA0ACQCAGIAdqIg0tAAAiCMAhDyAIEJYBIANOBEAgCSAPRw0BAkAgDCAGQQFHcg0AIA1BAWstAABBMEcNAEEBIQYMAgsgDS0AARCWASADTg0BCyAHIAZBAWoiBmohAQwBCwtBACEMAkACQCAEQQFxDQACQCAIQS5HDQAgDS0AASEIIAZFBEAgCBCWASADTg0BCyANQQFqIQFCgICAgMB+IREgCSAIwEYNAgNAAkAgCEH/AXEQlgEgA0gEQCABLQABIQgMAQtBASEMIAkgCMBHDQIgAS0AASIIEJYBIANODQILIAFBAWohAQwACwALIAEgB00NAAJAIAEtAAAiBkHlAEcEQCADQQpGIAZBxQBGcQ0BIAZBIHJB8ABHIANBEEtyDQJBASADdEGEggRxDQEMAgsgA0EKRw0BC0EBIQwgAUEBaiEGAkACQAJAIAEtAAFBK2sOAwACAQILIAFBAmohBgwBCyABQQJqIQYLIAYtAABBOmtBdkkNACAGIQEDQCABIgZBAWohASAGLQABIgjAIQ0gCEE6a0F1Sw0AIAkgDUcNASAGLQACQTprQXVLDQALCyABIAdGBEBCgICAgMB+IREMAQsgECEJAkAgASAHayINQQJqIg9BwQBPBEAgACgCECIGQRBqIA8gBigCABEDACIJRQ0BC0EAIQZBACEIIA4EQCAJQS06AABBASEICyANQQAgDUEAShshDgNAIAYgDkZFBEAgBiAHai0AACINQd8ARwRAIAggCWogDToAACAIQQFqIQgLIAZBAWohBgwBCwsgCCAJakEAOgAAAn4CQAJAIARBwABxBEACQAJAAkACQCABLQAAQewAaw4DAQIAAwsgAUEBaiEBQYABIQsMBQsgAUEBaiEBQYACIQsMBAsgAUEBaiEBQYADIQsMAwsgBEGABHEEQEKAgICAwH4gCg0EGiALQYABIAwbIQsMAwsgA0EKRw0BDAILIAsNASAEQYAEcQRAQoCAgIDAfiAKDQMaIAxFQQd0IQsMAgtBACELIANBCkYNAQtCgICAgMB+IAwNARoLAkACQAJAAkACQAJAIAtBGXcOBAABAgMECwJ8IAwgA0EKRnFFBEAgCSAJLQAAIgRBLUZqIQcDQCAHIgZBAWohByAGLQAAIghBMEYNAAtCmLPmzJmz5swZIRIgA0EKRwRAQQAgA2usIAOsgCESCyADrSETQQAhB0IAIREDQAJAIAhB/wFxIgVFDQAgBRCWASIFIANODQAgESAFrSARIBN+fCARIBJWIgUbIREgBSAHaiEHIAYtAAEhCCAGQQFqIQYMAQsLIBG6IRQgBwRAIAO3IAe3EI8DIBSiIRQLIBSaIBQgBEEtRhsMAQsgCRDkBQsiFL0hESARAn8gFJlEAAAAAAAA4EFjBEAgFKoMAQtBgICAgHgLIga3vVINBCAGrQwFC0KAgICAwH4gCiAMcg0EGiAAIAkgAyAEQQAgACgCECgCmAIRIgAMBAtCgICAgMB+IAoNAxogACAJIAMgBCAFIAAoAhAoArQCESIADAMLQoCAgIDAfiADQQpHDQIaIAAgCUEKIARBACAAKAIQKALQAhEiAAwCCxABAAtCgICAgMB+IBFCgICAgMCBgPz/AH0gEUL///////////8Ag0KAgICAgICA+P8AVhsLIREgD0HBAEkNASAAKAIQIgBBEGogCSAAKAIEEQAADAELIAAQfEKAgICA4AAhEQsgASEHCyACBEAgAiAHNgIACyAQQUBrJAAgEQtbAQR/IAAoAgAiA0EAIANBAEobIQVBACEDA0ACQCADIAVHBH8gACgCBCIGIANBPGxqKAIAIAFHDQEgBiADQTxsaiACQQJ0aigCBAVBAAsPCyADQQFqIQMMAAsAC0gBA38gAkEAIAJBAEobIQIDQCACIANGBEBBAA8LIAEgA2ohBCADQQF0IQUgA0EBaiEDIAAgBWovAQAgBC0AAGsiBEUNAAsgBAu/AQICfgJ/IAG9IgNC/////////weDIQIgA0I/iKchBAJAAkAgA0I0iKdB/w9xIgUEQCAFQf8PRw0BIAJQRQRAIAAQNUEADwsgACAEEIwBQQAPCyACUARAIAAgBBCJAUEADwsgAkIMhiICIAJ5IgOGIQJBACADp2shBQwBCyACQguGQoCAgICAgICAgH+EIQILIAAgBUH+B2s2AgggAEECEEFFBEAgACgCECACNwIAIAAgBDYCBEEADwsgABA1QSALqwECAX4CfyABKQIEQoCAgIAIgyEDIAAtAAdBgAFxRQRAIANQBEAgAEEQaiABQRBqIAIQYQ8LQQAgAUEQaiAAQRBqIAIQuQVrDwsgAUEQaiEEIABBEGohACADUARAIAAgBCACELkFDwsgAkEAIAJBAEobIQVBACEBA0AgASAFRgRAQQAPCyABQQF0IQIgAUEBaiEBIAAgAmovAQAgAiAEai8BAGsiAkUNAAsgAgvTBAEIfyADIAEoAgAiBCgCHEEDbEECbSIFIAMgBUobIQgCQCACBEAgACACKAIUIAhBA3QQiQIiA0UNASACIAM2AhQLIAQoAhgiBkEBaiIFIQMDQCADIgJBAXQhAyACIAhJDQALAkAgAiAFRwRAIAAgAkECdCIHIAhBA3RqQTBqECkiCkUNAiAEKAIIIgMgBCgCDCIFNgIEIAUgAzYCACAEQgA3AgggByAKaiIGIAQgBCgCIEEDdEEwahAfIQUgACgCECIDKAJQIgkgBUEIaiILNgIEIAUgA0HQAGo2AgwgBSAJNgIIIAMgCzYCUCAFIAJBAWsiCTYCGEEAIQMgCkEAIAcQKxogBUEwaiECA0AgAyAFKAIgT0UEQAJAIAIoAgQiB0UEQCADQQFqIQMMAQsgAiACKAIAQYCAgGBxIAUgByAJcUF/c0ECdGoiBygCAEH///8fcXI2AgAgByADQQFqIgM2AgALIAJBCGohAgwBCwsgACgCECIAQRBqIAQgBCgCGEF/c0ECdGogACgCBBEAAAwBCyAEKAIIIgIgBCgCDCIDNgIEIAMgAjYCACAEQgA3AgggACAEIAZBf3NBAnRqIAVBAnQiAiAIQQN0akEwahCJAiIDRQRAIAAoAhAiACgCUCIBIARBCGoiAjYCBCAEIABB0ABqNgIMIAQgATYCCCAAIAI2AlBBfw8LIAAoAhAiACgCUCIEIAIgA2oiBkEIaiICNgIEIAYgAEHQAGo2AgwgBiAENgIIIAAgAjYCUAsgASAGNgIAIAYgCDYCHEEADwtBfwvTAQIFfwF+AkAgASkCBCIHp0H/////B3EiBEELa0F2SQ0AIAFBEGohAgJ/IAdCgICAgAiDUCIFRQRAIAIvAQAMAQsgAi0AAAsiAUEwayIDQQlLDQACfwJAIAFBMEcEQEEBIQEDQCABIARGDQICfyAFRQRAIAIgAUEBdGovAQAMAQsgASACai0AAAtBMGsiBkEJSw0EIAFBAWohASAGrSADrUIKfnwiB6chAyAHQoCAgIAQVA0ACwwDC0EAIgMgBEEBRw0BGgsgACADNgIAQQELDwtBAAupAgIDfwF+AkAgACACEDhFDQAgAqciBC8BBkEORgRAIAAgASAEKAIgKQMAENAFDwsgAUKAgICAcFQNAAJAIAAgAkE7IAJBABAUIgJC/////29YBEBBfyEDIAJCgICAgHCDQoCAgIDgAFENASAAQcYwQQAQFQwBCyABpyEEIAKnIQUCQANAAkAgBCgCECgCLCIDRQRAQQAhAyAELwEGQTBHDQQgBCAEKAIAQQFqNgIAIAStQoCAgIBwhCEBA0AgACABEIwCIgFCgICAgHCDIgZCgICAgCBRDQRBfyEDIAZCgICAgOAAUQ0FIAGnIAVGBEAgACABEA8MAwsgABB7RQ0ACyAAIAEQDwwECyADIgQgBUcNAQsLQQEhAwwBC0EAIQMLIAAgAhAPCyADC9IDAgJ+An8jAEEgayIEJAACQCABQv///////////wCDIgNCgICAgICAwIA8fSADQoCAgICAgMD/wwB9VARAIAFCBIYgAEI8iIQhAyAAQv//////////D4MiAEKBgICAgICAgAhaBEAgA0KBgICAgICAgMAAfCECDAILIANCgICAgICAgIBAfSECIABCgICAgICAgIAIUg0BIAIgA0IBg3whAgwBCyAAUCADQoCAgICAgMD//wBUIANCgICAgICAwP//AFEbRQRAIAFCBIYgAEI8iIRC/////////wODQoCAgICAgID8/wCEIQIMAQtCgICAgICAgPj/ACECIANC////////v//DAFYNAEIAIQIgA0IwiKciBUGR9wBJDQAgBEEQaiAAIAFC////////P4NCgICAgICAwACEIgIgBUGB9wBrEGcgBCAAIAJBgfgAIAVrEI4CIAQpAwhCBIYgBCkDACIAQjyIhCECIAQpAxAgBCkDGIRCAFKtIABC//////////8Pg4QiAEKBgICAgICAgAhaBEAgAkIBfCECDAELIABCgICAgICAgIAIUg0AIAJCAYMgAnwhAgsgBEEgaiQAIAIgAUKAgICAgICAgIB/g4S/Cw0AIAAgASACQQAQvAELugMCAX4DfyMAQRBrIgQkAAJAAkACQAJAAkADQAJAIAEhAwJAAkACQAJAAkACQAJAQQcgAUIgiKciBSAFQQdrQW5JG0ELag4TAAECCQcKCgoKCgYNBQULCgoNDQoLIAJBAUYNAiAAIAEQDyAAQdLHAEEAEBUMCwsgAkEBRg0BIAAgARAPIABB8MYAQQAQFQwKCyACQQFHDQELIAEhAwwJCyAAIAEQDyAAQZDHAEEAEBUMBwsgAUL/////D4MhAwwHC0KAgICA4AAhAyAAIAFBARCaASIBQoCAgIBwg0KAgICA4ABSDQEMBgsLIAAgBEEIaiABEOUBIQIgACABEA8gAkUNAyAEIAIgAhCBAiIFaiIGNgIMQgAhAwJAIAUgBCgCCEYNACAAIAYgBEEMakEAQQQQuAIiA0KAgICAcINCgICAgOAAUQ0AIAQgBCgCDBCBAiAEKAIMaiIFNgIMIAQoAgggBSACa0YNACAAIAMQD0KAgICAwH4hAwsgACACEFQMBAsgACABEA8gAEGyxwBBABAVDAILIAAgARAPC0KAgICAwH4hAwwBC0KAgICA4AAhAwsgBEEQaiQAIAMLiwICA38BfiMAQRBrIgUkACAFIAI3AwgCQCAALwHoAUGAAkkNACAAIAJB3QEgAkEAEBQiAkKAgICAcIMiB0KAgICAMFENAAJAIAdCgICAgOAAUQ0AIAAgAkElEEsiBkUNACAGKAIEBEAgACACEA8MAgsgBiADEPcDQQJ0IgRqKAIIIgNFBEAgBSAEQcDAAWo2AgAgAEHdPCAFEBUMAQtBASEEIAMgAygCAEEBajYCACAAIAOtQoCAgIBwhEKAgICAMEEBIAVBCGoQLyIHQoCAgIBwg0KAgICA4ABRDQAgACACEA8gASAHNwMADAELIAAgAhAPIAFCgICAgDA3AwBBfyEECyAFQRBqJAAgBAtfAQF/IAFBEGohAwJAIAEtAAdBgAFxBEAgACADIAJBAXQQHxoMAQtBACEBIAJBACACQQBKGyECA0AgASACRg0BIAAgAUEBdGogASADai0AADsBACABQQFqIQEMAAsACwvvAgIBfwF8IwBBIGsiAyQAIAECfwJ/AkACQANAAkACQAJAAkBBByACQiCIpyIBIAFBB2tBbkkbIgEOCAAAAAADAwMBAgsgAqcMBgtBACEAIAJCgICAgMCBgPz/AHwiAkL///////////8Ag0KAgICAgICA+P8AVg0DIAK/IgREAAAAAAAAAABjDQNB/wEgBEQAAAAAAOBvQGQNBhoCfyAEniIEmUQAAAAAAADgQWMEQCAEqgwBC0GAgICAeAsMBgsgAUF3Rg0DCyAAIAIQjQEiAkKAgICAcINCgICAgOAAUg0AC0F/IQALQQAMAgsgACgC2AEhASADQgA3AhQgA0KAgICAgICAgIB/NwIMIAMgATYCCCADQQhqIgEgAqdBBGoQRBogAUEAENEBGiADQRxqIAFBABCpASABEBsgACACEA8gAygCHAshAUEAIQBB/wEgASABQf8BThsiAUEAIAFBAEobCzYCACADQSBqJAAgAAtPAQJ/IwBBIGsiAyQAAn8gACADQQxqIAIQqwUiBEUEQCABQgA3AwBBfwwBCyABIARBARCCAxogACAEIANBDGoQXkEACyEAIANBIGokACAAC6gBAQV/IACnIgMoAhAiAUEwaiEEIAEgASgCGEF/c0ECdEGkfnJqKAIAIQEDQCABRQRAQQAPCyAEIAFBAWsiBUEDdGoiASgCACECIAEoAgRBNkcEQCACQf///x9xIQEMAQsLQQEhAQJAIAJB/////wNLDQAgAygCFCAFQQN0aikDACIAQoCAgIBwg0KAgICAkH9SDQAgAKcoAgRB/////wdxQQBHIQELIAELywECAn8BfiMAQRBrIgYkAAJAAkAgAkKAgICAcFQNACACpyIHLwEGQQxHDQAgBy0AKUEMRw0AIAAgASADIAMEfyAEBSAGQoCAgIAwNwMIIAZBCGoLIAUgBy4BKiAHKAIkERIAIQgMAQtCgICAgOAAIQgCQCAAIAIgASADIAQQISIBQoCAgIBwg0KAgICA4ABSBEAgAUL/////b1YNASAAIAEQDyAAQY4xQQAQFQsgBUEANgIADAELIAVBAjYCACABIQgLIAZBEGokACAIC5cBAAJAAkACQAJAAkAgAUIgiKdBA2oOAgEAAgsgACAAIAEgAyAEEIwEIAJBAEEAEC8PCyAAIAEQDwJAIAAgAaciAxCnBUEASA0AIAAgAxCmBUEASA0AIAAgAxClBSIBQoCAgIBwg0KAgICA4ABSDQMLIABBAhCPBAwBCyAAIAEQDyAAQfL2AEEAEBULQoCAgIDgACEBCyABC+oDAQV/IwBBEGsiBiQAAkACQAJAAn8gACgCECIEKAKoASIDRQRAIAItAABBLkcEQCAAIAIQ8QUMAgsgARCoBSEFQQAhAyAAIAIQPyAFIAFrQQAgBRsiBWpBAmoQKSIHRQ0EIAcgASAFEB8iASAFakEAOgAAAkADQAJAIAItAABBLkcNAEECIQMCQAJAIAItAAFBLmsOAgABAgsgAi0AAkEvRw0BIAEtAABFDQMgARCoBSIDQQFqIAEgAxsiA0HZkAEQ8gNFDQEgA0HYkAEQ8gNFDQEgAyABIANJa0EAOgAAQQMhAwsgAiADaiECDAELCyABLQAARQ0AIAEQPyABakEvOwAACyABED8gAWogAhDlBSABIQIMAgsgACABIAIgBCgCsAEgAxEHAAsiAkUNAQsgACACEKoBIgFFBEAgACgCECIAQRBqIAIgACgCBBEAAAwBCyAAIAEQ4QUiAwRAIAAoAhAiBEEQaiACIAQoAgQRAAAgACABEBMMAgsgACABEBMgBCgCrAEiAUUEQCAGIAI2AgAgAEHqlgEgBhDGAiAAKAIQIgBBEGogAiAAKAIEEQAADAELIAAgAiAEKAKwASABEQEAIQMgACgCECIAQRBqIAIgACgCBBEAAAwBC0EAIQMLIAZBEGokACADCzUBAX8gACgCgAIiB0UEQCAAQZD2AEEAEBVCgICAgOAADwsgACABIAIgAyAEIAUgBiAHEToAC/4EAQl/IwBBEGsiBiQAAn9BfyAAIAZBDGogAkEAEMICDQAaIAEoAhAtADNBCHFFBEAgACADQTAQwAIMAQsgAS0ABUEIcQRAIAYoAgwiAyABKAIoIgVJBEAgAyEEA0AgBCAFRkUEQCAAIAEoAiQgBEEDdGopAwAQDyAEQQFqIQQMAQsLIAEgAzYCKAsgASgCFCADQQBOBH4gA60FQoCAgIDAfiADuL0iAkKAgICAwIGA/P8AfSACQv///////////wCDQoCAgICAgID4/wBWGws3AwBBAQwBCyAAIAZBBGogASgCFCkDABB3GiAGKAIMIgghBQJAIAYoAgQiByAITQ0AIAEoAhAiCigCICIEIAcgCGtPBEADQCAHIgUgCE0NAiAAIAEgACAFQQFrIgcQqQUiCRD5AyEEIAAgCRATIAQNAAwCCwALIApBMGoiByEMA0AgBCAJTARAA0AgBCALTA0DAkAgBygCBCIERQ0AIAAgBkEIaiAEEKwBRQ0AIAYoAgggBUkNACAAIAEgBygCBBD5AxogASgCECIKIAtBA3RqQTBqIQcLIAdBCGohByALQQFqIQsgCigCICEEDAALAAUCQCAMKAIEIgRFDQAgACAGQQhqIAQQrAFFDQAgBigCCCIEIAVJDQAgBSAEQQFqIAwtAANBBHEbIQULIAxBCGohDCAJQQFqIQkgCigCICEEDAELAAsACyAAIAEoAhQgBUEATgR+IAWtBUKAgICAwH4gBbi9IgJCgICAgMCBgPz/AH0gAkL///////////8Ag0KAgICAgICA+P8AVhsLECBBASAFIAhNDQAaIAAgA0Ht6QAQbwshBCAGQRBqJAAgBAtsAgJ/AXwjAEEQayICJAACfyABQiCIpyIDBEBBACADQQtqQRJJDQEaC0F/IAAgAkEIaiABEEINABogAisDCCIEvUKAgICAgICA+P8Ag0KAgICAgICA+P8AUiAEnCAEYXELIQAgAkEQaiQAIAAL4AMCBH8CfiABQQBIBEAgAUH/////B3GtDwsCQCABIAAoAhAiBCgCLEkEQAJ+AkAgBCgCOCABQQJ0aigCACICKQIEIgZCgICAgICAgIBAg0KAgICAgICAgMAAUg0AIAJBEGohBCAGp0H/////B3EhBQJAIAZCgICAgAiDUEUEQCAFRQ0CAkAgBCIBLwEAIgNBLUcNACACQRJqIQEgAi8BEiIDQTBHDQBCgICAgMD+/wMgBUECRg0EGgsgA0E6a0F1Sw0BIANByQBHIAQgBUEBdGogAWtBEEdyDQIgAUECakGgwAFBDhBhRQ0BDAILIAVFDQECQCAEIgEtAAAiA0EtRw0AIAJBEWohASACLQARIgNBMEcNAEKAgICAwP7/AyAFQQJGDQMaCyADQTprQXVLDQAgA0HJAEcgBCAFaiABa0EIR3INASABQQFqQfYcQQcQYQ0BCyACIAIoAgBBAWo2AgAgACACrUKAgICAkH+EEI0BIgZCgICAgHCDQoCAgIDgAFENAyAAIAYQKCIHQoCAgIBwg0KAgICA4ABRBEAgACAGEA8gBw8LIAIgB6cQgwIhASAAIAcQDyABRQ0DIAAgBhAPC0KAgICAMAsPC0Hv3wBBrvwAQdkYQfKLARAAAAsgBgvbAQEDfwJAIAAgASgCGEEBakECdCICIAEoAhxBA3RqQTBqIgMQKSIERQRAQQAhAgwBCyAEIAEgASgCGEF/c0ECdGogAxAfIAJqIgJBATYCACAAKAIQIQEgAkECOgAEIAEoAlAiAyACQQhqIgQ2AgQgAiABQdAAajYCDCACIAM2AgggASAENgJQQQAhASACQQA6ABAgAigCLCIDBEAgAyADKAIAQQFqNgIACyACQTBqIQMDQCABIAIoAiBPDQEgACADKAIEEBgaIANBCGohAyABQQFqIQEMAAsACyACC+oBAgd/AX4gACIDQdAAaiEGIAFBGGohByABKAIcIQADQCAAIAdGRQRAIAAoAgQhCCAAQQJrLwEAIQICQAJAIABBA2siBC0AACIFQQJxBEAgASgCECACQQN0aikDACIJQiCIp0F0Sw0BDAILIAEoAhQgAkEDdGopAwAiCUIgiKdBdUkNAQsgCaciAiACKAIAQQFqNgIAIAQtAAAhBQsgACAJNwMQIAAgAEEQajYCCCAEIAVBAXI6AAAgAEEEa0EDOgAAIAMoAlAiAiAANgIEIAAgBjYCBCAAIAI2AgAgAyAANgJQIAghAAwBCwsLowECAX8CfiMAQRBrIgMkACADIAE3AwgCfwJAIAJCgICAgHBaBEAgACACQdkBIAJBABAUIgVCgICAgHCDIgRCgICAgCBRIARCgICAgDBRckUEQEF/IARCgICAgOAAUQ0DGiAAIAAgBSACQQEgA0EIahAvECYMAwsgACACEDgNAQsgAEH+8wBBABAVQX8MAQsgACABIAIQvgULIQAgA0EQaiQAIAALKwEBfyABQRBrIgMgACADKQMAIAFBCGspAwAQwAUgAketQoCAgIAQhDcDAAuVCgMEfgl/AnwjAEEQayIKJABBqgFBqQEgAhshDiABQQhrIg8pAwAhAyABQRBrIgwpAwAhBQJAAkACQAJAA0BBByADQiCIpyIBIAFBB2tBbkkbIQcgBUL/////D4MhBgJAAkACQAJAAkACQANAAkBBByAFIgRCIIinIgEgAUEHa0FuSRsiAUELaiIIQRJLQQEgCHRBh5AQcUVyDQAgB0ELaiIIQRJLQQEgCHRBh5AQcUVyDQAgASAHckUEQCAEpyADp0YhCQwMCwJAAnwCfCABQQdGBEAgB0EAIAdBB0cbDQMgBEKAgICAwIGA/P8AfL8iECAHQQdGDQEaIAOntwwCCyAHQQdHIAFyDQIgBKe3CyEQIANCgICAgMCBgPz/AHy/CyERIBAgEWEhCQwMCyABQXVHIAdBdUdxRQRAIABBqQEgBCADIAAoAhAoAtwCERwAIglBAE4NDAwLCyAAKAIQIQggAUF3RyAHQXdHcUUEQCAAQakBIAQgAyAIKALAAhEcACIJQQBODQwMCwsgAEGpASAEIAMgCCgCpAIRHAAiCUEATg0LDAoLIAEgB0YEQAJAIAdBf0cNACAAIApBCGogBCADIA5BAEECEIUCIgFFDQAgACAEEA8gACADEA8gAUEASA0LIAwgCikDCDcDAEEAIQEMDQsgACAEIANBABC8ASEJDAsLQQEhCSABQQJGIAdBA0ZxIAdBAkYgAUEDRnFyDQoCQAJAIAFBeUYEQEEAIQlBeSELIAciDSEIAkAgB0ELag4NAgICBwgHBwcHBwcCBQALIAdBB0YNAQwGCyAHQXlHDQFBeSENIAYhBSABIQgCQAJAIAFBAWoOCQkBBAgICAgIAQALIAFBC2pBA0kNAAwHCyABQXZGIQlBeSEHCwJAAkAgCUUgB0F2R3ENACAAKAIQKAKMASIIBEAgCC0AKEEEcQ0BCwJAAkAgAUF5RwRAIAQhBQwBCyAAIAQQvAIiBUKAgICAcINCgICAgOB+Ug0BCyAHQXlHDQIgACADELwCIgNCgICAgHCDQoCAgIDgflENAgsgACAFEA8gACADEA9BACEJDA0LIAAgBBBsIgVCgICAgHCDQoCAgIDgAFENCCAAIAMQbCIDQoCAgIBwg0KAgICA4ABRDQoLIAAgBSADEMAFIQkMCwsgBiEFIAFBAUYNAAsgB0EBRw0BCyADQv////8PgyEDIAQhBQwFCyABIgtBf0cNACAHQQtqIgFBEk1BAEEBIAF0QYeQEHEbDQJBfyELIAdBfnFBeEYNAgsgB0F/RwR/IAcFIAtBfnFBeEYgC0ELaiIBQRJNQQBBASABdEGHkBBxG3INAkF/CyENIAshCAsCfwJAIARCgICAgHBUDQAgBKcsAAVBAE4NAEEBIA1BfnFBAkYNARoLQQAhASADQoCAgIBwWgR/IAOnLAAFQQBIBUEACyAIQX5xQQJGcQshCSAAIAQQDyAAIAMQDwwFCyAAIApBCGogBCADIA5BAEECEIUCIggEQCAAIAQQDyAAIAMQD0EAIQEgCEEASA0EIAwgCikDCDcDAAwGCyAAIARBAhCaASIFQoCAgIBwg0KAgICA4ABRDQAgACADQQIQmgEiA0KAgICAcINCgICAgOAAUg0BDAILCyADIQULIAAgBRAPCyAMQoCAgIAwNwMAIA9CgICAgDA3AwBBfyEBDAELIAwgAiAJR61CgICAgBCENwMAQQAhAQsgCkEQaiQAIAELhAgCAn4FfyMAQSBrIgYkAEEHIAFBCGsiBykDACIDQiCIpyIFIAVBB2tBbkkbIQQCQAJAAkACQEEHIAFBEGsiBSkDACICQiCIpyIBIAFBB2tBbkkbIgFBB0cgBEEHR3JFBEAgBUKAgICAwH4gAkKAgICAwIGA/P8AfL8gA0KAgICAwIGA/P8AfL+gvSICQoCAgIDAgYD8/wB9IAJC////////////AINCgICAgICAgPj/AFYbNwMADAELIAFBf0cgBEF/R3EEfyABBQJAAkAgAUF/RgRAIARBB2oiCEEKS0EBIAh0QYEMcUVyDQELIARBf0cNASABQQdqIgFBCksNAEEBIAF0QYEMcQ0BCyAAIAZBGGogAiADQZ0BQQBBAhCFAiIBRQ0AIAAgAhAPIAAgAxAPIAFBAEgNBCAFIAYpAxg3AwAMAgsgACACQQIQmgEiAkKAgICAcINCgICAgOAAUQ0CIAAgA0ECEJoBIgNCgICAgHCDQoCAgIDgAFEEQCAAIAIQDwwEC0EHIANCIIinIgEgAUEHa0FuSRshBEEHIAJCIIinIgEgAUEHa0FuSRsLQXlHIARBeUdxRQRAIAUgACACIAMQxAIiAjcDAEEAIQEgAkKAgICAcINCgICAgOAAUQ0DDAQLIAAgAhBsIgJCgICAgHCDQoCAgIDgAFENASAAIAMQbCIDQoCAgIBwg0KAgICA4ABRBEAgACACEA8MAwtBByACQiCIpyIBIAFBB2tBbkkbIgFBByADQiCIpyIEIARBB2tBbkkbIgRyRQRAIAUCfiADxCACxHwiAkKAgICACHxC/////w9YBEAgAkL/////D4MMAQtCgICAgMB+IAK5vSICQoCAgIDAgYD8/wB9IAJC////////////AINCgICAgICAgPj/AFYbCzcDAAwBCyABQXVHIARBdUdxRQRAIABBnQEgBSACIAMgACgCECgC2AIRGgANAwwBCyABQXdHIARBd0dxRQRAIABBnQEgBSACIAMgACgCECgCvAIRGgBFDQEMAwsCQCABQXZHIARBdkdxRQRAIAAoAhAhAQwBCyAAIAZBEGogAhBuBEAgACADEA8MBAsgACAGQQhqIAMQbg0DAkAgACgCECIBKAKMASIERQ0AIAQtAChBBHFFDQAgBisDEBC9AkUNACAGKwMIEL0CDQELIAVCgICAgMB+IAYrAxAgBisDCKC9IgJCgICAgMCBgPz/AH0gAkL///////////8Ag0KAgICAgICA+P8AVhs3AwAMAQsgAEGdASAFIAIgAyABKAKgAhEaAA0CC0EAIQEMAgsgACADEA8LIAVCgICAgDA3AwAgB0KAgICAMDcDAEF/IQELIAZBIGokACABC5ADAQl/IwBBMGsiByQAAkAgAkKAgICAcFQNAEETIQUCQCACpyIKLQAFQQRxRQ0AIAAoAhAoAkQgCi8BBkEYbGooAhQiCEUNAEEDQRMgCCgCBBshBQtBfyEJIAAgB0EsaiAHQShqIAogBRCOAQ0AIAOnQQAgA0L/////b1YbIQwgBygCLCEIIAcoAighCyAFQQ9LIQ1BACEFAkADQCAFIAtHBEACQAJAIAxFDQAgAEEAIAwgCCAFQQN0aigCBBBMIgZFDQAgBkEATg0BDAQLIA1FBEAgACAHQQhqIAogCCAFQQN0aigCBBBMIgZBAEgNBCAGRQ0BIAcoAgghBiAAIAdBCGoQSCAGQQRxRQ0BCyAAIAIgCCAFQQN0aiIGKAIEIAJBABAUIgNCgICAgHCDQoCAgIDgAFENAyAGKAIEIQYCfyAEBEAgACABIAYgAxBFDAELIAAgASAGIANBBxAZC0EASA0DCyAFQQFqIQUMAQsLIAAgCCALEFpBACEJDAELIAAgCCALEFoLIAdBMGokACAJC6UBAQF+AkACQAJ+IARBBHEEQEEtIQIgACABEFkMAQtBLCECIAAgARAlCyIBQoCAgIBwg0KAgICA4ABRDQAgACACEHYiBUKAgICAcINCgICAgOAAUQ0AIABBEBApIgIEQCACQQA2AgwgAiAEQQNxNgIIIAIgATcDACAFQoCAgIBwVA0CIAWnIAI2AiAMAgsgACAFEA8LIAAgARAPQoCAgIDgAA8LIAULxAEBBH8gAaciBSACNgIgIAVCADcCJAJAIAIoAjwiBkUNAAJAIAAgBkECdBBfIghFDQAgBSAINgIkQQAhBQNAIAUgAigCPE4NAiACKAIkIAVBA3RqIgcvAQIhBgJAIActAAAiB0EBcQRAIAAgBCAGIAdBAXZBAXEQiwQiBg0BDAMLIAMgBkECdGooAgAiBiAGKAIAQQFqNgIACyAIIAVBAnRqIAY2AgAgBUEBaiEFDAALAAsgACABEA9CgICAgOAAIQELIAELiAEBAn4gACABEC0hAgJAIAFBAEgNACAAKAIQKAI4IAFBAnRqKAIAKQIEIgNCgICAgICAgIBAg0KAgICAgICAgIB/UiADQoCAgIDw////P4NCAFIgA0KAgICAgICAgEBUcnEgA0L/////D4NCgICAgAhRcg0AIABBnoABIAJBnIABEL4BIQILIAILZAECfwJAAkAgAUKAgICAcFQNACABEMYFDQBBfyEDIAAgAhAxIgRFDQEgACAEENcFIQIgACAEEBMgAkKAgICAcINCgICAgOAAUQ0BIAAgAUE2IAJBARAZQQBIDQELQQAhAwsgAws1AAJAIAJFIAFCgICAgHBUcg0AIAEQxgUNACAAIAFBNiAAIAIQLUEBEBlBAE4NAEF/DwtBAAsMACAAIAFBuyYQjwELaAIBfwF+AkAgACABQekAIAFBABAUIgRCgICAgHCDQoCAgIDgAFIEQCAAIAQQJiEDIAAgAUHAACABQQAQFCIBQoCAgIBwg0KAgICA4ABSDQELQQAhA0KAgICA4AAhAQsgAiADNgIAIAELFAEBfiAAIAEQJSECIAAgARAPIAIL9gEBBH8gACgCyAEiBSgCECIEQTBqIQYgBCAEKAIYIAFxQX9zQQJ0aigCACEEAkADQCAERQ0BIAEgBiAEQQFrIgdBA3RqIgQoAgRHBEAgBCgCAEH///8fcSEEDAELCyAFKAIUIAdBA3RqIQUCQCADQQFGDQAgBTUCBEIghkKAgICAwABRBEAgACACEA8gACAEKAIEENkBQX8PCyAELQADQQhxDQAgACACEA8gACABQc4dEI8BQX8PCyAAIAUgAhAgQQAPCyAAIAApA8ABIAEgAgJ/IAAoAhAoAowBIgMEQEGAgAYgAygCKEEBcQ0BGgtBgIACCxDQAQuKAQEBfwJAIAJCgICAgHCDQoCAgICQf1EgA0KAgICAcINCgICAgJB/UXFFBEAgAEGN9wBBABAVDAELIAAgAUESEGUiAUKAgICAcINCgICAgOAAUQ0AIAGnIgQgAz4CJCAEIAI+AiAgACABQdUAQgBBAhAZGiABDwsgACADEA8gACACEA9CgICAgOAACw0AIAAgAUHOlQEQ/wMLZwEBfwJAIAFBAE4EQCAAKAIQIgIoAiwgAU0NASACKAI4IAFBAnRqKAIAIgEgASgCAEEBajYCACAAIAFBBBCABA8LQfKRAUGu/ABBzhdBmdIAEAAAC0HZ3wBBrvwAQc8XQZnSABAAAAtEAQF/IABB+AFqIQIgAEH0AWohAAN/IAAgAigCACICRgRAQQAPCyABIAJBBGsoAgBGBH8gAkEIawUgAkEEaiECDAELCwtSAgJ/AX4CQCAAKAIQKAKMASIBRQ0AIAEpAwgiA0KAgICAcFQNACADpyIBLwEGEO4BRQ0AIAEoAiAiAS0AEkEEcUUNACAAIAEoAkAQGCECCyACC6oPAgV/D34jAEHQAmsiBSQAIARC////////P4MhCyACQv///////z+DIQogAiAEhUKAgICAgICAgIB/gyENIARCMIinQf//AXEhCAJAAkAgAkIwiKdB//8BcSIJQf//AWtBgoB+TwRAIAhB//8Ba0GBgH5LDQELIAFQIAJC////////////AIMiDEKAgICAgIDA//8AVCAMQoCAgICAgMD//wBRG0UEQCACQoCAgICAgCCEIQ0MAgsgA1AgBEL///////////8AgyICQoCAgICAgMD//wBUIAJCgICAgICAwP//AFEbRQRAIARCgICAgICAIIQhDSADIQEMAgsgASAMQoCAgICAgMD//wCFhFAEQCADIAJCgICAgICAwP//AIWEUARAQgAhAUKAgICAgIDg//8AIQ0MAwsgDUKAgICAgIDA//8AhCENQgAhAQwCCyADIAJCgICAgICAwP//AIWEUARAQgAhAQwCCyABIAyEUARAQoCAgICAgOD//wAgDSACIAOEUBshDUIAIQEMAgsgAiADhFAEQCANQoCAgICAgMD//wCEIQ1CACEBDAILIAxC////////P1gEQCAFQcACaiABIAogASAKIApQIgYbeSAGQQZ0rXynIgZBD2sQZ0EQIAZrIQYgBSkDyAIhCiAFKQPAAiEBCyACQv///////z9WDQAgBUGw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AgQLIBIgFHwhEgwDCyADRSEFIABBAEgNAQsgAikDcEIAUw0AIAIgAigCBEEBazYCBAsgBUUNAEGg1ARBHDYCACACEJoEQgAhE0IADAELIAEoApAGIgBFBEAgASAGt0QAAAAAAAAAAKIQqwEgASkDACETIAEpAwgMAQsgEiATUiATQglVckUEQCABQTBqIAYQeSABQSBqIAAQhgIgAUEQaiABKQMwIAEpAzggASkDICABKQMoEC4gASkDECETIAEpAxgMAQsgEkKaBFkEQEGg1ARBxAA2AgAgAUHgAGogBhB5IAFB0ABqIAEpA2AgASkDaEJ/Qv///////7///wAQLiABQUBrIAEpA1AgASkDWEJ/Qv///////7///wAQLiABKQNAIRMgASkDSAwBCyASQut1VwRAQaDUBEHEADYCACABQZABaiAGEHkgAUGAAWogASkDkAEgASkDmAFCAEKAgICAgIDAABAuIAFB8ABqIAEpA4ABIAEpA4gBQgBCgICAgICAwAAQLiABKQNwIRMgASkDeAwBCyAKBEAgCkEITARAIAFBkAZqIAdBAnRqIgAoAgAhCQNAIAlBCmwhCSAKQQFqIgpBCUcNAAsgACAJNgIACyAHQQFqIQcLAkAgCyASpyIISiALQQhKciAIQRFKcg0AIAhBCUYEQCABQcABaiAGEHkgAUGwAWogASgCkAYQhgIgAUGgAWogASkDwAEgASkDyAEgASkDsAEgASkDuAEQLiABKQOgASETIAEpA6gBDAILIAhBCEwEQCABQZACaiAGEHkgAUGAAmogASgCkAYQhgIgAUHwAWogASkDkAIgASkDmAIgASkDgAIgASkDiAIQLiABQeABakEAIAhrQQJ0QeDBBGooAgAQeSABQdABaiABKQPwASABKQP4ASABKQPgASABKQPoARDjBSABKQPQASETIAEpA9gBDAILIAhBEU5BACABKAKQBiIAIAhBfWxB0ABqdhsNACABQeACaiAGEHkgAUHQAmogABCGAiABQcACaiABKQPgAiABKQPoAiABKQPQAiABKQPYAhAuIAFBsAJqIAhBAnRBmMEEaigCABB5IAFBoAJqIAEpA8ACIAEpA8gCIAEpA7ACIAEpA7gCEC4gASkDoAIhEyABKQOoAgwBCwNAIAFBkAZqIAciAEEBayIHQQJ0aigCAEUNAAsCQCAI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AAEiAjoAASAAQQFqIQAgAUEBaiEBIAINAAsLC/UBAgF/AX4jAEHQAGsiAyQAAkACfiABQQBIBEAgAyABQf////8HcTYCACADQRBqIgFBwABB3CIgAxBOGiAAIAEQYgwBCyAAKAIQIgAoAiwgAU0NAQJAAkAgACgCOCIAIAFBAnRqKAIAIgEpAgQiBEKAgICAgICAgECDQoCAgICAgICAwABRDQAgAkUNASAEp0GAgICAeEcNACAAKAK8ASEBCyABIAEoAgBBAWo2AgAgAa1CgICAgJB/hAwBCyABIAEoAgBBAWo2AgAgAa1CgICAgIB/hAshBCADQdAAaiQAIAQPC0Hv3wBBrvwAQZgYQYfiABAAAAvrAgECfyAAIAEoAgQQEwNAIAEoAhAhAyACIAEoAhRORQRAIAAgAyACQQN0aigCABATIAJBAWohAgwBCwsgACgCECICQRBqIAMgAigCBBEAAEEAIQIDQAJAIAEoAhwhAyACIAEoAiBODQAgAyACQRRsaiIDKAIIRQRAIAAoAhAgAygCBBDrAQsgACADKAIQEBMgACADKAIMEBMgAkEBaiECDAELCyAAKAIQIgJBEGogAyACKAIEEQAAIAAoAhAiAkEQaiABKAIoIAIoAgQRAABBACECA0AgASgCNCEDIAIgASgCOE5FBEAgACADIAJBDGxqKAIEEBMgAkEBaiECDAELCyAAKAIQIgJBEGogAyACKAIEEQAAIAAgASkDQBAPIAAgASkDSBAPIAAgASkDYBAPIAAgASkDaBAPIAEoAggiAiABKAIMIgM2AgQgAyACNgIAIAFCADcCCCAAKAIQIgBBEGogASAAKAIEEQAACzABAX8gACgCOCABQQJ0aigCACIBIAEoAgAiAkEBazYCACACQQFMBEAgACABEKIDCwvAAQIBfwJ+QX8hAwJAIABCAFIgAUL///////////8AgyIEQoCAgICAgMD//wBWIARCgICAgICAwP//AFEbDQAgAkL///////////8AgyIFQoCAgICAgMD//wBWIAVCgICAgICAwP//AFJxDQAgACAEIAWEhFAEQEEADwsgASACg0IAWQRAIAEgAlIgASACU3ENASAAIAEgAoWEQgBSDwsgAEIAUiABIAJVIAEgAlEbDQAgACABIAKFhEIAUiEDCyADCwoAIABBfHEQpAMLZQEEfwNA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sgEhAyAAIAIQDyAAIAAgA0HdwAAQsgEiAiADQQEgARAhIQQgACACEA8gACADEA8gBAsMACAAIAEpAwAQswELygYCBH8DfiMAQYABayIFJAACQAJAAkAgAyAEQgBCABDtAUUNAAJ/IARC////////P4MhCgJ/IARCMIinQf//AXEiBkH//wFHBEBBBCAGDQEaQQJBAyADIAqEUBsMAgsgAyAKhFALCyEGIAJCMIinIghB//8BcSIHQf//AUYNACAGDQELIAVBEGogASACIAMgBBAuIAUgBSkDECICIAUpAxgiASACIAEQ4wUgBSkDCCECIAUpAwAhBAwBCyABIAJC////////////AIMiCiADIARC////////////AIMiCRDtAUEATARAIAEgCiADIAkQ7QEEQCABIQQMAgsgBUHwAGogASACQgBCABAuIAUpA3ghAiAFKQNwIQQMAQsgBEIwiKdB//8BcSEGIAcEfiABBSAFQeAAaiABIApCAEKAgICAgIDAu8AAEC4gBSkDaCIKQjCIp0H4AGshByAFKQNgCyEEIAZFBEAgBUHQAGogAyAJQgBCgICAgICAwLvAABAuIAUpA1giCUIwiKdB+ABrIQYgBSkDUCEDCyAJQv///////z+DQoCAgICAgMAAhCELIApC////////P4NCgICAgICAwACEIQogBiAHSARAA0ACfiAKIAt9IAMgBFatfSIJQgBZBEAgCSAEIAN9IgSEUARAIAVBIGogASACQgBCABAuIAUpAyghAiAFKQMgIQQMBQsgCUIBhiAEQj+IhAwBCyAKQgGGIARCP4iECyEKIARCAYYhBCAHQQFrIgcgBkoNAAsgBiEHCwJAIAogC30gAyAEVq19IglCAFMEQCAKIQkMAQsgCSAEIAN9IgSEQgBSDQAgBUEwaiABIAJCAEIAEC4gBSkDOCECIAUpAzAhBAwBCyAJQv///////z9YBEADQCAEQj+IIQEgB0EBayEHIARCAYYhBCABIAlCAYaEIglCgICAgICAwABUDQALCyAIQYCAAnEhBiAHQQBMBEAgBUFAayAEIAlC////////P4MgB0H4AGogBnKtQjCGhEIAQoCAgICAgMDDPxAuIAUpA0ghAiAFKQNAIQQMAQsgCUL///////8/gyAGIAdyrUIwhoQhAgsgACAENwMAIAAgAjcDCCAF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QCABQQlrDhIACgsMCgsCAwQFDAsMDAoLBwgJCyACIAIoAgAiAUEEajYCACAAIAEoAgA2AgAPCwALIAIgAigCACIBQQRqNgIAIAAgATIBADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATMBADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATAAADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATEAADcDAA8LAAsgAiACKAIAQQdqQXhxIgFBCGo2AgAgACABKwMAOQMADwsgACACIAMRAAALDwsgAiACKAIAIgFBBGo2AgAgACABNAIANwMADwsgAiACKAIAIgFBBGo2AgAgACABNQIANwMADwsgAiACKAIAQQdqQXhxIgFBCGo2AgAgACABKQMANwMAC14BBH8gACgCACECA0AgAiwAACIDENECBEBBfyEEIAAgAkEBaiICNgIAIAFBzJmz5gBNBH9BfyADQTBrIgMgAUEKbCIEaiADIARB/////wdzShsFQX8LIQEMAQsLIAEL3BICEn8BfiMAQdAAayIIJAAgCCABNgJMIAhBN2ohFyAIQThqIRICQAJAAkACQANAIAEhDCAHIA5B/////wdzSg0BIAcgDmohDgJAAkACQCAMIgctAAAiCQRAA0ACQAJAIAlB/wFxIgFFBEAgByEBDAELIAFBJUcNASAHIQkDQCAJLQABQSVHBEAgCSEBDAILIAdBAWohByAJLQACIQogCUECaiIBIQkgCkElRg0ACwsgByAMayIHIA5B/////wdzIhhKDQcgAARAIAAgDCAHEFsLIAcNBiAIIAE2AkwgAUEBaiEHQX8hDwJAIAEsAAEiChDRAkUNACABLQACQSRHDQAgAUEDaiEHIApBMGshD0EBIRMLIAggBzYCTEEAIQ0CQCAHLAAAIglBIGsiAUEfSwRAIAchCgwBCyAHIQpBASABdCIBQYnRBHFFDQADQCAIIAdBAWoiCjYCTCABIA1yIQ0gBywAASIJQSBrIgFBIE8NASAKIQdBASABdCIBQYnRBHENAAsLAkAgCUEqRgRAAn8CQCAKLAABIgEQ0QJFDQAgCi0AAkEkRw0AIAFBAnQgBGpBwAFrQQo2AgAgCkEDaiEJQQEhEyAKLAABQQN0IANqQYADaygCAAwBCyATDQYgCkEBaiEJIABFBEAgCCAJNgJMQQAhE0EAIRAM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IAgoAgRBAWsiBzYCBCAEIAlqQRBqIQQgBw0JIAAgACgCMEEBazYCMAwJCyAHCyEFIARBAWohBAwACwALIANBACAEQQFGGw0EQQAhCSADDQAgBEECRg0DCyAAIAU2AjAMAAsACyAJDwsgASAIQRBqIAAoAgxBA3QQHxoLIAgoAgghBSAIKAIMIQQgAiAIIAAoAgxBA3RqQRBqIAgtAAEiA0ECdBAfGiAAIAAoAjBBAWs2AjAMAAsAC4sCAQd/IAFBAnRBwP4DaigCACICIAFBAXRBkIAEai8BAGohCEEAIQECQANAIAIgCE8NASACQQFqIQYCQAJAIAItAAAiBEE/TQRAIAMgBEEDdmpBAWohAiABBEAgACADIAIQfg0DCyABQQFzIQEgBEEHcSACakEBaiEFDAELAn8gAyAEakH/AGsgBMBBAEgNABogBi0AACEFIARB3wBNBEAgAkECaiEGIAMgBEEIdGogBWpB//8AawwBCyACQQNqIQYgAi0AAiADIARBEHRqIAVBCHRqakH///8CawshBSADIQILIAEEQCAAIAIgBRB+DQELIAFBAXMhASAGIQIgBSEDDAELC0F/IQcLIAcLOABBsNQCIAEQrwQiAUEASARAQX4PCyAAIAFBHU0Ef0IBIAGthqcFIAFBAnRB2NgCaigCAAsQoQYLNQEBfyMAQRBrIgMkACADIAE2AgggAyACQQFqNgIMIAAgA0EIakECELEEIQAgA0EQaiQAIAALlwIBA38gASgCACICQf7/B08EQCAAQYY7QQAQOkF/DwsCQCACQQFNBEAgAEECQX8QuAEaDAELIAEoAgggAkECdGoiBEEEaygCACIDQX9GBEAgBEEIaygCACEDCyACQQF2IQIgA0H//wNNBEAgAEEVIAIQsgRBACECA0AgAiABKAIATg0CIAAgAkECdCIDIAEoAghqLwEAECogAEF/IAEoAgggA0EEcmooAgBBAWsiAyADQX5GG0H//wNxECogAkECaiECDAALAAsgAEEWIAIQsgRBACECA0AgAiABKAIATg0BIAAgAkECdCIDIAEoAghqKAIAEB0gACABKAIIIANBBHJqKAIAQQFrEB0gAkECaiECDAALAAtBAAsmAQF/IAAoAjgiAUEASARAIAAgACAAQTxqQQAQqwYiATYCOAsgAQvgAgEFfyMAQZABayIEJAAg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IgMgAkohBEKAgICAECEBIAMhAiAERQ0BDAILIAYoAgwgBWsiAyECC0KAgICAECEBIANBAEggAiADSHINAANAIAkgByADQQAgBRCzA0UEQEKBgICAECEBDAILIAIgA0chBCADQQFqIQMgBA0ACwsgACAKEA8gACALEA8LIAZBEGokACABC7ADAwd/AXwBfiMAQRBrIgUkAAJAIAAgARBZIgFCgICAgHCDQoCAgIDgAFENAAJAAkAgACADKQMAECgiDUKAgICAcINCgICAgOAAUQ0AIA2nIgkoAgRB/////wdxIQYgAaciCigCBEH/////B3EhBwJAIAQEQCAFIAcgBmsiCzYCDEF/IQhBACEEIAJBAkgNASAAIAUgAykDCBBCDQIgBSsDACIMvUL///////////8Ag0KAgICAgICA+P8AVg0BIAxEAAAAAAAAAABlBEAgBUEANgIMDAILIAwgC7djRQ0BIAUCfyAMmUQAAAAAAADgQWMEQCAMqgwBC0GAgICAeAs2AgwMAQsgBUEANgIMIAJBAk4EQCAAIAVBDGogAykDCCAHQQAQVw0CCyAHIAZrIQRBASEIC0F/IQIgBiAHSw0BIAQgBSgCDCIDayAIbEEASA0BA0AgCiAJIANBACAGELMDRQRAIAMhAgwDCyADIARGDQIgAyAIaiEDDAALAAsgACABEA8gACANEA9CgICAgOAAIQEMAQsgACABEA8gACANEA8gAq0hAQsgBUEQaiQAIAELkwECAX4BfyMAQRBrIgIkAEKAgICA4AAhBAJAIAAgARBZIgFCgICAgHCDQoCAgIDgAFEEQCABIQQMAQsCQCAAIAJBDGogAykDABC6AQ0AQoCAgIAwIQQgAigCDCIDQQBIDQAgAyABpyIFKAIEQf////8HcU8NACAFIAJBDGoQyQGtIQQLIAAgARAPCyACQRBqJAAgBAtpAgJ/AX4gACABEFkhAQNAIAIgBEwgAUKAgICAcINCgICAgOAAUXJFBEAgAyAEQQN0aikDACIGQiCIp0F1TwRAIAanIgUgBSgCAEEBajYCAAsgBEEBaiEEIAAgASAGEMQCIQEMAQsLIAELyAECAX4BfyMAQRBrIgIkAEKAgICA4AAhBAJAIAAgARBZIgFCgICAgHCDQoCAgIDgAFEEQCABIQQMAQsCQCAAIAJBDGogAykDABC6AQ0AAkAgAigCDCIDQQBOBEAgAyABpyIFKQIEIgSnQf////8HcUkNAQsgAEEvEC0hBAwBCyAFQRBqIQUgAAJ/IARCgICAgAiDUEUEQCAFIANBAXRqLwEADAELIAMgBWotAAALQf//A3EQnwMhBAsgACABEA8LIAJBEGokACAEC7gBAgJ+AX8jAEEQayICJABCgICAgOAAIQQCQCAAIAEQWSIBQoCAgIBwg0KAgICA4ABRBEAgASEEDAELAkAgACACQQxqIAMpAwAQugENAEKAgICAwH4hBCACKAIMIgNBAEgNACADIAGnIgYpAgQiBadB/////wdxTw0AIAZBEGohBiAFQoCAgIAIg1BFBEAgBiADQQF0ajMBACEEDAELIAMgBmoxAAAhBAsgACABEA8LIAJBEGokACAEC+MBAgF+An8jAEEQayICJAACQCAAIAFBLRBLIgNFBEAgBEEANgIAQoCAgIDgACEBDAELQoCAgIAwIQECQCADKQMAIgZCgICAgHCDQoCAgIAwUgRAIAIgAygCDCIFNgIMIAUgBqciBygCBEH/////B3FJDQEgACAGEA8gA0KAgICAMDcDAAsgBEEBNgIADAELIAcgAkEMahDJASEIIAMgAigCDDYCDCAEQQA2AgAgCEH//wNNBEAgACAIQf//A3EQnwMhAQwBCyAAIAcgBUEBdGpBEGpBAhDuAyEBCyACQRBqJAAgAQs3ACMAQRBrIgIkACAAIAJBDGogAykDABB3IQAgAigCDCEDIAJBEGokAEKAgICA4AAgA2etIAAbC04AIwBBEGsiAiQAQoCAgIDgACEBAkAgACACQQxqIAMpAwAQdw0AIAAgAkEIaiADKQMIEHcNACACKAIIIAIoAgxsrSEBCyACQRBqJAAgAQsGACAAtrsLfwAgACAAKQPQASIBQgyIIAGFIgFCGYYgAYUiAUIbiCABhSIBNwPQAUKAgICAwH4gAUKdurP7lJL9oiV+QgyIQoCAgICAgID4P4S/RAAAAAAAAPC/oL0iAUKAgICAwIGA/P8AfSABQv///////////wCDQoCAgICAgID4/wBWGwujBAMDfAV/A34jAEEQayIIJAAgCEIANwMIAkACQCACQQBMDQBCgICAgOAAIQEgACAIQQhqIAMpAwAQQg0BQQEhCSAIKwMIIQQgAkEBRwRAA0AgAiAJRg0CIAAgCCADIAlBA3RqKQMAEEINAyAJQQFqIQkgCCsDACEFIwBBIGsiByQAIAS9Qv///////////wCDIg0gBb1C////////////AIMiDCAMIA1WGyIOvyEEAkAgDkI0iKciCkH/D0YNACANIAwgDCANVBsiDL8hBQJAIA5QDQAgDEI0iKciC0H/D0YNACALIAprQcEATgRAIAUgBKAhBAwCCwJ8IAtB/gtPBEAgBEQAAAAAAAAwFKIhBCAFRAAAAAAAADAUoiEFRAAAAAAAALBrDAELRAAAAAAAAPA/IApBvARLDQAaIAREAAAAAAAAsGuiIQQgBUQAAAAAAACwa6IhBUQAAAAAAAAwFAshBiAHQRhqIAdBEGogBRCKBiAHQQhqIAcgBBCKBiAGIAcrAwAgBysDEKAgBysDCKAgBysDGKCfoiEEDAELIAUhBAsgB0EgaiQADAALAAsgBJkhBAsgBL0iAQJ/IASZRAAAAAAAAOBBYwRAIASqDAELQYCAgIB4CyIAt71RBEAgAK0hAQwBC0KAgICAwH4gAUKAgICAwIGA/P8AfSABQv///////////wCDQoCAgICAgID4/wBWGyEBCyAIQRBqJAAgAQtOACAAIABEAAAAAAAA8L9EAAAAAAAA8D8gAEQAAAAAAAAAAGMbIAC9Qv///////////wCDQoCAgICAgID4/wBWGyAARAAAAAAAAAAAYRsLQwACfCABvUKAgICAgICA+P8Ag0KAgICAgICA+P8AUQRARAAAAAAAAPh/IACZRAAAAAAAAPA/YQ0BGgsgACABEI8DCwuDAQICfgF/IAC9IgFCNIinQf8PcSIDQf4HTQRAIAFCgICAgICAgICAf4MhAiADQf4HRyABQoCAgICAgIDwv39RckUEQCACQoCAgICAgID4P4S/DwsgAr8PCyADQbIITQR8IAFCP4cgAXxCAUGzCCADa62GIgFCAYh8QgAgAX2DvwUgAAsLggUDAnwFfwF+IwBBEGsiCSQAAn5CgICAgMD+//v/AEKAgICAwP7/eyAEGyACRQ0AGgJ8IAMpAwAiAUL/////D1gEQEEBIAIgAkEBTBshCiABpyEIQQEhBwNAIAcgCkcEQCAItyADIAdBA3RqKQMAIgFCgICAgBBaDQMaIAggAaciCyAIIAtKGyAIIAsgCCALSBsgBBshCCAHQQFqIQcMAQsLIAitDAILQoCAgIDgACAAIAlBCGogARBCDQEaQQEhByAJKwMICyEFIAcgAiACIAdIGyECA0AgAiAHRwRAQoCAgIDgACAAIAkgAyAHQQN0aikDABBCDQIaAkAgBb0iDEL///////////8Ag0KAgICAgICA+P8AVg0AIAkrAwAiBr0iAUL///////////8Ag0KAgICAgICA+P8AVgRAIAYhBQwBCyAFRAAAAAAAAAAAYSAGRAAAAAAAAAAAYXEhCiAEBEAgCgRAIAEgDIO/IQUMAgsgBSAFIAalIAa9Qv///////////wCDQoCAgICAgID4/wBWGyAGIAW9Qv///////////wCDQoCAgICAgID4/wBYGyEFDAELIAoEQCABIAyEvyEFDAELIAUgBSAGpCAGvUL///////////8Ag0KAgICAgICA+P8AVhsgBiAFvUL///////////8Ag0KAgICAgICA+P8AWBshBQsgB0EBaiEHDAELCyAFvSIBAn8gBZlEAAAAAAAA4EFjBEAgBaoMAQtBgICAgHgLIgC3vVEEQCAArQwBC0KAgICAwH4gAUKAgICAwIGA/P8AfSABQv///////////wCDQoCAgICAgID4/wBWGwshASAJQRBqJAAgAQstAEKAgICA4AAgACADKQMAIAMpAwhBABCLAiIAQQBHrUKAgICAEIQgAEEASBsLoAEBA34gAykDACIFIQQgAkEETgRAIAMpAxghBAsgBUL/////b1gEQCAAECRCgICAgOAADwsgAykDECEBQoCAgIDgACEGAkAgACADKQMIEDEiAkUNACABQiCIp0F1TwRAIAGnIgMgAygCAEEBajYCAAsgACAFIAIgASAEQQAQhgQhAyAAIAIQEyADQQBIDQAgA0EAR61CgICAgBCEIQYLIAYLjwEAAkACQCADKQMAIgFC/////29YBEAgBARAIAAQJAwDCyABQiCIp0F1SQ0BIAGnIgAgACgCAEEBajYCACABDwsgACABELYDIgJBAEgNASAEBEAgAkEAR61CgICAgBCEDwsgAkUEQCAAQfjiAEEAEBUMAgsgAaciACAAKAIAQQFqNgIACyABDwtCgICAgOAACyoAIAMpAwAiAUL/////b1gEQCAAECRCgICAgOAADwsgACABQQNBABCqAgtPAAJAAkAgAykDACIBQv////9vWARAIARFBEBCgICAgBAPCyAAECQMAQsgACABEJkBIgBBAE4NAQtCgICAgOAADwsgAEEAR61CgICAgBCEC2MBAX4gAykDACIEQv////9vWARAIAAQJEKAgICA4AAPC0KAgICA4AAhAQJAIAAgAykDCBAxIgJFDQAgACAEIAIQcSEDIAAgAhATIANBAEgNACADQQBHrUKAgICAEIQhAQsgAQs2ACADKQMAIgFCIIinIgJBf0YgBEUgAkF+cUECR3FyRQRAIAAQJEKAgICA4AAPCyAAIAEQ6AELYwECfgJAAkAgAykDACIBQv////9vWARAIAAQJAwBCyADKQMIIQUgASEEIAJBA04EQCADKQMQIQQLIAAgBRAxIgINAQtCgICAgOAADwsgACABIAIgBEEAEBQhASAAIAIQEyABC2YBAX4gAykDACIEQv////9vWARAIAAQJEKAgICA4AAPC0KAgICA4AAhAQJAIAAgAykDCBAxIgJFDQAgACAEIAJBABDVASEDIAAgAhATIANBAEgNACADQQBHrUKAgICAEIQhAQsgAQuLAQECfiADKQMAIgFC/////29YBEAgABAkQoCAgIDgAA8LIAMpAxAhBkKAgICA4AAhBQJAIAAgAykDCBAxIgJFDQAgACABIAIgBiAERUEOdBDHBCEDIAAgAhATIANBAEgNACAEBEAgA0EAR61CgICAgBCEDwsgAaciACAAKAIAQQFqNgIAIAEhBQsgBQuaAQIBfwJ+IwBBEGsiBCQAIAMpAwghBSADKQMAIgYhAQJAAkACQAJAIAJBA0gNACADKQMQIgFCgICAgHBaBEAgAactAAVBEHENAQsgAEGiPkEAEBUMAQsgACAEQQxqIAUQiQQiAg0BC0KAgICA4AAhAQwBCyAAIAYgASAEKAIMIgMgAhCQAyEBIAAgAiADEJsDCyAEQRBqJAAgAQsVACAAIAMpAwAgAyADQQhqQQIQnQMLVgIBfgF/IAAgARC0AyIBQoCAgIBwg0KAgICA4ABRBEAgAQ8LQoCAgIAwIQIgAaciAygCBEGAgICAeEcEQCAAIAAoAhAgAxDBAhAtIQILIAAgARAPIAILCQAgACABELQDC1sBAX4jAEEQayICJAAgAiAAIAEQtAMiATcDCAJAIAFCgICAgHCDQoCAgIDgAFEEQCABIQQMAQsgAEKAgICAMEEBIAJB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IQMCQAJAAkAgAkHGAGsOBgIDAQMDAgALIAJBFkcNAgtBECEDCyAAIAEgAxCQAg8LIABBtitBABAVC0KAgICA4AALlgEBAXwjAEEQayICJAACfkKAgICA4AAgACACQQhqIAEQmwINABogAisDCCIEvSIBAn8gBJlEAAAAAAAA4EFjBEAgBKoMAQtBgICAgHgLIgC3vVEEQCAArQwBC0KAgICAwH4gAUKAgICAwIGA/P8AfSABQv///////////wCDQoCAgICAgID4/wBWGwshASACQRBqJAAgAQvsAgIDfwF8IwBB0ABrIgQkACAEQRBqQQBBOBArGiAEQoCAgICAgID4PzcDIEKAgICAwH4hAQJAIAJFDQBBByACIAJBB04bIgJBACACQQBKGyECA0AgAiAFRwRAIAAgBEEIaiADIAVBA3QiBmopAwAQQgRAQoCAgIDgACEBDAMLIAQrAwgiB71CgICAgICAgPj/AINCgICAgICAgPj/AFENAiAEQRBqIAZqIAedOQMAAkAgBQ0AIAQrAxAiB0QAAAAAAAAAAGZFIAdEAAAAAAAAWUBjRXINACAEIAdEAAAAAACwnUCgOQMQCyAFQQFqIQUMAQsLIARBEGpBABDgAiIHvSIBAn8gB5lEAAAAAAAA4EFjBEAgB6oMAQtBgICAgHgLIgW3vVEEQCAFrSEBDAELQoCAgIDAfiABQoCAgIDAgYD8/wB9IAFC////////////AINCgICAgICAgPj/AFYbIQELIARB0ABqJAAgAQtWABDQBCIBQoCAgIAIfEL/////D1gEQCABQv////8Pgw8LQoCAgIDAfiABub0iAUKAgICAwIGA/P8AfSABQv///////////wCDQoCAgICAgID4/wBWGwsIAEKAgICAMAuqHQIGfwR+IwBB0ABrIgYkAAJAAkAgAEEQaiIDQYgCIAAoAgARAwAiAUUNACABQQVqQQBBgwIQKxogAUEFOgAEIAFBATYCACAAKAJQIgQgAUEIaiIFNgIEIAEgAEHQAGo2AgwgASAENgIIIAAgBTYCUCABIAMgACgCQEEDdCAAKAIAEQMAIgQ2AiggBEUEQCADIAEgACgCBBEAAAwBCyABIAA2AhAgACgCSCIDIAFBFGoiBTYCBCABIABByABqNgIYIAEgAzYCFCAAIAU2AkggAULxgICAgDk3AtwBIAEgAEHYAWo2AtgBIAAoAkAiAEEAIABBAEobIQADQCAAIAJGRQRAIAQgAkEDdGpCgICAgCA3AwAgAkEBaiECDAELCyABQoCAgIAgNwNQIAFCgICAgCA3A0ggAUKAgICAIDcDQCABIAFB9AFqIgA2AvgBIAEgADYC9AEgAUKAgICAIBBHIQcgASgCKCAHNwMIQQAhAiABIAFBEUHMngFBAEEAQQAgBxDxASIHNwMwIAdCIIinQXVPBEAgB6ciACAAKAIAQQFqNgIACyABKAIoIAc3A2ggARA0IQcgASgCKCAHNwMYIAEgB0GQ1QFBAxAiA0AgASgCKCEAIAJBCEZFBEAgAkECdEGQpgFqKAIAIQMgASABIAApAxgQRyIHQTYgASADEMoEQQMQGRogASAHQTMgAUEvEC1BAxAZGiABIAJBA3RqIAc3A1ggAkEBaiECDAELCyABIAApAwhBAhBJIQcgASgCKCAHNwMQQQAhAiABIAEgB6dBACAHQv////9vVhtBARDFBDYCJCABIAFBJGpBAEEwQQoQwwQaIAEgAUESQQBBABDeAjcDsAEgAUETQQBBABDeAiEHIAEgASkDMEHPAEKAgICAMCAHIAEpA7ABQYEyEG0aIAEgASkDMEHNAEKAgICAMCAHIAEpA7ABQYEyEG0aIAEgBxAPIAEgASAHIAEgAUGwAWpBARCxBhAPIAEgARA0NwPAASABIAFCgICAgCAQRzcDyAEgASABQc4xQRRBASABKAIoKQMIEL8BQcDVAUEWECIgASABKAIoKQMIQaDYAUELECIgASABKQMwQdDZAUEHECIgASABQRVB38wAQQFBBUEAEIIBIgc3AzggB0IgiKdBdU8EQCAHpyIAIAAoAgBBAWo2AgALIAEgB0HfzAAgASkDMBDeASABIAFBFkG8wABBAUEFQX8QggEiB0G8wAAgASgCKCkDGBDeAQNAIAJBCEZFBEAgASABQRYgAkECdEGQpgFqKAIAIgBBAkEBIAJBB0YbQQUgAiAHEPEBIAAgASACQQN0aikDWBDeASACQQFqIQIMAQsLIAEgARA0Igc3A5gBIAEgB0HA2gFBARAiIAEgASgCKCkDEEHQ2gFBIBAiIAFB1x9BF0EBIAEoAigpAxAQvwEiB0IgiKdBdU8EQCAHpyIAIAAoAgBBAWo2AgALIAEgBzcDQCABIAdB0N4BQQQQIiAGQbCmAUHKABAfIgMhAkHjACEAIAFCgICAgCAQRyEHA0AgAEH/AXEEQCABIAcgAkKBgICAEEEHEO8BGiACED8gAmpBAWoiAi0AACEADAELCyABIAEoAigpAxBB2wEgB0EBEBkaIAEgASABKAIoKQMQIgdB6wAgB0EAEBQ3A6gBIAEgASkDmAEQRyEHIAEoAiggBzcD4AIgASAHQZDfAUECECIgASABKQPAAUGw3wFBDhAiIAEgASgCKCkDCEEEEEkhByABKAIoIAc3AyAgASAHQgAQ2wEgASABKAIoKQMgQeDhAUEGECIgASABQYfIAEEYQQEgASgCKCkDIBC/AUHA4gFBDhAiIAEgASgCKCkDCEEGEEkhByABKAIoIAc3AzAgASAHQoCAgIAQENsBIAEgASgCKCkDMEGg5AFBAhAiIAFB8tEAQRlBASABKAIoKQMwEL8BGiABIAEoAigpAwhBBRBJIQcgASgCKCAHNwMoIAEgByABQS8QLRDbASABIAFB0NwAQRpBASABKAIoKQMoEL8BQcDkAUEDECIgASABKAIoKQMoQfDkAUExECIgASABKQOYARBHIQcgASgCKCAHNwPoAiABIAdB8OsBQQIQIiADEKMEIAFCASADNAIIIAMpAwBCwIQ9fnwiByAHQgFYGzcD0AEgASABKQPAAUGQ7AFBARAiIAEgASkDwAFB4PEBQQEQIiABEDQhByABKAIoIAc3AzggASAHQdDzAUEFECIgASABQYPTAEEbQQAgASgCKCkDOBC/ASIHQaD0AUECECJB0AEhAiABIQADQCACQd4BRkUEQCAAIAcgACgCECADIAIQkAEiBEEuEKYDIgVBAWogBCAFGyAAIAIQXEEAEO8BGiACQQFqIQIMAQsLIAAgACkDmAEQRyEHIAAoAiggBzcD+AIgACAHQcD0AUEEECIgACAAKQMwEEchByAAKAIoIAc3A4ABIABBFUHIzABBAUEFQQEQggEhByAAIAAoAigpA4ABQYD1AUEBECIgACAAKAIoIgIpA4ABIAIpA/gCQQFBARCWAiAAIAcgACgCKCkDgAFBAEEBEJYCIAAgBxAPIAAgAEEcQbnVAEEBEN4CIgc3A7gBIAApA8ABIQggB0IgiKdBdU8EQCAHpyICIAIoAgBBAWo2AgALIAAgCEE6IAdBAxAZGiAAKQPAASIHQiCIp0F1TwRAIAenIgIgAigCAEEBajYCAAsgACAHQYoBIAdBAxAZGiAAEDQhByAAKAIoIAc3A1AgACAHQdDLAUEvECIgACAAQeXiAEEdQQcgACgCKCkDUBC/AUHA0gFBAxAiIABBHjYCgAIgACAAKAIoKQMoQZDBAUEBECIgAEEfNgL8ASAAEDQhByAAKAIoIAc3A5ABIAAgB0GgwQFBERAiIABBtskAQSBBAiAAKAIoKQOQARC/ASIHQiCIp0F1TwRAIAenIgIgAigCAEEBajYCAAsgACAHNwNIIAAgB0GwwwFBARAiIAAgACkDmAEQRyEHIAAoAiggBzcD8AIgACAHQcDDAUECECIgACAAKQPAAUHgwwFBARAiAkAgACgCECICKAJAQTFPBEAgAigCRCgCgAkNAQsgAkHYpAFBMEEBEM0DGiACKAJEIgJBkAlqQSE2AgAgAkGUCWpB5KQBNgIACyAAQSJB0RpBAkECQQAQggEiB0KAgICAcFoEQCAHpyICIAItAAVBEHI6AAULIAAgB0GgxAFBARAiIAAgACkDwAFB0RogB0EDEO8BGkEAIQIDQAJAIAJBBEYEQEEAIQIDQCACQQJGDQIgACAAKQOYARBHIQcgACgCKCACQQN0aiAHNwPQAiAAIAcgAkECdEGQpQFqKAIAIAJBnKUBai0AABAiIAJBAWohAgwACwALIAAoAhAgAyACQbUBahCQASEEIAAQNCEHIAJBJmpBA3QiBSAAKAIoaiAHNwMAIAAgByACQQJ0QYClAWooAgAgAkGYpQFqLQAAECIgAEEjIARBAEEDIAIQggEhByACQQFNBEAgACAHQfDIAUEBECILIAAgByAEIAAoAiggBWopAwAQ3gEgAkEBaiECDAELCyAAEDQhByAAKAIoIAc3A5gBIAAgB0GQ9QFBAxAiIAAgAEHkxgBBJCAAKAIoKQOYARCXBEHA9QFBAhAiIAAQNCEHIAAoAiggBzcDoAEgACAHQeD1AUEDECIgACAAQb3GAEElIAAoAigpA6ABEJcEQZD2AUEBECIgACAAEDQiB0Gg9gFBHhAiIAAgB0E3IAAgACgCKCkDECIIQTcgCEEAEBRBAxAZGiAAIABBJkHSH0EAEN4CIghBgPoBQQMQIiAAIAggBxD7BUEVIQIDQCACQSBGRQRAIAEgBxBHIQkgAkEDdCIAIAEoAihqIAk3AwAgASAJQcWBAUEBIAJB5aYBai0AAHStIglBABDvARogASABQScgASgCECADIAJBjgFqEJABIgRBA0EDIAIgCBDxASIKIAQgASgCKCAAaikDABDeASABIApBxYEBIAlBABDvARogAkEBaiECDAELCyABIAcQDyABIAgQDyABEDQhByABKAIoIAc3A4ACIAEgB0Gw+gFBGBAiIAFBuyJBKCABKAIoKQOAAhCXBBoCQCABKAIQIgAoAkBBMk8EQCAAKAJEKAKYCQ0BCyAAQaClAUExQQkQzQMaIAAoAkQiAEHQCmpBKTYCACAAQaAKakEqNgIAIABBiApqQSo2AgAgAEHwCWpBKzYCACAAQdgJakEsNgIAIABBwAlqQSw2AgALIAEQNCEHIAEoAiggBzcDiAMgASAHQYDJAUEEECIgAUEtQafjAEEBQQJBABCCASIHQiCIp0F1TwRAIAenIgAgACgCAEEBajYCAAsgASAHNwNQIAEgB0HAyQFBBxAiIAEgB0Gn4wAgASgCKCkDiAMQ3gEgASABKQMwEEchByABKAIoIAc3A6ADIAFBFUHazABBAUEFQQIgASkDOBDxASEHIAEgASgCKCkDoANBsMoBQQEQIiABIAcgASgCKCkDoANBAEEBEJYCIAEgBxAPIAEgARA0Igc3A6ABIAEgB0HAygFBARAiIAEgASkDoAEQRyEHIAEoAiggBzcDuAMgASAHQdDKAUEDECIgASABKQOgARBHIQcgASgCKCAHNwPIAyABIAdBgMsBQQQQIiABIAEpAzAQRyEHIAEoAiggBzcDwAMgAUEVQcPMAEEBQQVBAyABKQM4EPEBIQcgASABKAIoKQPAA0HAywFBARAiIAEgASgCKCIAKQPAAyAAKQPIA0EBQQEQlgIgASAHIAEoAigpA8ADQQBBARCWAiABIAcQDyABKAIQIgBBLjYClAIgAEEvNgKkAiAAQTA2AqACIABBMTYCnAIgAEEyNgKYAiABEDQhByABKAIoIAc3A4gCIAEgB0GA0wFBAxAiIAEgAUGILUEzQQEgASgCKCkDiAIQvwFBsNMBQQ4QIgwBC0EAIQELIAZB0ABqJAAgAQsHACAAEN8EC4cCAQh/An4gACgCECgCeCMAIgciDCABpygCICIIKAIQIgkgA2oiC0EDdCIKa0sEQCAAEOkBQoCAgIDgAAwBCyAJQQAgCUEAShshDSAHIApBD2pBcHFrIgckAAN+IAYgDUYEfkEAIQYgA0EAIANBAEobIQMDQCADIAZGRQRAIAcgBiAJakEDdGogBCAGQQN0aikDADcDACAGQQFqIQYMAQsLIAVBAXEEQCAAIAEgAhBSIQMgACAIKQMAIgEgASACIAMbIAsgBxCQAwwDCyAAIAgpAwAgCCkDCCALIAcQIQUgByAGQQN0IgpqIAggCmopAxg3AwAgBkEBaiEGDAELCwshASAMJAAgAQuxAQEBfyAAQcgAEF8iBQRAIAVBADYCAAJAIAAgBUEIaiIGIAEgAiADIAQQ7QMEQCAFQQQ2AgAMAQsgACAGELQCIgJCgICAgHCDQoCAgIDgAFENACAAIAIQDyAAIAFBLxBlIgFCgICAgHCDQoCAgIDgAFENACABQoCAgIBwWgRAIAGnIAU2AiALIAEPCyAAKAIQIAUQ7AMgACgCECIAQRBqIAUgACgCBBEAAAtCgICAgOAAC4gHAgl/AXwjAEFAaiIGJAACQCAAKAIQIgooAnggBiABpyIILQAoIgtBA3QiDGtLBEAgABDpAUKAgICA4AAhAQwBCyAILQApIQ0gBiAKKAKMASIANgIQIAogBkEQajYCjAEgAAR/IAAoAihBBHEFQQALIQAgCCgCICEHIAYgATcDGCAGIAA2AjggBiADNgI0AkAgAyALTgRAIAQhAAwBCyADQQAgA0EAShshDiAGIAxBD2pB8B9xayIAJAADQCAJIA5GBEAgAyEEA0AgBCALRkUEQCAAIARBA3RqQoCAgIAwNwMAIARBAWohBAwBCwsgBiALNgI0BSAAIAlBA3QiDGogBCAMaikDADcDACAJQQFqIQkMAQsLCyAGIAA2AiAgCCgCJCEEAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIA0ODQsCAAEAAQcIAwQFBgkKCyAFQQFxDQpCgICAgDAhAiANQQJHDQoMCwsgBUEBcQ0AQoCAgIAwIQIgDUEDRg0KCyAHIAIgAyAAIAguASogBBEFACEBDAsLIAcgAiAEEQgAIQEMCgsgByACIAApAwAgBBEYACEBDAkLIAcgAiAILgEqIAQREAAhAQwICyAHIAIgACkDACAILgEqIAQRNAAhAQwHCyAHIAZBCGogACkDABBCDQUgBisDCCAEEQsAIg+9IgECfyAPmUQAAAAAAADgQWMEQCAPqgwBC0GAgICAeAsiALe9UQRAIACtIQEMBwtCgICAgMB+IAFCgICAgMCBgPz/AH0gAUL///////////8Ag0KAgICAgICA+P8AVhshAQwGC0KAgICA4AAhASAHIAZBCGogACkDABBCDQUgByAGIAApAwgQQg0FIAYrAwggBisDACAEESMAIg+9IgECfyAPmUQAAAAAAADgQWMEQCAPqgwBC0GAgICAeAsiALe9UQRAIACtIQEMBgtCgICAgMB+IAFCgICAgMCBgPz/AH0gAUL///////////8Ag0KAgICAgICA+P8AVhshAQwFCyAHIAIgAyAAIAZBCGogCC4BKiAEERIAIgFCgICAgHCDQoCAgIDgAFENBCAGKAIIIgBBAkYNBCAHIAEgABD/AiEBDAQLEAEACyAHIAIgAyAAIAQRAgAhAQwCCyAHQZwiQQAQFQtCgICAgOAAIQELIAogBigCEDYCjAELIAZBQGskACABC9UBAQV/IwAiBSEIAkAgAUKAgICAcFQNACABpyIGLwEGQQ9HDQAgBigCICEHCyAAIAIgAyADIActAAQiAEgEf0EAIQYgA0EAIANBAEobIQkgBSAAQQN0QQ9qQfAfcWsiBSQAA38gBiAJRgR/IAMhBAN/IAAgBEYEfyAFBSAFIARBA3RqQoCAgIAwNwMAIARBAWohBAwBCwsFIAUgBkEDdCIKaiAEIApqKQMANwMAIAZBAWohBgwBCwsFIAQLIAcvAQYgB0EIaiAHKAIAERIAIQEgCCQAIAEL0woCD38BfiMAQTBrIgUkAAJAIAAgARBZIgFCgICAgHCDQoCAgIDgAFENAAJAIAAgARAoIhNCgICAgHCDQoCAgIDgAFEEQEF/IQQMAQsCQCAAQQEgE6ciDCgCBEH/////B3EiBiAGQQFNG0ECdBApIgtFBEBBfyEEDAELIAVBADYCEANAIAYgB0wNASALIARBAnRqIAwgBUEQahDJATYCACAEQQFqIQQgBSgCECEHDAALAAsgACATEA8LIAAgARAPQoCAgIDgACEBIARBAEgNAAJAAkAgAkUNACADKQMAIhNCgICAgHCDQoCAgIAwUQ0AAkAgACAFQQxqIBMQ5QEiAgRAAkAgAi0AAEHOAEcNACACLQABQcYARw0AIAJBA0ECIAItAAJBywBGIgMbai0AACIGQcMAa0H/AXFBAUsNACAFKAIMIAJBA2ogAkECaiADGyACa0EBakYNAgsgACACEFQgAEGC0gBBABBQCyAAQRBqIRAgCyEGDAILIAAgAhBUIAYgA0EBdGpBwwBrIQgLIAAoAhAhAiAFQgA3AxggBUIANwMQIAUgAjYCJCAFQTs2AiAgACIMQRBqIRBBfyEAAkAgBUEQaiAEQQJ0IgIQxgEEQEEAIQYMAQsCQCAIRQRAQQAhByAEQQAgBEEAShshAwNAIAMgB0YNAiAHQQJ0IQYgB0EBaiEHIAYgC2ooAgBB/wFNDQALCyAFQRBqIAsgBCAIQQF2EOwEQQAhBiAFKAIcDQEgBSgCFCIHQQJ2IgBBAWshCkEAIQIgBSgCECEGA0ACQCAAIAJKBEAgBiACIgRBAnRqKAIAEKYCRQ0BA0AgBCAKRgRAIAAhAgwDCyAGIARBAWoiA0ECdGooAgAiDRCmAiIJBEADQAJAIAIgBEoNACAGIARBAnRqIg4oAgAiDxCmAiAJTA0AIA4gDzYCBCAEQQFrIQQMAQsLIARBAnQgBmogDTYCBCADIQQMAQUgAyECDAMLAAsACyAIQQFxIAdBCElyDQNBASAAIABBAU0bIQ5BASEIQQEhAANAIAggDkYNBCAGIAhBAnRqKAIAIgMQpgIhByAAIQQCQAJAA0AgBEEATA0BIAYgBEEBayIEQQJ0aiIPKAIAIgIQpgIiCgRAIAcgCkohAkGAAiEHIAINAQwCCwsCQCADQeEia0EUSyACQYAia0ESS3JFBEAgA0EcbCACQcwEbGpBnI2hAWshBwwBCwJAIAJBgNgCayIEQaPXAEsNACAEQf//A3FBHHAgA0GnI2siBEEbS3INACACIARqIQcMAQtBsAchBEEAIQoDQCAEIApIDQIgBUEoaiAEIApqQQJtIg1BAXRB8NEDai8BACIHQQZ2IhFBAnRBkOICaigCACIJQQ52IhIgB0E/cWoiByARIBIgCUEHdkH/AHEgCUEBdkE/cRDrBBogAyAFKAIsayACIAUoAigiCWsgAiAJRhsiCUEASARAIA1BAWshBAwBCyAJBEAgDUEBaiEKDAELCyAHRQ0BCyAPIAc2AgAMAQsgBiAAQQJ0aiADNgIAIABBAWohAAsgCEEBaiEIDAALAAsgAkEBaiECDAALAAsgBSgCECIGIAsgAhAfGiAEIQALIAwoAhAiAkEQaiALIAIoAgQRAAAgAEEASA0BIAwgBUEQaiAAED0NAEEAIQQCQANAIAAgBEYNASAEQQJ0IQIgBEEBaiEEIAVBEGogAiAGaigCABC5AUUNAAsgBSgCECgCECIAQRBqIAUoAhQgACgCBBEAAAwBCyAFQRBqEDYhAQsgECgCACIAQRBqIAYgACgCBBEAAAsgBUEwaiQAIAEL7AcCC34EfyMAQTBrIg8kAAJAIAFC/////29YBEAgABAkQoCAgIDgACEBDAELQoCAgIAwIQYCQAJAIAAgAykDABAoIgtCgICAgHCDQoCAgIDgAFEEQEKAgICAMCEHQoCAgIAwIQFCgICAgDAhCUKAgICAMCEMDAELIAAgASAAKQNIEOMBIgxCgICAgHCDQoCAgIDgAFEEQEKAgICAMCEHQoCAgIAwIQFCgICAgDAhCQwBCwJAAkAgACAAIAFB7QAgAUEAEBQQNyIJQoCAgIBwg0KAgICA4ABRDQAgCaciAkH1AEEAEMcBIRIgAkH5AEEAEMcBQQBIBEAgAEHMngEgCUHsHxC+ASIJQoCAgIBwg0KAgICA4ABRDQELIA8gCTcDKCAPIAE3AyAgACAMQQIgD0EgahCnASIHQoCAgIBwg0KAgICA4ABRDQEgABA+IgFCgICAgHCDQoCAgIDgAFEEQEKAgICA4AAhAQwDC0F/IQICQCADKQMIIgRCgICAgHCDQoCAgIAwUQ0AIAAgD0EcaiAEEHdBAEgNAyAPKAIcIgINAAwECwJ+IAunIhApAgQiBKdB/////wdxIhEEQCASQX9zQR92IRIgBEL/////B4MhDSACrSEOQQAhAgNAIAKtIQQgAiEDA0AgAyARTwRAIAAgECACIBEgAiARSRsgERCEAQwECyAAIAdB1QAgA60iChBFQQBIDQYgACAGEA8CQCAAIAcgCxDIASIGQoCAgIBwgyIFQoCAgIAgUgRAIAVCgICAgOAAUQ0IIAAgD0EQaiAAIAdB1QAgB0EAEBQQowENCCAPIA8pAxAiBSANIAUgDVMbIgU3AxAgBCAFUg0BCyAQIAogEhDxAqchAwwBCwsgACAQIAIgAxCEASIEQoCAgIBwg0KAgICA4ABRDQUgACABIAggBBBqQQBIDQUgCEIBfCIEIA5RDQYgACAPQQhqIAYQPA0FIAWnIQJCASEFIAhCASAPKQMIIgogCkIBVxt8IQgDQCAEIAhRBEAgBCEIDAILIAAgACAGIAUQcxA3IgpCgICAgHCDQoCAgIDgAFENBiAAIAEgBCAKEGpBAEgNBiAFQgF8IQUgBEIBfCIEIA5SDQALCwwFCyAAIAcgCxDIASIGQoCAgIBwgyIEQoCAgIDgAFENAyAEQoCAgIAgUg0EIAAgEEEAQQAQhAELIgRCgICAgHCDQoCAgIDgAFENAiAAIAEgCCAEEGpBAE4NAwwCC0KAgICAMCEHC0KAgICAMCEBCyAAIAEQD0KAgICA4AAhAQsgACALEA8gACAMEA8gACAHEA8gACAJEA8gACAGEA8LIA9BMGokACABC+ACAQZ+IAFC/////29YBEAgABAkQoCAgIDgAA8LQoCAgIDgACEIQoCAgIAwIQYCQAJAAkAgACADKQMAECgiB0KAgICAcINCgICAgOAAUQRAQoCAgIAwIQQMAQsgACABQdUAIAFBABAUIgRCgICAgHCDQoCAgIDgAFENACAAIARCABBSRQRAIAAgAUHVAEIAEEVBAEgNAQsgACABIAcQyAEiBUKAgICAcIMiCUKAgICA4ABRDQEgACABQdUAIAFBABAUIgZCgICAgHCDQoCAgIDgAFENAQJAIAAgBiAEEFIEQCAAIAQQDwwBCyAAIAFB1QAgBBBFQQBODQBCgICAgDAhBAwCCyAAIAcQDyAAIAYQD0L/////DyEIIAlCgICAgCBRDQIgACAFQdcAIAVBABAUIQEgACAFEA8gAQ8LQoCAgIAwIQULIAAgBRAPIAAgBxAPIAAgBhAPIAAgBBAPCyAIC80EAgZ+AX8jAEEgayICJAACQCABQv////9vWARAIAAQJEKAgICA4AAhBwwBC0KAgICA4AAhB0KAgICAMCEIAkAgACADKQMAECgiCUKAgICAcINCgICAgOAAUQRAQoCAgIAwIQRCgICAgDAhBUKAgICAMCEGDAELAkACQCAAIAEgACkDSBDjASIGQoCAgIBwg0KAgICA4ABRBEBCgICAgDAhBAwBCyAAIAAgAUHtACABQQAQFBA3IgRCgICAgHCDQoCAgIDgAFINAQtCgICAgDAhBQwBCyACIAQ3AxggAiABNwMQIAAgBkECIAJBEGoQpwEiBUKAgICAcINCgICAgOAAUQ0AIAAgAkEIaiAAIAFB1QAgAUEAEBQQowENACAAIAVB1QACfiACKQMIIgFCgICAgAh8Qv////8PWARAIAFC/////w+DDAELQoCAgIDAfiABub0iAUKAgICAwIGA/P8AfSABQv///////////wCDQoCAgICAgID4/wBWGwsQRUEASA0AQoCAgIDgACEIIABBLhB2IgFCgICAgHCDQoCAgIDgAFENACAAQSAQKSIDRQRAIAEhCAwBCyADIAk3AwggAyAFNwMAIAMgBKciCkHnAEEAEMcBQX9zQR92NgIQIApB9QBBABDHASEKIANBADYCGCADIApBf3NBH3Y2AhQgAUKAgICAcFoEQCABpyADNgIgCyAAIAYQDyAAIAQQDyABIQcMAQsgACAJEA8gACAGEA8gACAEEA8gACAFEA8gACAIEA8LIAJBIGokACAHC74EAgd+An8jAEEQayICJAACQCABQv////9vWARAIAAQJEKAgICA4AAhBgwBC0KAgICA4AAhBkKAgICAMCEFAkAgAAJ+AkAgACADKQMAECgiB0KAgICAcINCgICAgOAAUQ0AIAAgACABQe4AIAFBABAUECYiA0EASA0AIANFBEAgACABIAcQyAEhBgwDCyAAIAAgAUHvACABQQAQFBAmIgtBAEgNACAAIAFB1QBCABBFQQBIDQBCgICAgOAAIAAQPiIIQoCAgIBwg0KAgICA4ABRDQEaIAenIQwCQANAIAAgBRAPIAAgASAHEMgBIgVCgICAgHCDIgRCgICAgCBRDQECQCAEQoCAgIDgAFENAAJ/IAAgACAFQgAQTRA3IgRCgICAgHCDIgpCgICAgJB/UgRAQQAgCkKAgICA4ABSDQEaDAILIASnKAIEQf////8HcUULIQMgACAIIAkgBBCGAUEASA0AIAlCAXwhCSADRQ0BIAAgAkEIaiAAIAFB1QAgAUEAEBQQowFBAEgNACAAIAFB1QACfiAMIAIpAwggCxDxAiIEQoCAgIAIfEL/////D1gEQCAEQv////8PgwwBC0KAgICAwH4gBLm9IgRCgICAgMCBgPz/AH0gBEL///////////8Ag0KAgICAgICA+P8AVhsLEEVBAE4NAQsLIAgMAgsgCacEQCAIIQYMAwsgACAIEA9CgICAgCAhBgwCC0KAgICAMAsQDwsgACAFEA8gACAHEA8LIAJBEGokACAG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/////w+DEGpBAEgNDSADRQRAIAkgCSgCAEEBajYCAAsgACABIAZBAWqtIBQQakEASA0NIA5CgICAgDBSBEAgEUIgiKdBdU8EQCARpyICIAIoAgBBAWo2AgALIAAgASAGQQJqrSAREGpBAEgNDgsgBCABNwNYIARCgICAgDA3A1AgACATEA8gACAAIBkgBCAEQdAAakEAEJ0DEDchEwwBC0KAgICAMCEVIA5CgICAgDBSBEAgACARECUiFUKAgICAcINCgICAgOAAUQ0NCyAEIBc3A3ggBCAVNwNwIAQgATcDaCAEIBQ3A1ggBCAPNwNQIAQgEkL/////D4M3A2AgACATEA8gACAEQdAAahDtBCETIAAgFRAPCyATQoCAgIBwg0KAgICA4ABRDQsgB6wgElcEQCAEQThqIgIgCSAHIBKnEFEaIAIgExCHARogD6cpAgRC/////weDIBJ8pyEHCyAFQQFqIQUMAQsLIARBOGoiAiAJIAcgCSgCBEH/////B3EQURogAhA2IRAMCgsgACAPEA9CgICAgDAhEwJAAn8CQCAAIAAgEkIAEE0QNyIPQoCAgIBwgyIOQoCAgICQf1IEQCAOQoCAgIDgAFINASAOIRAMAwsgD6coAgRB/////wdxDQAgACAEQdAAaiAAIAFB1QAgAUEAEBQQowFBAEgNAiAAIAFB1QACfiAJIAQpA1AgDRDxAiIOQoCAgIAIfEL/////D1gEQCAOQv////8PgwwBC0KAgICAwH4gDrm9Ig5CgICAgMCBgPz/AH0gDkL///////////8Ag0KAgICAgICA+P8AVhsLEEUiAkEATg0AIAJBHnZBAnEMAQtBAAtFDQELCwwCCwwGC0KAgICAMCETC0KAgICAMCEBDAQLIARB0ABqIAsgCCALKAIEQf////8HcRBRDQAgACASEA8gACgCECICQRBqIAMgAigCBBEAACAEQdAAahA2IRAMAQsgACASEA8gACgCECICQRBqIAMgAigCBBEAACAEKAJQKAIQIgJBEGogBCgCVCACKAIEEQAAC0KAgICAMCERC0KAgICAMCETQoCAgIAwIQFCgICAgDAhDwsgBCgCOCgCECICQRBqIAQoAjwgAigCBBEAAAsgBBDuBCAAIBcQDyAAIA8QDyAAIAEQDyAAIBMQDyAAIBEQDyAAIBQQDwsgBEGQAWokACAQC6IBACMAQSBrIgIkAAJ+AkAgAUL/////b1gEQCAAECQMAQsgACACQQhqIgNBABA9GiADQS8QOxoCQCADIAAgAUHsACABQQAQFBB/DQAgAkEIaiIDQS8QOxogAyAAIAFB7QAgAUEAEBQQfw0AIAJBCGoQNgwCCyACKAIIKAIQIgBBEGogAigCDCAAKAIEEQAAC0KAgICA4AALIQEgAkEgaiQAIAELTgECfkKAgICA4AAhBCAAIAEgAykDABDIASIBQoCAgIBwgyIFQoCAgIDgAFIEfiAAIAEQDyAFQoCAgIAgUq1CgICAgBCEBUKAgICA4AALC/gCAgN+AX8CQAJAIAAgARDwAiICRQ0AIAMpAwghBgJAAkACQCADKQMAIgRCgICAgHBUDQAgBKciAy8BBkESRw0AIAZCgICAgHCDQoCAgIAwUgRAIABBnvkAQQAQFUKAgICA4AAPCyADKAIgIgcgBygCAEEBajYCACADKAIkIgMgAygCAEEBajYCACAHrUKAgICAkH+EIQQgA61CgICAgJB/hCEFDAELQoCAgIAwIQUCfiAEQoCAgIBwg0KAgICAMFEEQCAAQS8QLQwBCyAAIAQQKAsiBEKAgICAcINCgICAgOAAUQ0BIAAgBCAGEJgEIgVCgICAgHCDQoCAgIDgAFENAQsgACACNQIAQoCAgICQf4QQDyAAIAI1AgRCgICAgJB/hBAPIAIgBT4CBCACIAQ+AgAgACABQdUAQgAQRUEASA0BIAFCIIinQXVJDQIgAaciACAAKAIAQQFqNgIADAILIAAgBBAPIAAgBRAPC0KAgICA4AAPCyABC2oBAX8gAUL/////b1gEQCAAECRCgICAgOAADwsCfiABpyIDLwEGQRJHBEBCgICAgDAgACABIAAoAigpA5ABEFINARogAEESEIYDQoCAgIDgAA8LIAMoAiQtABAgAnFBAEetQoCAgIAQhAsLvQQBCX8jAEEgayIHJAACQAJAAkACQAJAIAFC/////29YBEAgABAkDAELIAAgASAAKAIoKQOQARBSDQIgACABEPACIgINAQtCgICAgOAAIQEMAwsgAigCACIIKAIEIgJB/////wdxIgMNAQsgAEH+kwEQYiEBDAELIAAgB0EIaiADIAJBH3YQigMaIAhBEGohBiAIKAIEQf////8HcSEJQQAhAANAAkACQCAAIAlIBEAgAEEBaiECQX8hBQJAAn8CQAJAAkACQAJAAkACQAJ/IAgpAgRCgICAgAiDIgFQIgpFBEAgBiAAQQF0ai8BAAwBCyAAIAZqLQAACyIDQdsAaw4DAwECAAsgAiEAAkAgA0EKaw4EBAsLBQALIANBL0cNByAERQ0FQQEhBEEvIQMMBwtB3AAhAyACIAlODQYgAEECaiEAIApFBEAgBiACQQF0ai8BACEFDAoLIAIgBmotAAAhBQwJC0EAIQRB3QAhAwwFC0HbACEDIAQgAiAJTnINBiAAQQJqIQAgAVAEQEHdAEF/IAIgBmotAABB3QBGIgQbIQUgACACIAQbIQBBASEEDAgLQQEhBEHdAEF/IAYgAkEBdGovAQBB3QBGIgobIQUgACACIAobIQAMBwtB7gAMAgtB8gAMAQtBACEEQS8LIQVB3AAhAwsgAiEADAILIAdBCGoQNiEBDAMLIAIhAEEBIQQLIAdBCGogAxCLARogBUEASA0AIAdBCGogBRCLARoMAAsACyAHQSBqJAAgAQvWAgIDfwF+IwBBEGsiBCQAAkAgAUL/////b1gEQCAAECRCgICAgOAAIQUMAQtCgICAgOAAIQUgACAAIAFB7gAgAUEAEBQQJiICQQBIDQAgAgR/IARB5wA6AAggBEEJagUgBEEIagshAiAAIAAgAUHr4wAQsgEQJiIDQQBIDQAgAwRAIAJB6QA6AAAgAkEBaiECCyAAIAAgAUGL5QAQsgEQJiIDQQBIDQAgAwRAIAJB7QA6AAAgAkEBaiECCyAAIAAgAUH01AAQsgEQJiIDQQBIDQAgAwRAIAJB8wA6AAAgAkEBaiECCyAAIAAgAUHvACABQQAQFBAmIgNBAEgNACADBEAgAkH1ADoAACACQQFqIQILIAAgACABQfsdELIBECYiA0EASA0AIAAgBEEIaiIAIAMEfyACQfkAOgAAIAJBAWoFIAILIABrEJMCIQULIARBEGokACAFC6UDAQR+IwBBEGsiAyQAIAQCfwJAAkACQAJAIAAgAUEuEEsiAkUEQEKAgICAMCEBDAELIAIoAhgEQEKAgICAMCEBQQEMBQsgACACKQMAIgggAikDCCIGEMgBIgFCgICAgHCDIgdCgICAgOAAUg0BC0KAgICAMCEHDAELIAdCgICAgCBRBEAgAkEBNgIYQoCAgIAwIQFBAQwDCyACKAIQBEAgACAAIAFCABBNEDciB0KAgICAcIMiCUKAgICA4ABRDQECQCAJQoCAgICQf1INACAHpygCBEH/////B3ENACAAIANBCGogACAIQdUAIAhBABAUEKMBQQBIDQIgACAIQdUAAn4gBqcgAykDCCACKAIUEPECIgZCgICAgAh8Qv////8PWARAIAZC/////w+DDAELQoCAgIDAfiAGub0iBkKAgICAwIGA/P8AfSAGQv///////////wCDQoCAgICAgID4/wBWGwsQRUEASA0CCyAAIAcQDwwCCyACQQE2AhgMAQsgACABEA8gACAHEA9CgICAgOAAIQELQQALNgIAIANBEGokACABCw4AIAAQtQJCgICAgOAACwkAQoCAgIDAfgsWACAAIAMpAwAgAykDCCADKQMQEJQEC9EBAgN+An8jAEEQayIHJAACQCAAIAdBDGogAykDABDlASIIRQRAQoCAgIDgACEEDAELIAAgCCAHKAIMQdKIARD1BSEBIAAgCBBUAkAgAkECSCABQoCAgIBwg0KAgICA4ABRcg0AIAAgAykDCCIGEDhFDQBCgICAgOAAIQQCQCAAEDQiBUKAgICAcINCgICAgOAAUQRAIAEhBQwBCyAAIAVBLyABQQcQGUEASA0AIAAgBUEvIAYQ+QQhBAsgACAFEA8MAQsgASEECyAHQRBqJAAgBAsNACAAIAEgAkEwEP0FCwsAIAAgAUEwEP4FC7QDAgN/An4jAEHQAGsiBiQAQX8hBwJAIAAgBkHIAGogAUHCABCBASIIRQ0AIAYpA0giAUKAgICAcINCgICAgDBRBEAgCCkDACEBIANCIIinQXVPBEAgA6ciByAHKAIAQQFqNgIACyAAIAEgAiADIAQgBRCGBCEHDAELIAAgAhBcIglCgICAgHCDQoCAgIDgAFEEQCAAIAEQDwwBCyAIKQMAIQogBiAENwM4IAYgAzcDMCAGIAk3AyggBiAKNwMgIAAgASAIKQMIQQQgBkEgahAvIQEgACAJEA8gAUKAgICAcINCgICAgOAAUQ0AAkACQCAAIAEQJiIHBEAgACAGIAgoAgAgAhBMIgJBAEgNASACRQ0DAkAgBigCACICQRNxRQRAIAAgBikDCCADEFJFDQEMBAsgAkERcUEQRw0DIAY1AhxCIIZCgICAgDBSDQMLIAAgBhBI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gICAwH4gALi9IgFCgICAgMCBgPz/AH0gAUL///////////8Ag0KAgICAgICA+P8AVhsLOQEBfkKAgICAwH4gASkDACICQoCAgIDAgYD8/wB9IAJC////////////AINCgICAgICAgPj/AFYbCzsBAX5CgICAgMB+IAEqAgC7vSICQoCAgIDAgYD8/wB9IAJC////////////AINCgICAgICAgPj/AFYbCwwAIAAgASkDABD7AwsMACAAIAEpAwAQhwILSQEBfiABKAIAIgBBAE4EQCAArQ8LQoCAgIDAfiAAuL0iAkKAgICAwIGA/P8AfSACQv///////////wCDQoCAgICAgID4/wBWGwsHACABNQIACwcAIAEzAQALDgAgATIBAEL/////D4MLCQAgABC1AkF/Cw4AIAEwAABC/////w+DCwcAIAExAAALDwAgACsDACABKwMAEP0ECxEAIAAqAgC7IAEqAgC7EP0ECxkBAn4gASkDACIDIAApAwAiBFQgAyAEVmsLGQECfiABKQMAIgMgACkDACIEUyADIARVawsXACABKAIAIgEgACgCACIASSAAIAFJawsXACABKAIAIgEgACgCACIASCAAIAFIawsNACAALwEAIAEvAQBrCw0AIAAuAQAgAS4BAGsLDQAgACwAACABLAAAawsNACAALQAAIAEtAABrC8wNBAd/AXwBfgF9IwBBIGsiBiQAQoCAgIDgACENAkAgACABEJIBIgpBAEgNAEF/IQUCQAJAAkAgCkUNAEEBIQgCQAJAIARBAUYEQEF/IQggBiAKQQFrIgU2AhwgAkECSA0BIAAgBkEIaiADKQMIEEINBiAGKwMIIgy9Qv///////////wCDQoGAgICAgID4/wBaBEAgBkEANgIcDAILIAxEAAAAAAAAAABmBEAgDCAFt2NFDQIgBgJ/IAyZRAAAAAAAAOBBYwRAIAyqDAELQYCAgIB4CzYCHAwCC0F/IQUgDCAKt6AiDEQAAAAAAAAAAGMNBCAGAn8gDJlEAAAAAAAA4EFjBEAgDKoMAQtBgICAgHgLNgIcDAELIAZBADYCHCACQQJIBEAgCiECDAILIAAgBkEcaiADKQMIIAoiAiACEFcNBQwBC0F/IQILIAGnIgkoAiAoAgwoAiAtAAQEQEF/IQUgBEF/Rw0CQX9BACADNQIEQiCGQoCA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IA1CgICAgDBBBCAFQRBqECEhCiAAIAsQDyAAIA8QDyAFQoCAgIAwNwM4IApCgICAgHCDQoCAgIDgAFENASAAIAkQDyAKIQkLIAhCAXwhCAwBCwsgBSAJNwMwIAUpAzghCwsgACAFKQMwEA8gACALEA9CgICAgOAAIQkLIAAgARAPIAVBQGskACAJC6wIAgN/CX4jAEEwayIFJABCgICAgDAhCSAFQoCAgIAwNwMoAkACQAJAAkAgBEEIcSIHBEAgAUIgiKdBdU8EQCABpyIGIAYoAgBBAWo2AgALIAUgACABEJIBIgasNwMIIAZBAE4NAQwCCyAAIAVBCGogACABECUiARA8DQELIAMpAwAhD0KAgICAMCEOIAJBAk4EQCADKQMIIQ4LIAAgDxBgDQACQAJAAkACQAJAAkACQCAEDg0FAAYBAgYGBgUABgMEBgtCgICAgBAhCQwFCyAAIAECfiAFKQMIIghCgICAgAh8Qv////8PWARAIAhC/////w+DDAELQoCAgIDAfiAIub0iCEKAgICAwIGA/P8AfSAIQv///////////wCDQoCAgICAgID4/wBWGwsQqwIiCUKAgICAcINCgICAgOAAUg0EDAULIAAgAUIAEKsCIglCgICAgHCDQoCAgIDgAFINAwwECyAFIAE3AxAgBSAFNQIINwMYIABBAiAFQRBqEPYCIglCgICAgHCDQoCAgIDgAFINAgwDCyAAED4iCUKAgICAcINCgICAgOAAUg0BQoCAgIDgACEJDAILQoGAgIAQIQkLQgAhCCAFKQMIIgpCACAKQgBVGyEQA0AgCCAQUgRAAkACQCAHBEAgBSAAIAEgCBBzIgo3AyggCkKAgICAcINCgICAgOAAUg0BDAULIAAgASAIIAVBKGoQhQEiAkEASA0EIAJFDQELIAghCiAIQoCAgIAIWgRAQoCAgIDAfiAIub0iCkKAgICAwIGA/P8AfSAKQv///////////wCDQoCAgICAgID4/wBWGyEKCyAKQoCAgIBwg0KAgICA4ABRDQMgBSABNwMgIAUgCjcDGCAFIAUpAygiDTcDECAAIA8gDkEDIAVBEGoQISELIAAgChAPIAtCgICAgHCDQoCAgIDgAFENAwJAAkACQAJAAkACQAJAIAQODQABBQIEBQUFAAEFAwQFCyAAIAsQJg0FQoCAgIAQIQgM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AUL///////////8Ag0KAgICAgICA+P8AVhshBQwCCxABAAsgAjAAAEL/////D4MhBQsgB0EQaiQAIAULUgIBfwF+QoCAgIDgACEEIAAgASACEJMBIgMEfiADKAIgIgMoAgwoAiAtAAQEQCACRQRAQgAPCyAAEGtCgICAgOAADwsgAzUCFAVCgICAgOAACwvXAQEDfwJAIAFCgICAgHBUDQAgAaciAy8BBkE5Rw0AIAMoAiAiBEUNACAEQcwAaiEDIARByABqIQUDQCAFIAMoAgAiA0cEQCADKQMQIgFCgICAgGBaBEAgACABpyACEQAACyADKQMYIgFCgICAgGBaBEAgACABpyACEQAACyADKQMgIgFCgICAgGBaBEAgACABpyACEQAACyADKQMoIgFCgICAgGBaBEAgACABpyACEQAACyADQQRqIQMMAQsLIAQoAgRBfnFBBEYNACAAIARBCGogAhDvAwsLBgBB4MYECzABAX8CQCABQoCAgIBwVA0AIAGnIgIvAQZBOUcNACACKAIgIgJFDQAgACACEIcFCwsNACAAIAEgAkE3EP0FCwsAIAAgAUE3EP4FCxYBAX8gAacoAiAiAgRAIAAgAhCIBQsLMQEBfyABpygCICICBEAgACACKAIIEKMFIAAgAikDABAjIABBEGogAiAAKAIEEQAACwvcAQEEfwJAIAFCgICAgHBUDQAgAaciBC8BBkExRw0AIAQoAiAiBkUNAEEAIQQDQCAEQQJGRQRAIAYgBEEDdGoiBUEIaiEDIAVBBGohBQNAIAUgAygCACIDRwRAIAMpAwgiAUKAgICAYFoEQCAAIAGnIAIRAAALIAMpAxAiAUKAgICAYFoEQCAAIAGnIAIRAAALIAMpAxgiAUKAgICAYFoEQCAAIAGnIAIRAAALIANBBGohAwwBCwsgBEEBaiEEDAELCyAGKQMYIgFCgICAgGBUDQAgACABpyACEQAACwuMAQEFfwJAIAFCgICAgHBUDQAgAaciAi8BBkExRw0AIAIoAiAiBEUNAANAIANBAkZFBEAgBCADQQN0aiICQQRqIQUgAigCCCECA0AgAiAFRkUEQCACKAIEIQYgACACEK4CIAYhAgwBCwsgA0EBaiEDDAELCyAAIAQpAxgQIyAAQRBqIAQgACgCBBEAAAsLJQAgBSkDACIBQiCIp0F1TwRAIAGn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IAMpAwAQpgENACAAEJcBIgVCgICAgHCDQoCAgIDgAFENACAAIAJBFGogAykDCBC7ASIGRQRAIAAgBRAPDAELIAAoAtgBIQMgAkIANwIMIAJCgICAgICAgICAfzcCBCACIAM2AgAgAkIBEDAaIAIgAikDKCIBpyIHQf////8DQQEQzAEaIAIgAkJ/Qf////8DQQEQdRogBadBBGoiAyAGIAIQkwUaAkAgBEUgAVByDQAgAkIBEDAaIAIgB0EBa0H/////A0EBEMwBGiADIAIQ0wFBAEgNACACQgEQMBogAiAHQf////8DQQEQzAEaIAMgAyACQf////8DQQEQ5AEaCyACEBsgACAGIAJBFGoQXiAAIAUQzQEhAQsgAkEwaiQAIAEL6hMCAn4BfyMAQdABayIEJAAgACAEEJgFIAEgARA0IgNBqi0CfiAEKQMIIgJCgICAgAh8Qv////8PWARAIAJC/////w+DDAELQoCAgIDAfiACub0iAkKAgICAwIGA/P8AfSACQv///////////wCDQoCAgICAgID4/wBWGwsQQCABIANB3+AAAn4gBCkDECICQoCAgIAIfEL/////D1gEQCACQv////8PgwwBC0KAgICAwH4gArm9IgJCgICAgMCBgPz/AH0gAkL///////////8Ag0KAgICAgICA+P8AVhsLEEAgASADQboqAn4gBCkDGCICQoCAgIAIfEL/////D1gEQCACQv////8PgwwBC0KAgICAwH4gArm9IgJCgICAgMCBgPz/AH0gAkL///////////8Ag0KAgICAgICA+P8AVhsLEEAgASADQagqAn4gBCkDICICQoCAgIAIfEL/////D1gEQCACQv////8PgwwBC0KAgICAwH4gArm9IgJCgICAgMCBgPz/AH0gAkL///////////8Ag0KAgICAgICA+P8AVhsLEEAgASADQfooAn4gBCkDKCICQoCAgIAIfEL/////D1gEQCACQv////8PgwwBC0KAgICAwH4gArm9IgJCgICAgMCBgPz/AH0gAkL///////////8Ag0KAgICAgICA+P8AVhsLEEAgASADQfrfAAJ+IAQpAzAiAkKAgICACHxC/////w9YBEAgAkL/////D4MMAQtCgICAgMB+IAK5vSICQoCAgIDAgYD8/wB9IAJC////////////AINCgICAgICAgPj/AFYbCxBAIAEgA0HYKAJ+IAQpAzgiAkKAgICACHxC/////w9YBEAgAkL/////D4MMAQtCgICAgMB+IAK5vSICQoCAgIDAgYD8/wB9IAJC////////////AINCgICAgICAgPj/AFYbCxBAIAEgA0G23wACfiAEKQNAIgJCgICAgAh8Qv////8PWARAIAJC/////w+DDAELQoCAgIDAfiACub0iAkKAgICAwIGA/P8AfSACQv///////////wCDQoCAgICAgID4/wBWGwsQQCABIANBzSkCfiAEKQNIIgJCgICAgAh8Qv////8PWARAIAJC/////w+DDAELQoCAgIDAfiACub0iAkKAgICAwIGA/P8AfSACQv///////////wCDQoCAgICAgID4/wBWGwsQQCABIANBl+AAAn4gBCkDUCICQoCAgIAIfEL/////D1gEQCACQv////8PgwwBC0KAgICAwH4gArm9IgJCgICAgMCBgPz/AH0gAkL///////////8Ag0KAgICAgICA+P8AVhsLEEAgASADQeIoAn4gBCkDWCICQoCAgIAIfEL/////D1gEQCACQv////8PgwwBC0KAgICAwH4gArm9IgJCgICAgMCBgPz/AH0gAkL///////////8Ag0KAgICAgICA+P8AVhsLEEAgASADQc/fAAJ+IAQpA2AiAkKAgICACHxC/////w9YBEAgAkL/////D4MMAQtCgICAgMB+IAK5vSICQoCAgIDAgYD8/wB9IAJC////////////AINCgICAgICAgPj/AFYbCxBAIAEgA0GGKgJ+IAQpA2giAkKAgICACHxC/////w9YBEAgAkL/////D4MMAQtCgICAgMB+IAK5vSICQoCAgIDAgYD8/wB9IAJC////////////AINCgICAgICAgPj/AFYbCxBAIAEgA0Gt4AACfiAEKQNwIgJCgICAgAh8Qv////8PWARAIAJC/////w+DDAELQoCAgIDAfiACub0iAkKAgICAwIGA/P8AfSACQv///////////wCDQoCAgICAgID4/wBWGwsQQCABIANBxyoCfiAEKQN4IgJCgICAgAh8Qv////8PWARAIAJC/////w+DDAELQoCAgIDAfiACub0iAkKAgICAwIGA/P8AfSACQv///////////wCDQoCAgICAgID4/wBWGwsQQCABIANB8OAAAn4gBCkDgAEiAkKAgICACHxC/////w9YBEAgAkL/////D4MMAQtCgICAgMB+IAK5vSICQoCAgIDAgYD8/wB9IAJC////////////AINCgICAgICAgPj/AFYbCxBAIAEgA0HN4AACfiAEKQOIASICQoCAgIAIfEL/////D1gEQCACQv////8PgwwBC0KAgICAwH4gArm9IgJCgICAgMCBgPz/AH0gAkL///////////8Ag0KAgICAgICA+P8AVhsLEEAgASADQZIqAn4gBCkDkAEiAkKAgICACHxC/////w9YBEAgAkL/////D4MMAQtCgICAgMB+IAK5vSICQoCAgIDAgYD8/wB9IAJC////////////AINCgICAgICAgPj/AFYbCxBAIAEgA0G44AACfiAEKQOYASICQoCAgIAIfEL/////D1gEQCACQv////8PgwwBC0KAgICAwH4gArm9IgJCgICAgMCBgPz/AH0gAkL///////////8Ag0KAgICAgICA+P8AVhsLEEAgASADQdUqAn4gBCkDoAEiAkKAgICACHxC/////w9YBEAgAkL/////D4MMAQtCgICAgMB+IAK5vSICQoCAgIDAgYD8/wB9IAJC////////////AINCgICAgICAgPj/AFYbCxBAIAEgA0HvJwJ+IAQpA6gBIgJCgICAgAh8Qv////8PWARAIAJC/////w+DDAELQoCAgIDAfiACub0iAkKAgICAwIGA/P8AfSACQv///////////wCDQoCAgICAgID4/wBWGwsQQCABIANB6icCfiAEKQOwASICQoCAgIAIfEL/////D1gEQCACQv////8PgwwBC0KAgICAwH4gArm9IgJCgICAgMCBgPz/AH0gAkL///////////8Ag0KAgICAgICA+P8AVhsLEEAgASADQeszAn4gBCkDuAEiAkKAgICACHxC/////w9YBEAgAkL/////D4MMAQtCgICAgMB+IAK5vSICQoCAgIDAgYD8/wB9IAJC////////////AINCgICAgICAgPj/AFYbCxBAIAEgA0H7JwJ+IAQpA8ABIgJCgICAgAh8Qv////8PWARAIAJC/////w+DDAELQoCAgIDAfiACub0iAkKAgICAwIGA/P8AfSACQv///////////wCDQoCAgICAgID4/wBWGwsQQCABIANBo98AAn4gBCkDyAEiAkKAgICACHxC/////w9YBEAgAkL/////D4MMAQtCgICAgMB+IAK5vSICQoCAgIDAgYD8/wB9IAJC////////////AINCgICAgICAgPj/AFYbCxBAIAMQUyEAIARB0AFqJAAgAAufAgEDfiABQv////9vWARAIAAQJEKAgICA4AAPC0KAgICA4AAhBQJ+IAAgAUE2IAFBABAUIgRCgICAgHCDQoCAgIAwUQRAIABBlAEQLQwBCyAAIAQQNwsiBEKAgICAcIMiBkKAgICA4ABSBH4CfiAAIAFBMyABQQAQFCIBQoCAgIBwg0KAgICAMFEEQCAAQS8QLQwBCyAAIAEQNwsiAUKAgICAcIMiBUKAgICA4ABRBEAgACAEEA9CgICAgOAADwsCQCAGQoCAgICQf1EEQCAEpygCBEH/////B3FFDQELIAVCgICAgJB/UQRAIAGnKAIEQf////8HcUUNAQsgAEHMngEgBEH4mQEQvgEhBAsgACAEIAEQxAIFQoCAgIDgAAsLXwEBfwJAIAFFBEAgAkUNASAAIAIQ2QMPCyACRQRAIAAgACgCAEEBazYCACAAIAAoAgRBCGs2AgQgARCbAQwBCyAAKAIIIAAoAgQgAmpPBH8gASACEPMFBUEACw8LQQALJgAgAQRAIAAgACgCAEEBazYCACAAIAAoAgRBCGs2AgQgARCbAQsLCQAgACABNgIYCygBAX8CQCABpygCICIDRQ0AIAMoAgBBBEYNACAAIANBCGogAhDvAwsLPwEBfwJAIAFCgICAgHBUDQAgAaciAi8BBkEvRw0AIAIoAiAiAkUNACAAIAIQ7AMgAEEQaiACIAAoAgQRAAALC0cBAX8CQCABpygCICIDRQ0AIAMpAwAiAUKAgICAYFoEQCAAIAGnIAIRAAALIAMpAwgiAUKAgICAYFQNACAAIAGnIAIRAAALCzABAX8gAacoAiAiAgRAIAAgAikDABAjIAAgAikDCBAjIABBEGogAiAAKAIEEQAACwsnAQF/IAGnKAIgIgIEQCAAIAIpAwAQIyAAQRBqIAIgACgCBBEAAAsLWgECfyABpygCICICBEACQCACKQMAIgFCgICAgHBUDQAgAactAAVBAnENACACKAIMIgNFDQAgACADEOoDIAIpAwAhAQsg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ACIGRQ0AIAYtAAVBAXFFDQAgACAGIAIRAAALIANBAWohAwwACwALIAAgBCACEQAACwt8AQN/IAGnIgIoAigiAwRAIAAgA61CgICAgHCEECMLIAIoAiAiAwRAIAIoAiQiBARAQQAhAgNAIAIgAygCPE5FBEAgACAEIAJBAnRqKAIAEOsBIAJBAWohAgwBCwsgAEEQaiAEIAAoAgQRAAALIAAgA61CgICAgGCEECMLCxIAIAGnKAIgIgAEQCAAEKQDCwseACABpykDICIBQoCAgIBgWgRAIAAgAacgAhEAAAsLGQAgACABpyIAKQMgECMgAEKAgICAMDcDIAtEAQJ/IAGnIQQDQCAEKAIoIANLBEAgBCgCJCADQQN0aikDACIBQoCAgIBgWgRAIAAgAacgAhEAAAsgA0EBaiEDDAELCwtGAQN/IAGnIQMDQCADKAIkIQQgAiADKAIoT0UEQCAAIAQgAkEDdGopAwAQIyACQQFqIQIMAQsLIABBEGogBCAAKAIEEQAAC2kBAn8jAEEQayIHJAACfwJAIAGnIggtAAVBCHFFDQAgACAHQQxqIAIQrAFFDQAgBygCDCAIKAIoTw0AQX8gACAIEJIDDQEaCyAAIAEgAiADIAQgBSAGQYCACHIQbQshACAHQRBqJAAgAAuBAgIDfwF+AkACQCACQQBODQAgAacpAyAiCkKAgICAcINCgICAgJB/Ug0AIAJB/////wdxIgggCqciBykCBCIKp0H/////B3FPDQACQEEEIAYQkwNFDQBBASECIAZBgMAAcUUNAiADQoCAgIBwg0KAgICAkH9SDQAgA6ciCSkCBCIBQv////8Hg0IBUg0AIAdBEGohBwJ/IApCgICAgAiDUEUEQCAHIAhBAXRqLwEADAELIAcgCGotAAALAn8gAUKAgICACINQRQRAIAkvARAMAQsgCS0AEAtGDQILIAAgBkHh6QAQbw8LIAAgASACIAMgBCAFIAZBgIAIchBtIQILIAILRgACfwJAIAJBAE4NACABpykDICIBQoCAgIBwg0KAgICAkH9SDQBBACACQf////8HcSABpygCBEH/////B3FJDQEaC0EBCwuzAQECfwJAIANBAE4NACACpykDICICQoCAgIBwg0KAgICAkH9SDQAgA0H/////B3EiAyACpyIEKQIEIgKnQf////8HcU8NAEEBIQUgAUUNACAEQRBqIQQCfyACQoCAgIAIg1BFBEAgBCADQQF0ai8BAAwBCyADIARqLQAACyEDIAFBBDYCACAAIANB//8DcRCfAyECIAFCgICAgDA3AxggAUKAgICAMDcDECABIAI3AwgLIAULWwECfyABpygCECIAQTBqIQMgACAAKAIYIAJxQX9zQQJ0aigCACEAA0ACQCAARQ0AIAMgAEEBa0EDdGoiBCgCBCACRg0AIAQoAgBB////H3EhAAwBCwsgAEEARws1AQF+IAEpAwAiAkIgiKdBdU8EQCACpyIBIAEoAgBBAWo2AgALIAAgAhCKAUKAgICA4AAQUwuOAQECfyABKAIAIgJBAEoEQCABIAJBAWsiAjYCAAJAIAINACABLQAEQfABcUEQRw0AIAEoAggiAiABKAIMIgM2AgQgAyACNgIAIAFBADYCCCAAKAJgIgIgAUEIaiIDNgIEIAEgAEHgAGo2AgwgASACNgIIIAAgAzYCYAsPC0HFjQFBrvwAQbAsQc/0ABAAAAtvAQJ/IAEgASgCACICQQFqNgIAIAJFBEAgASgCCCICIAEoAgwiAzYCBCADIAI2AgAgAUEANgIIIAAoAlAiAiABQQhqIgM2AgQgASAAQdAAajYCDCABIAI2AgggACADNgJQIAEgAS0ABEEPcToABAsLDwAgASABKAIAQQFqNgIAC4gBAgF+AX9BACECQoCAgIAwIQEDQAJAIAJBAkcEfiAFIAJBA3QiBGoiBzUCBEIghkKAgICAMFENASAAQawuQQAQFUKAgICA4AAFQoCAgIAwCw8LIAMgBGopAwAiBkIgiKdBdU8EQCAGpyIEIAQoAgBBAWo2AgALIAcgBjcDACACQQFqIQIMAAsAC1wBAn4gAiAAKAIAEC0hA0EAIQAgA0KAgICAcINCgICAgOAAUSACIAEoAgAQLSIEQoCAgIBwg0KAgICA4ABRckUEQCADpyAEpxCDAiEACyACIAMQDyACIAQQDyAAC2sBAX4CQAJAAkACQAJAIAMtAAUiAQ4EAwICAAELIAAgAygCCBDKBA8LIAFBCEYNAgsQAQALIAAgAygCDCADKAIAIAMtAAggAy0ACSADLgEGEIIBDwsgACAAEDQiBCADKAIIIAMoAgwQIiAECwkAIAAgAxCNAwtTAQF+IAAQNCIEQoCAgIBwg0KAgICA4ABSBEAgASABKAIAQQFqNgIAIAAgBEE8IAGtQoCAgIBwhEEDEBlBAE4EQCAEDwsgACAEEA8LQoCAgIDgAAsDAAELagEBfyMAQRBrIgMkACABKAIEIQEgAiADQQxqIAAoAgQQrAFBACACIANBCGogARCsARtFBEBB0MUAQa78AEGDOkH8yQAQAAALIAMoAgghACADKAIMIQEgA0EQaiQAQX8gACABRyAAIAFLGwvaAwICfgF/IwBBIGsiBSQAAkACQCAAIAFBLBBLIgJFDQBCgICAgDAhAQJAIAIpAwAiBkKAgICAcINCgICAgDBSBEACfwJAIAanIgMvAQZBFWtB//8DcUEKTQRAIAMoAiAoAgwoAiAtAARFDQEgABBrDAULIAAgBUEcaiAGENYBDQQgBUEcagwBCyADQShqCyEIIAIoAgwiAyAIKAIASQ0BIAAgAikDABAPIAJCgICAgDA3AwALIARBATYCAAwCCyACIANBAWo2AgwgBEEANgIAIAIoAghFBEAgA0EATgRAIAOtIQEMAwtCgICAgMB+IAO4vSIBQoCAgIDAgYD8/wB9IAFC////////////AINCgICAgICAgPj/AFYbIQEMAgtCgICAgOAAIQEgACACKQMAIAMQsAEiBkKAgICAcINCgICAgOAAUQ0BIAIoAghBAUYEQCAGIQEMAgsgBSAGNwMIIAUgA0EATgR+IAOtBUKAgICAwH4gA7i9IgFCgICAgMCBgPz/AH0gAUL///////////8Ag0KAgICAgICA+P8AVhsLIgc3AwAgAEECIAUQiQMhASAAIAYQDyAAIAcQDwwBCyAEQQA2AgBCgICAgOAAIQELIAVBIGokACABCxAAIwAgAGtBcHEiACQAIAALBgAgACQACwQAIwAL7gICBH8CfiMAQRBrIgMkAAJAAkAgAikDECIHQoCAgIBwg0KAgICAkH9SBEAgAEGDlAFBABAVDAELIAIpAxghCCAAIAcQswEiBEUEQEEAIQQMAQsgACAIELMBIgZFDQACQCAAIAQgBhDJBSIBRQ0AIAAgARD+A0EASARAIABBARCPBAwBCyABIAEoAgBBAWo2AgAgACABrUKAgICAUIQgACkDwAFBAEEAEMgFIgdCgICAgHCDQoCAgIDgAFENACAAIAcQDyABIQULIAAgBhBUIAVFDQAgAyAAIAUQjQMiBzcD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ACEEIANCADcCaCADQoCAgICAgICAgH83AmAgAyAENgJcIANB3ABqIgUgARBEGiADQgA3AlQgA0KAgICAgICAgIB/NwJMIAMgBDYCSCADKAJkIQYgA0EANgJkIANByABqIgFCqtWq1QoQMBogA0EANgJQIAUgARCyAgRAIAMgAygCZEEBajYCZCAGQQFrIQYLIANByABqEBsgAkEBakEBdhCVBiEFIANCADcCVCADQoCAgICAgICAgH83AkwgAyAENgJIIANCADcCQCADQoCAgICAgICAgH83AjggAyAENgI0IANB3ABqIgEgAUJ/Qf////8DQQAQdRogBUEAIAVBAEobIQkgAiAFaiACIAVBAXRuQQFqIgpBAXRqQSBqIQJBACEBA0AgASAJRkUEQCADQcgAaiIHIANB3ABqIghCASACQQAQdRogA0E0aiILIAcgAkEGEJEGIAcgC0IBIAJBABB1GiAIIAggByACQQAQlQEaIAFBAWohAQwBCwsgA0IANwIsIANCgICAgICAgICAfzcCJCADIAQ2AiAgA0IANwIYIANCgICAgICAgICAfzcCECADIAQ2AgwgA0EgaiIBIANB3ABqIgRCAiACQQAQdRogASAEIAEgAkEAEJUBGiADQQxqIAEgASACQQAQQxogAEIAEDAaIAqsIQwDQCAMQgBXRQRAIANByABqIgFCARAwGiADQTRqIgQgDKdBAXRBAXKsEDAaIAEgASAEIAJBABCVARogACAAIAEgAkEAEMsBGiAAIAAgA0EMaiACQQAQQxogDEIBfSEMDAELCyAAIABCASACQQAQdRogACAAIANBIGoiASACQQAQQxogARAbIANBDGoQGyADQTRqEBsgA0HIAGoQGyAAIAVBAWpB/////wNBARDMARogA0HcAGoiASACQQYQ0wIgASABIAasIAJBABDUAiAAIAAgASACQQAQywEaIAEQGyADQfAAaiQAQRAPC0HY/QBB1PwAQdciQajWABAAAAsRACAAIAEgAiADIARBABCWBgsRACAAIAEgAiADIARBARCWBgvYAwEHfyACKAIEIAEoAgRzIQcCQAJAAkACQAJAAkACQCABKAIIIgZB/f///wdMBEAgAigCCCIFQf3///8HSg0BIAZBgICAgHhHDQYgBUGAgICAeEYNBAwHCyAGQf////8HRg0BIAIoAggh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gICAMEEBENQFDQIgACABEA8LIAJBAWohAgwACwALIAAgBBAPIAAgARAPQoCAgIDgAAsYACAAIAMpAwAgAykDCBBSrUKAgICAEIQL4gICA34DfyMAQSBrIgIkAEKAgICA4AAhBCAAIAMpAwAQJSIFQoCAgIBwg0KAgICA4ABSBEBCgICAgDAhAQJAAkAgACACQRxqIAJBGGogBadBAxCOAQ0AQoCAgIDgACEBIAAQNCIEQoCAgIBwg0KAgICA4ABRDQAgAigCHCEHIAIoAhghCEEAIQMDQCADIAhHBEACQAJAIAAgByADQQN0aiIJKAIEEFwiAUKAgICAcINCgICAgOAAUQ0AIAIgATcDCCACIAU3AwAgACAEIAAgAkEAEMYEIQYgACABEA8gBkKAgICAcIMiAUKAgICAMFENASABQoCAgIDgAFENACAAIAQgCSgCBCAGQYeAARAZQQBODQELIAQhAQwDCyADQQFqIQMMAQsLIAAgByAIEFogBSEBDAELIAAgAigCHCACKAIYEFogACAFEA9CgICAgOAAIQQLIAAgARAPCyACQSBqJAAgBAsQACAAIAMpAwBBESAEEKoCCxAAIAAgAykDAEECQQAQqgILEAAgACADKQMAQQFBABCqAgtHAQF+QoCAgIDgACEEIAAgAykDACIBIAMpAwgQrgYEfkKAgICA4AAFIAFCIIinQXVPBEAgAaciACAAKAIAQQFqNgIACyABCwtBACAAIAMpAwAiASADKQMIQQEQiwJBAEgEQEKAgICA4AAPCyABQiCIp0F1TwRAIAGnIgAgACgCAEEBajYCAAsgAQuJAQEBfiADKQMAIgFC/////29WIAFCgICAgHCDQoCAgIAgUXJFBEAgAEG35ABBABAVQoCAgIDgAA8LAkAgACABEEciAUKAgICAcINCgICAgOAAUgRAIAMpAwgiBEKAgICAcINCgICAgDBRDQEgACABIAQQrgZFDQEgACABEA8LQoCAgIDgAA8LIAELpQQCBX8CfiMAQSBrIgUkACAAIAVBCGoiBkEAED0aIAZBKBA7GiAEQX5xQQJGBEAgBUEIakHxmQEQiAEaCyAFQQhqQbrMABCIARogBEF9cUEBRgRAIAVBCGpBKhA7GgsgBUEIakGvlAEQiAEaQQAhBiACQQFrIgdBACAHQQBKGyEIAkACQAJAA0AgBiAIRwRAIAYEQCAFQQhqQSwQOxoLIAZBA3QhCSAGQQFqIQYgBUEIaiADIAlqKQMAEIcBRQ0BDAILCyAFQQhqQYaaARCIARogAkEASgRAIAVBCGogAyAHQQN0aikDABCHAQ0BCyAFQQhqIgJBiZEBEIgBGkKAgICAMCELIAIQNiIKQoCAgIBwg0KAgICA4ABRDQEgACAAKQPAASAKQQNBfxCcAyELIAAgChAPIAtCgICAgHCDQoCAgIDgAFENASABQoCAgIBwg0KAgICAMFENAiAAIAFBOyABQQAQFCIKQoCAgIBwg0KAgICA4ABRDQECQCAKQv////9vVg0AIAAgChAPIAAgARCAAyICRQ0CIAIoAiggBEEBdEGuwAFqLwEAQQN0aikDACIKQiCIp0F1SQ0AIAqnIgIgAigCAEEBajYCAAsgACALIApBARCLAiECIAAgChAPIAJBAE4NAgwBCyAFKAIIKAIQIgJBEGogBSgCDCACKAIEEQAAQoCAgIAwIQsLIAAgCxAPQoCAgIDgACELCyAFQSBqJAAgCwuAAgICfgF/IwBBIGsiByQAQoCAgIDgACEFAkACQCAAIAEQJSIBQoCAgIBwg0KAgICA4ABRDQAgACADKQMAEDEiA0UNAANAIAAgByABpyADEEwiAkEASA0CIAIEQEKAgICAMCEFAkAgBy0AAEEQcUUNACAHQRhBECAEG2opAwAiBUIgiKdBdUkNACAFpyICIAIoAgBBAWo2AgALIAAgBxBIDAMLIAAgARCMAiIBQoCAgIBwgyIGQoCAgIAgUgRAIAZCgICAgOAAUQRAIAYhBQwECyAAEHtFDQEMAwsLQoCAgIAwIQUMAQtBACEDCyAAIAMQEyAAIAEQDyAHQSBqJAAgBQuxAQEDfiADKQMIIQUgAykDACEGQoCAgIDgACEHAkAgACABECUiAUKAgICAcINCgICAgOAAUgR+IAAgBRBgDQEgACAGEDEiAkUNASAAIAEgAkKAgICAMEKAgICAMCAFIAQbIAVCgICAgDAgBBtBhaoBQYWaASAEGxBtIQMgACABEA8gACACEBNCgICAgOAAQoCAgIAwIANBAEgbBUKAgICA4AALDwsgACABEA9CgICAgOAAC3IBAX5CgICAgDAhAyABQoCAgIAQhEKAgICAcINCgICAgDBRBEAgABAkQoCAgIDgAA8LIAJCgICAgHCDQoCAgIAgUiACQv////9vWHEEfkKAgICAMAVCgICAgOAAQoCAgIAwIAAgASACQQEQiwJBAEgbCwsyAQF+IAAgARAlIgFCgICAgHCDQoCAgIDgAFEEQCABDwsgACABEOgBIQIgACABEA8gAgugAQIBfgF/IwBBIGsiAiQAQoCAgIDgACEEAkACQCAAIAEQJSIBQoCAgIBwg0KAgICA4ABRDQAgACADKQMAEDEiA0UNACAAIAIgAacgAxBMIgVBAEgNASAFRQRAQoCAgIAQIQQMAgsgAjUCACEEIAAgAhBIIARCAohCAYNCgICAgBCEIQQMAQtBACEDCyAAIAMQEyAAIAEQDyACQSBqJAAgBAvBAQECfgJAAn5CgICAgBAgAykDACIEQoCAgIBwVA0AGkKAgICA4AAgACABECUiAUKAgICAcINCgICAgOAAUQ0AGiAEpyICIAIoAgBBAWo2AgAgAachAgNAIAAgBBCMAiIEQoCAgIBwgyIFQoCAgIDgAFIEQCACIASnRiAFQoCAgIAgUXINAyAAEHtFDQELCyAAIAQQDyAAIAEQD0KAgICA4AALDwsgACAEEA8gACABEA8gBUKAgICAIFKtQoCAgIAQhAt6AQF+IAAgAykDABAxIgJFBEBCgICAgOAADwtCgICAgOAAIQQgACABECUiAUKAgICAcINCgICAgOAAUQRAIAAgAhATIAEPCyAAQQAgAacgAhBMIQMgACACEBMgACABEA9CgICAgOAAIANBAEetQoCAgIAQhCADQQBIGwsIACAAIAEQJQsPACAAIAFBN0EAQQAQrAILLQEBfkKAgICAMCECAkAgARCjAyIARQ0AIAAtABJBBHFFDQAgADUCRCECCyACCzMCAX4Bf0KAgICAMCECAkAgARCjAyIDRQ0AIAMtABJBBHFFDQAgACADKAJAEC0hAgsgAgsoAEKAgICA4AAgACADKQMAIAEQvgUiAEEAR61CgICAgBCEIABBAEgbC7cBAgF+An9CgICAgOAAIQQgACABEGAEfkKAgICA4AAFQcqZASECAkAgAaciAy8BBhDuAUUNAAJAIAMoAiAiAy8AESIFQYAIcUUNACADKAJUIgZFDQAgACAGIAMoAkgQkwIPCyAFQQR2QQNxQQFrIgNBAksNACADQQJ0QfT/AWooAgAhAgsgACACIAAgAUE2IAFBABAUIgFCgICAgHCDQoCAgIAwUQR+IABBLxAtBSABC0G+GRC+AQsL6QUDA34GfwN8AkACfkKAgICA4AAgACABEGANABpCgICAgOAAIAAgACkDMEEOEEkiBUKAgICAcINCgICAgOAAUQ0AGiAFpyIKIAFCgICAgHBaBH8gAactAAVBEHEFQQALIAotAAVB7wFxcjoABSAAQQEgAiACQQFMGyILQQFrIghBA3RBGGoQKSIHRQ0BIAFCIIinQXVPBEAgAaciAiACKAIAQQFqNgIACyAHIAE3AwAgAykDACIEQiCIp0F1TwRAIASnIgIgAigCAEEBajYCAAsgByAINgIQIAcgBDcDCEEAIQIDQCACIAhHBEAgAyACQQFqIglBA3RqKQMAIgRCIIinQXVPBEAgBKciDCAMKAIAQQFqNgIACyAHIAJBA3RqIAQ3AxggCSECDAELCyAKIAc2AiAgAUL/////b1gEQCAAECQMAgsgAEEAIAGnQTAQTCICQQBIDQFCACEEAkAgAkUNACAAIAFBMCABQQAQFCIGQoCAgIBwg0KAgICA4ABRDQIgBkL/////D1gEQCAGpyICIAhrQQAgAiALThutIQQMAQsgBkIgiKdBB2tBbU0EQAJAIAZCgICAgMCBgPz/AHwiBEL///////////8Ag0KAgICAgICA+P8AVg0AIAS/nSIOIAi3Ig9lDQAgDiAPoSENCyANvSIEAn8gDZlEAAAAAAAA4EFjBEAgDaoMAQtBgICAgHgLIgK3vVEEQCACrSEEDAILQoCAgIDAfiAEQoCAgIDAgYD8/wB9IARC////////////AINCgICAgICAgPj/AFYbIQQMAQsgACAGEA8LIAAgBUEwIARBARAZGiAAQdSZASAAIAFBNiABQQAQFCIEQoCAgIBwgyIBQoCAgICQf1IEfiABQoCAgIDgAFENAiAAIAQQDyAAQS8QLQUgBAtBzJ4BEL4BIgFCgICAgHCDQoCAgIDgAFENASAAIAVBNiABQQEQGRogBQsPCyAAIAUQD0KAgICA4AALMAAgAkEATARAIAAgAUKAgICAMEEAQQAQIQ8LIAAgASADKQMAIAJBAWsgA0EIahAhC6MCAgF/BH4jAEEQayIFJABCgICAgDAhBgJAAkAgACAFQQhqIAAgARAlIgkQPA0AIAVBATYCBAJAIAQEQCAD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gDBSBEAgB0KAgICA4ABRDQcgACABECYMAQsgACAFEMoBCyICQQBIDQUgAkUNACAAIAkgBRA8DQUgCSkDACIHIAR8Qv////////8PVQ0EQgAhASAHQgAgB0IAVRshBwNAIAEgB1ENAiAAIAUgASAJQQhqEIUBIgJBAEgNBiACBEAgACAGIAQgCSkDCBBqQQBIDQcLIARCAXwhBCABQgF8IQEMAAsACyAEQv7///////8PVQ0DIAVCIIinQXVPBEAgBaciAiACKAIAQQFqNgIACyAAIAYgBCAFEGpBAEgNBCAEQgF8IQQLIApBAWohCgwBCwsgACAGQTAgBEKAgICACHxC/////w9YBH4gBEL/////D4MFQoCAgIDAfiAEub0iAUKAgICAwIGA/P8AfSABQv///////////wCDQoCAgICAgID4/wBWGwsQRUEASA0BDAILIABB0NoAQQAQFQsgACAGEA9CgICAgOAAIQYLIAAgCBAPIAlBEGokACAGC7ECAgR+An8jAEEQayIIJABCgICAgOAAIQUCQAJ+AkAgAUKAgICAcFQNACABpy0ABUEQcUUNACAIIAKtNwMIIAAgAUEBIAhBCGoQpwEMAQsgABA+CyIEQoCAgIBwg0KAgICA4ABRDQAgAkEAIAJBAEobrSEHQgAhAQJAA0AgASAHUgRAIAMgAadBA3RqKQMAIgZCIIinQXVPBEAgBqciCSAJKAIAQQFqNgIACyAAIAQgASAGQYCAARDSASEJIAFCAXwhASAJQQBODQEMAgsLIAAgBEEwIAJBAE4EfiACrQVCgICAgMB+IAK4vSIBQoCAgIDAgYD8/wB9IAFC////////////AINCgICAgICAgPj/AFYbCxBFQQBIDQAgBCEFDAELIAAgBBAPCyAIQRBqJAAgBQu6CQICfwh+IwBBMGsiBCQAIAMpAwAhBiAEQoCAgIAwNwMYQQEhBQJAAkACfiACQQJIBEBCgICAgDAhDEKAgICAMAwBC0KAgICAMCADKQMIIgxCgICAgHCDQoCAgIAwUQ0AGkKAgICAMCEKQoCAgIAwIQlCgICAgDAhCEKAgICAMCELIAAgDBBgDQFBACEFQoCAgIAwIAJBA0kNABogAykDEAshDQJAAkACQAJAIAAgBkHRASAGQQAQFCIHQoCAgIBwgyIIQoCAgIAwUgRAAkACQCAIQoCAgIDgAFEEQEKAgICAMCEKQoCAgIAwIQlCgICAgDAhCAwBCyAAIAcQDwJ+AkAgAUKAgICAcFQNACABpy0ABUEQcUUNACAAIAFBAEEAEKcBDAELIAAQPgsiCEKAgICAcINCgICAgOAAUQRAQoCAgIAwIQpCgICAgDAhCQwBCyAGQiCIp0F1TwRAIAanIgIgAigCAEEBajYCAAsgBCAGNwMQIAAgBEEQakEIckEAEJkDIQIgBCkDGCEKIAQpAxAhCSACRQ0BC0KAgICAMCELDAYLQgAhBwNAIAAgCSAKIARBCGoQrgEiBkKAgICAcINCgICAgOAAUQ0CIAQoAggEQEKAgICAMCELDAYLAkAgBQRAIAYhAQwBCyAEIAY3AyAgBCAHQv////8PgzcDKCAAIAwgDUECIARBIGoQISEBIAAgBhAPIAFCgICAgHCDQoCAgIDgAFENAwsgACAIIAcgARBqQQBIDQIgB0IBfCEHDAALAAsgACAGECUiC0KAgICAcINCgICAgOAAUQ0CIAAgBEEIaiALEDxBAEgNAiAEAn4gBCkDCCIGQoCAgIAIfEL/////D1gEQCAGQv////8PgwwBC0KAgICAwH4gBrm9IgdCgICAgMCBgPz/AH0gB0L///////////8Ag0KAgICAgICA+P8AVhsLIgc3AyACfgJAIAFCgICAgHBUDQAgAactAAVBEHFFDQAgACABQQEgBEEgahCnAQwBCyAAQoCAgIAwQQEgBEEgahCuAwshCCAAIAcQDyAIQoCAgIBwg0KAgICA4ABRBEBCgICAgDAhCgwCC0IAIQcgBkIAIAZCAFUbIQkDQCAHIAlRBEBCgICAgDAhCkKAgICAMCEJDAULQoCAgIAwIQogACALIAcQcyIGQoCAgIBwg0KAgICA4ABRDQICQCAFBEAgBiEBDAELIAQgBjcDICAEIAdC/////w+DNwMoIAAgDCANQQIgBEEgahAhIQEgACAGEA8gAUKAgICAcINCgICAgOAAUQ0DCyAAIAggByABEGpBAEgNAiAHQgF8IQcMAAsAC0KAgICAMCELIAlCgICAgHCDQoCAgIAwUQ0DIAAgCUEBEK0BGgwDC0KAgICAMCEJDAILQoCAgIAwIQpCgICAgDAhCUKAgICAMCEIDAELIAAgCEEwIAenIgJBAE4EfiAHQv////8PgwVCgICAgMB+IAK4vSIBQoCAgIDAgYD8/wB9IAFC////////////AINCgICAgICAgPj/AFYbCxBFQQBODQELIAAgCBAPQoCAgIDgACEICyAAIAsQDyAAIAkQDyAAIAoQDyAEQTBqJAAgCAsmAEKAgICA4AAgACADKQMAEMoBIgBBAEetQoCAgIAQhCAAQQBIGwuAAQAjAEEQayIAJAAgABCjBAJ+IAA0AgggACkDAELAhD1+fCIBQoCAgIAIfEL/////D1gEQCABQv////8PgwwBC0KAgICAwH4gAbm9IgFCgICAgMCBgPz/AH0gAUL///////////8Ag0KAgICAgICA+P8AVhsLIQEgAEEQaiQAIAELxwIBBX8jAEEgayIEJAAgACADKQMAECgiAUKAgICAcINCgICAgOAAUgRAIAAgBEEIakEAED0aIAGnIgVBEGohBiAFKAIEQf////8HcSEHQQAhAwNAIAMgB05FBEACQAJ/IAUpAgRCgICAgAiDUCIIRQRAIAYgA0EBdGovAQAMAQsgAyAGai0AAAsiAkElRw0AAkAgA0EGaiAHSg0AIANBAWohAgJ/IAhFBEAgBiACQQF0ai8BAAwBCyACIAZqLQAAC0H1AEcNACAFIANBAmpBBBC4BCICQQBIDQAgA0EFaiEDDAELQSUhAiADQQNqIAdKDQAgBSADQQFqQQIQuAQiAkElIAJBAE4iCBshAiADQQJqIAMgCBshAwsgBEEIaiACEIsBGiADQQFqIQMMAQsLIAAgARAPIARBCGoQNiEBCyAEQSBqJAAgAQvkAQEEfyMAQSBrIgIkACAAIAMpAwAQKCIBQoCAgIBwg0KAgICA4ABSBEAgACACQQhqIAGnIgUoAgRB/////wdxED0aIAVBEGohBiAFKAIEQf////8HcSEHQQAhAwNAIAMgB0ZFBEACQAJAAkAgBS0AB0GAAXFFBEAgAyAGai0AACEEDAELIAYgA0EBdGovAQAiBEH/AUsNAQtBkOEBIARBxQAQ+wFFDQAgAkEIaiAEEIsBGgwBCyACQQhqIAQQmgILIANBAWohAwwBCwsgACABEA8gAkEIahA2IQELIAJBIGokACABC84EAgZ/AX4jAEEgayIGJAACQCAAIAMpAwAQKCIBQoCAgIBwg0KAgICA4ABRDQAgACAGQQhqIAGnIgkoAgRB/////wdxED0aIAlBEGohCEEAIQICQANAIAkpAgQiC6dB/////wdxIgogAkoEQCACQQFqIQUCQAJAIAtCgICAgAiDIgtQBEAgAiAIai0AACEDDAELIAggAkEBdGovAQAiA0H/AUsNAQsCQCADQTBrQQpJIANB3/8DcUHBAGtBGklyDQBBpZQBIANBCRD7AQ0AIAQNASADELIGRQ0BCyAGQQhqIAMQiwEaIAUhAgwCCwJ/An8CQCADQYD4A3EiB0GAsANHBEAgB0GAuANHDQFBv8MAIQcMBgtB5MAAIQcgBSAKTg0FAn8gC1BFBEAgCCAFQQF0ai8BAAwBCyAFIAhqLQAACyIFQYDAA2tBgHhJDQUgBkEIaiAFQf8HcSADQQp0QYD4P3FyQYCABGoiA0ESdkHwAXIQmgIgA0EMdkE/cUGAAXIhByACQQJqDAELIANB/wBNBEAgBkEIaiADEJoCIAUhAgwECyADQf8PTQRAIAUhAiADQQZ2QcABcgwCCyADQQx2QeABciEHIAULIQIgBkEIaiAHEJoCIANBBnZBP3FBgAFyCyEHIAZBCGoiBSAHEJoCIAUgA0E/cUGAAXIQmgIMAQsLIAAgARAPIAZBCGoQNiEBDAELIAAgBxC5BCAAIAEQDyAGKAIIKAIQIgBBEGogBigCDCAAKAIEEQAAQoCAgIDgACEBCyAGQSBqJAAgAQuVBAIGfwF+IwBBIGsiBSQAAkAgACADKQMAECgiAUKAgICAcINCgICAgOAAUQ0AIAAgBUEIakEAED0aIAGnIghBEGohCUEAIQIDQAJAAkACQCAIKQIEIgunQf////8HcSACSgRAAn8gC0KAgICACINQRQRAIAkgAkEBdGovAQAMAQsgAiAJai0AAAsiA0ElRgRAIAAgCCACELMGIgNBAEgNAyACQQNqIQYgA0H/AE0EQCAEBEAgBiECDAYLQSUgAyADELIGIgcbIQMgAkEBaiAGIAcbIQIMBQsCfyADQWBxQcABRgRAIANBH3EhA0GAASEHQQEMAQsgA0FwcUHgAUYEQCADQQ9xIQNBgBAhB0ECDAELIANBeHFB8AFHBEBBASEHQQAhA0EADAELIANBB3EhA0GAgAQhB0EDCyECA0AgAkEATA0DIAAgCCAGELMGIgpBAEgNBCAGQQNqIQYgCkHAAXFBgAFHBEBBACEDDAQFIAJBAWshAiAKQT9xIANBBnRyIQMMAQsACwALIAJBAWohAgwDCyAAIAEQDyAFQQhqEDYhAQwECyAGIQIgAyAHSCADQf//wwBKckUgA0GAcHFBgLADR3ENASAAQcmJARC5BAsgACABEA8gBSgCCCgCECIAQRBqIAUoAgwgACgCBBEAAEKAgICA4AAhAQwCCyAFQQhqIAMQuQEaDAALAAsgBUEgaiQAIAELNwAgACADKQMAELMBIgJFBEBCgICAgOAADwsgACACEIECIAJqQQBBCkEAELgCIQEgACACEFQgAQuHAQEBfyMAQRBrIgIkAAJAIAAgAykDABCzASIERQRAQoCAgIDgACEBDAELAn5CgICAgOAAIAAgAkEMaiADKQMIEHcNABogAigCDCIDBEBCgICAgMB+IANBJWtBXUkNARoLIAAgBBCBAiAEakEAIANBgQgQuAILIQEgACAEEFQLIAJBEGokACABCwkAIAAgARDdAgujAQIBfgF/IwBBEGsiAiQAAn4gACABEN0CIgVCgICAgHCDQoCAgIDgAFEEQCAFDAELQQohBgJAAkAgBA0AIAMpAwAiAUKAgICAcINCgICAgDBRDQAgACABEI4FIgZBAEgNAQtCgICAgOAAIAAgAkEIaiAFEG4NARogACACKwMIIAZBAEEAEI8CDAELIAAgBRAPQoCAgIDgAAshASACQRBqJAAgAQuMAgIBfgF8IwBBEGsiAiQAQoCAgIDgACEEAkAgACABEN0CIgFCgICAgHCDQoCAgIDgAFEEQCABIQQMAQsgACACIAEQbg0AAkACQCADKQMAIgFCgICAgHCDQoCAgIAwUQRAIAIpAwAhAQwBCyAAIAJBDGogARC6AQ0CIAIrAwAiBb0iAUKAgICAgICA+P8Ag0KAgICAgICA+P8AUg0BCyAAQoCAgIDAfiABQoCAgIDAgYD8/wB9IAFC////////////AINCgICAgICAgPj/AFYbEDchBAwBCyACKAIMIgNB5QBrQZt/TQRAIABBijRBABBQDAELIAAgBUEKIANBARCPAiEECyACQRBqJAAgBAvYAQIBfgF8IwBBEGsiAiQAQoCAgIDgACEEAkAgACABEN0CIgFCgICAgHCDQoCAgIDgAFEEQCABIQQMAQsgACACIAEQbg0AIAAgAkEMaiADKQMAELoBDQAgAigCDCIDQeUATwRAIABBijRB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LUiv7z8IIKpBvMOOPCdaYe4buu8/Muupw5QrhDyXums3K8XvP+6F0TGpZIo8QEVuW3bQ7z/t4zvkujeOvBS+nK392+8/nc2RTTuJdzzYkJ6BwefvP4nMYEHBBVM88XGPK8Lz7z8AAAAAAADwPwAAAAAAAPg/AAAAAAAAAAAG0M9D6/1MPgBBmxkL54UBQAO44j8oKXt9ACgpe3N1cGVyKC4uLmFyZ3VtZW50cyk7fQAoKSB7CiAgICBbbmF0aXZlIGNvZGVdCn0AY2Fubm90IG1peCA/PyB3aXRoICYmIG9yIHx8AGN0egBwcm94eTogcHJvcGVydHkgbm90IHByZXNlbnQgaW4gdGFyZ2V0IHdlcmUgcmV0dXJuZWQgYnkgbm9uIGV4dGVuc2libGUgcHJveHkAcmV2b2tlZCBwcm94eQBQcm94eQBhZGRfcHJvcGVydHkAcHJveHk6IGNhbm5vdCBzZXQgcHJvcGVydHkAbm8gc2V0dGVyIGZvciBwcm9wZXJ0eQB2YWx1ZSBoYXMgbm8gcHJvcGVydHkAY291bGQgbm90IGRlbGV0ZSBwcm9wZXJ0eQBwcm94eTogZHVwbGljYXRlIHByb3BlcnR5AEpTX0RlZmluZUF1dG9Jbml0UHJvcGVydHkAaGFzT3duUHJvcGVydHkAcHJveHk6IGluY29uc2lzdGVudCBkZWxldGVQcm9wZXJ0eQBwcm94eTogaW5jb25zaXN0ZW50IGRlZmluZVByb3BlcnR5AEpTX0RlZmluZVByb3BlcnR5ACFtci0+ZW1wdHkAaW5maW5pdHkASW5maW5pdHkAb3V0IG9mIG1lbW9yeQB1bmtub3duIHVuaWNvZGUgZ2VuZXJhbCBjYXRlZ29yeQBHZW5lcmFsX0NhdGVnb3J5AGV2ZXJ5AGFueQBhcHBseQAnJXMnIGlzIHJlYWQtb25seQBleHBlY3RpbmcgY2F0Y2ggb3IgZmluYWxseQBzdGlja3kAYmlnaW50IGFyZSBmb3JiaWRkZW4gaW4gSlNPTi5zdHJpbmdpZnkAc3ViYXJyYXkAZW1wdHkgYXJyYXkAbm9uIGludGVnZXIgaW5kZXggaW4gdHlwZWQgYXJyYXkAbmVnYXRpdmUgaW5kZXggaW4gdHlwZWQgYXJyYXkAb3V0LW9mLWJvdW5kIGluZGV4IGluIHR5cGVkIGFycmF5AGNhbm5vdCBjcmVhdGUgbnVtZXJpYyBpbmRleCBpbiB0eXBlZCBhcnJheQBpc0FycmF5AFR5cGVkQXJyYXkAZ2V0RGF5AGdldFVUQ0RheQBqc19nZXRfYXRvbV9pbmRleABpbnZhbGlkIGFycmF5IGluZGV4AG91dC1vZi1ib3VuZCBudW1lcmljIGluZGV4AEpTX0F0b21Jc0FycmF5SW5kZXgAZmluZEluZGV4AGludmFsaWQgZXhwb3J0IHN5bnRheABpbnZhbGlkIGFzc2lnbm1lbnQgc3ludGF4AG1heABcdSUwNHgAaW52YWxpZCBvcGNvZGU6IHBjPSV1IG9wY29kZT0weCUwMngALSsgICAwWDB4AC0wWCswWCAwWC0weCsweCAweABsaW5lIHRlcm1pbmF0b3Igbm90IGFsbG93ZWQgYWZ0ZXIgdGhyb3cAYmZfcG93AG5vdwBpbnRlZ2VyIG92ZXJmbG93AHN0YWNrIG92ZXJmbG93AG11c3QgYmUgY2FsbGVkIHdpdGggbmV3AGlzVmlldwBEYXRhVmlldwByYXcAdGRpdgBmZGl2AGVkaXYAY2RpdgAldQBjbGFzcyBkZWNsYXJhdGlvbnMgY2FuJ3QgYXBwZWFyIGluIHNpbmdsZS1zdGF0ZW1lbnQgY29udGV4dABmdW5jdGlvbiBkZWNsYXJhdGlvbnMgY2FuJ3QgYXBwZWFyIGluIHNpbmdsZS1zdGF0ZW1lbnQgY29udGV4dABsZXhpY2FsIGRlY2xhcmF0aW9ucyBjYW4ndCBhcHBlYXIgaW4gc2luZ2xlLXN0YXRlbWVudCBjb250ZXh0AGR1cGxpY2F0ZSBhcmd1bWVudCBuYW1lcyBub3QgYWxsb3dlZCBpbiB0aGlzIGNvbnRleHQAZHVwbGljYXRlIHBhcmFtZXRlciBuYW1lcyBub3QgYWxsb3dlZCBpbiB0aGlzIGNvbnRleHQAaW1wb3J0Lm1ldGEgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGNvbnRleHQASlNfRnJlZUNvbnRleHQASlNDb250ZXh0AGpzX21hcF9pdGVyYXRvcl9uZXh0AGpzX2FzeW5jX2dlbmVyYXRvcl9yZXN1bWVfbmV4dAB1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dAB0dABleHBvcnRlZCB2YXJpYWJsZSAnJXMnIGRvZXMgbm90IGV4aXN0AHByaXZhdGUgY2xhc3MgZmllbGQgJyVzJyBkb2VzIG5vdCBleGlzdAB0ZXN0AGFzc2lnbm1lbnQgcmVzdCBwcm9wZXJ0eSBtdXN0IGJlIGxhc3QAYmZfc3FydABzb3J0AGNicnQAdHJpbVN0YXJ0AHBhZFN0YXJ0AHVua25vd24gdW5pY29kZSBzY3JpcHQAU2NyaXB0AGh5cG90AGZyZWVfemVyb19yZWZjb3VudABmYXN0X2FycmF5X2NvdW50AGJpbmFyeV9vYmplY3RfY291bnQAc3RyX2luZGV4ID09IG51bV9rZXlzX2NvdW50ICsgc3RyX2tleXNfY291bnQAbnVtX2luZGV4ID09IG51bV9rZXlzX2NvdW50AHN0cl9jb3VudABwcm9wX2NvdW50AHN5bV9pbmRleCA9PSBhdG9tX2NvdW50AGxhYmVsID49IDAgJiYgbGFiZWwgPCBzLT5sYWJlbF9jb3VudABsYWIxID49IDAgJiYgbGFiMSA8IHMtPmxhYmVsX2NvdW50AG9ial9jb3VudAB2YWwgPCBzLT5jYXB0dXJlX2NvdW50AHZhbDIgPCBzLT5jYXB0dXJlX2NvdW50AHNoYXBlX2NvdW50AGpzX2Z1bmNfcGMybGluZV9jb3VudABtZW1vcnlfdXNlZF9jb3VudABtYWxsb2NfY291bnQAanNfZnVuY19jb3VudABjX2Z1bmNfY291bnQAaW52YWxpZCByZXBlYXQgY291bnQAaW52YWxpZCByZXBldGl0aW9uIGNvdW50AGZvbnQAaW52YWxpZCBjb2RlIHBvaW50AGZyb21Db2RlUG9pbnQAaW52YWxpZCBoaW50AGNhbm5vdCBjb252ZXJ0IE5hTiBvciBJbmZpbml0eSB0byBiaWdpbnQAY2Fubm90IGNvbnZlcnQgdG8gYmlnaW50AGJvdGggb3BlcmFuZHMgbXVzdCBiZSBiaWdpbnQAbm90IGEgYmlnaW50AGVuY29kZVVSSUNvbXBvbmVudABkZWNvZGVVUklDb21wb25lbnQAdW5leHBlY3RlZCBlbmQgb2YgY29tbWVudABpbnZhbGlkIHN3aXRjaCBzdGF0ZW1lbnQAQmlnSW50AHBhcnNlSW50AGR1cGxpY2F0ZSBkZWZhdWx0AG1hbGxvY19saW1pdABzcGxpdABleHBlY3RpbmcgaGV4IGRpZ2l0AHRyaW1SaWdodAByZWR1Y2VSaWdodAB1bnNoaWZ0AHRyaW1MZWZ0AGludmFsaWQgb2Zmc2V0AGludmFsaWQgYnl0ZU9mZnNldABnZXRUaW1lem9uZU9mZnNldAByZXNvbHZpbmcgZnVuY3Rpb24gYWxyZWFkeSBzZXQAcHJveHk6IGluY29uc2lzdGVudCBzZXQAZmluZF9qdW1wX3RhcmdldABleHBlY3RpbmcgdGFyZ2V0AGludmFsaWQgZGVzdHJ1Y3R1cmluZyB0YXJnZXQAcHJveHk6IGluY29uc2lzdGVudCBnZXQAV2Vha1NldABjb25zdHJ1Y3QASlNfRnJlZUF0b21TdHJ1Y3QAdXNlIHN0cmljdABSZWZsZWN0AHJlamVjdABub3QgYW4gQXN5bmNHZW5lcmF0b3Igb2JqZWN0AGNhbm5vdCBjb252ZXJ0IHRvIG9iamVjdABpbnZhbGlkIGJyYW5kIG9uIG9iamVjdABvcGVyYW5kICdwcm90b3R5cGUnIHByb3BlcnR5IGlzIG5vdCBhbiBvYmplY3QAcmVjZWl2ZXIgaXMgbm90IGFuIG9iamVjdABpdGVyYXRvciBtdXN0IHJldHVybiBhbiBvYmplY3QAbm90IGEgRGF0ZSBvYmplY3QAbm90IGEgb2JqZWN0AEpTT2JqZWN0AGJpZ2Zsb2F0AHBhcnNlRmxvYXQAZmxhdABub3RoaW5nIHRvIHJlcGVhdABjb25jYXQAY29kZVBvaW50QXQAY2hhckF0AGNoYXJDb2RlQXQAa2V5cwBwcm94eTogdGFyZ2V0IHByb3BlcnR5IG11c3QgYmUgcHJlc2VudCBpbiBwcm94eSBvd25LZXlzACAgZmFzdCBhcnJheXMAZXhwb3J0ICclcycgaW4gbW9kdWxlICclcycgaXMgYW1iaWd1b3VzAHByaXZhdGUgY2xhc3MgZmllbGQgJyVzJyBhbHJlYWR5IGV4aXN0cwB0b28gbWFueSBhcmd1bWVudHMAVG9vIG1hbnkgY2FsbCBhcmd1bWVudHMAZmFzdF9hcnJheV9lbGVtZW50cwAgIGVsZW1lbnRzAGludmFsaWQgbnVtYmVyIG9mIGRpZ2l0cwBiaW5hcnkgb2JqZWN0cwBpbnZhbGlkIHByb3BlcnR5IGFjY2VzcwBqc19vcF9kZWZpbmVfY2xhc3MAZmQtPmJ5dGVfY29kZS5idWZbZGVmaW5lX2NsYXNzX3Bvc10gPT0gT1BfZGVmaW5lX2NsYXNzAF9fZ2V0Q2xhc3MAc2V0SG91cnMAZ2V0SG91cnMAc2V0VVRDSG91cnMAZ2V0VVRDSG91cnMAZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycwB0b28gbWFueSBpbWJyaWNhdGVkIHF1YW50aWZpZXJzAHVuaWNvZGVfcHJvcF9vcHMAYWNvcwBmb3IgYXdhaXQgaXMgb25seSB2YWxpZCBpbiBhc3luY2hyb25vdXMgZnVuY3Rpb25zAG5ldy50YXJnZXQgb25seSBhbGxvd2VkIHdpdGhpbiBmdW5jdGlvbnMAYnl0ZWNvZGUgZnVuY3Rpb25zAEMgZnVuY3Rpb25zAHByb3h5OiBpbmNvbnNpc3RlbnQgcHJldmVudEV4dGVuc2lvbnMAU2NyaXB0X0V4dGVuc2lvbnMAYXRvbXMAcHJveHk6IHByb3BlcnRpZXMgbXVzdCBiZSBzdHJpbmdzIG9yIHN5bWJvbHMAZ2V0T3duUHJvcGVydHlTeW1ib2xzAHJlc29sdmVfbGFiZWxzAEpTX0V2YWxUaGlzAHN0cmluZ3MAaW52YWxpZCBkZXNjcmlwdG9yIGZsYWdzAGludmFsaWQgcmVndWxhciBleHByZXNzaW9uIGZsYWdzAHZhbHVlcwBzZXRNaW51dGVzAGdldE1pbnV0ZXMAc2V0VVRDTWludXRlcwBnZXRVVENNaW51dGVzAHRvbyBtYW55IGNhcHR1cmVzACAgc2hhcGVzAGdldE93blByb3BlcnR5TmFtZXMAZ2NfZnJlZV9jeWNsZXMAYWRkX2V2YWxfdmFyaWFibGVzAHJlc29sdmVfdmFyaWFibGVzAHRvbyBtYW55IGxvY2FsIHZhcmlhYmxlcwB0b28gbWFueSBjbG9zdXJlIHZhcmlhYmxlcwBjb21wYWN0X3Byb3BlcnRpZXMAICBwcm9wZXJ0aWVzAGRlZmluZVByb3BlcnRpZXMAZW50cmllcwBmcm9tRW50cmllcwB0b28gbWFueSByYW5nZXMAaW5jbHVkZXMAc2V0TWlsbGlzZWNvbmRzAGdldE1pbGxpc2Vjb25kcwBzZXRVVENNaWxsaXNlY29uZHMAZ2V0VVRDTWlsbGlzZWNvbmRzAHNldFNlY29uZHMAZ2V0U2Vjb25kcwBzZXRVVENTZWNvbmRzAGdldFVUQ1NlY29uZHMAaXRhbGljcwBhYnMAcHJveHk6IGluY29uc2lzdGVudCBoYXMAJS4qcwAgKCVzAHNldCAlcwBnZXQgJXMAICAgIGF0ICVzAG5vIG92ZXJsb2FkZWQgb3BlcmF0b3IgJXMAbm90IGEgJXMAdW5zdXBwb3J0ZWQga2V5d29yZDogJXMAc3Vic3RyAHByb3h5OiBpbmNvbnNpc3RlbnQgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yAHN1cGVyKCkgaXMgb25seSB2YWxpZCBpbiBhIGRlcml2ZWQgY2xhc3MgY29uc3RydWN0b3IAcGFyZW50IGNsYXNzIG11c3QgYmUgY29uc3RydWN0b3IAbm90IGEgY29uc3RydWN0b3IAQXJyYXkgSXRlcmF0b3IAU2V0IEl0ZXJhdG9yAE1hcCBJdGVyYXRvcgBSZWdFeHAgU3RyaW5nIEl0ZXJhdG9yAG5vdCBhbiBBc3luYy1mcm9tLVN5bmMgSXRlcmF0b3IAY2Fubm90IGludm9rZSBhIHJ1bm5pbmcgZ2VuZXJhdG9yAG5vdCBhIGdlbmVyYXRvcgBBc3luY0dlbmVyYXRvcgBzeW50YXggZXJyb3IAU3ludGF4RXJyb3IARXZhbEVycm9yAEludGVybmFsRXJyb3IAQWdncmVnYXRlRXJyb3IAVHlwZUVycm9yAFJhbmdlRXJyb3IAUmVmZXJlbmNlRXJyb3IAVVJJRXJyb3IAZmxvb3IAZm9udGNvbG9yAGFuY2hvcgBmb3IAa2V5Rm9yAGV4cGVjdGluZyBzdXJyb2dhdGUgcGFpcgBhIGRlY2xhcmF0aW9uIGluIHRoZSBoZWFkIG9mIGEgZm9yLSVzIGxvb3AgY2FuJ3QgaGF2ZSBhbiBpbml0aWFsaXplcgAnYXJndW1lbnRzJyBpZGVudGlmaWVyIGlzIG5vdCBhbGxvd2VkIGluIGNsYXNzIGZpZWxkIGluaXRpYWxpemVyAGludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyBmb3IgZ2V0dGVyIG9yIHNldHRlcgBpbnZhbGlkIHNldHRlcgBpbnZhbGlkIGdldHRlcgBmaWx0ZXIAbWlzc2luZyBmb3JtYWwgcGFyYW1ldGVyACJ1c2Ugc3RyaWN0IiBub3QgYWxsb3dlZCBpbiBmdW5jdGlvbiB3aXRoIGRlZmF1bHQgb3IgZGVzdHJ1Y3R1cmluZyBwYXJhbWV0ZXIAaW52YWxpZCBjaGFyYWN0ZXIAdW5leHBlY3RlZCBjaGFyYWN0ZXIAcHJpdmF0ZSBjbGFzcyBmaWVsZCBmb3JiaWRkZW4gYWZ0ZXIgc3VwZXIAaW52YWxpZCByZWRlZmluaXRpb24gb2YgbGV4aWNhbCBpZGVudGlmaWVyACdsZXQnIGlzIG5vdCBhIHZhbGlkIGxleGljYWwgaWRlbnRpZmllcgBpbnZhbGlkIHJlZGVmaW5pdGlvbiBvZiBnbG9iYWwgaWRlbnRpZmllcgB5aWVsZCBpcyBhIHJlc2VydmVkIGlkZW50aWZpZXIAJyVzJyBpcyBhIHJlc2VydmVkIGlkZW50aWZpZXIAb3RoZXIAYXRvbTFfaXNfaW50ZWdlciAmJiBhdG9tMl9pc19pbnRlZ2VyAGNhbm5vdCBjb252ZXJ0IHRvIGJpZ2ludDogbm90IGFuIGludGVnZXIAaXNJbnRlZ2VyAGlzU2FmZUludGVnZXIAYnVmZmVyAFNoYXJlZEFycmF5QnVmZmVyAGNhbm5vdCB1c2UgaWRlbnRpY2FsIEFycmF5QnVmZmVyAGNhbm5vdCBjb252ZXJ0IGJpZ2ludCB0byBudW1iZXIAY2Fubm90IGNvbnZlcnQgYmlnZmxvYXQgdG8gbnVtYmVyAGNhbm5vdCBjb252ZXJ0IHN5bWJvbCB0byBudW1iZXIAY2Fubm90IGNvbnZlcnQgYmlnZGVjaW1hbCB0byBudW1iZXIAbm90IGEgbnVtYmVyAGxpbmVOdW1iZXIAbWFsZm9ybWVkIHVuaWNvZGUgY2hhcgBjbGVhcgBzZXRZZWFyAGdldFllYXIAc2V0RnVsbFllYXIAZ2V0RnVsbFllYXIAc2V0VVRDRnVsbFllYXIAZ2V0VVRDRnVsbFllYXIAcSAhPSByAHVuZXhwZWN0ZWQgbGluZSB0ZXJtaW5hdG9yIGluIHJlZ2V4cAB1bmV4cGVjdGVkIGVuZCBvZiByZWdleHAAUmVnRXhwAHN1cABpbnZhbGlkIGdyb3VwAHBvcABjb250aW51ZSBtdXN0IGJlIGluc2lkZSBsb29wAGJmX2xvZ2ljX29wAG51bV9rZXlzX2NtcAB1c2Ugc3RyaXAAbWFwAGZsYXRNYXAAV2Vha01hcABleHBlY3RpbmcgJ3snIGFmdGVyIFxwAGxvZzFwAGRpdmlzaW9uIGJ5IHplcm8AdW5rbm93bgBpdGVyYXRvcl9jbG9zZV9yZXR1cm4AcHJvbWlzZSBzZWxmIHJlc29sdXRpb24Ab3V0IG9mIG1lbW9yeSBpbiByZWdleHAgZXhlY3V0aW9uAGRlc2NyaXB0aW9uAHByb3h5OiBkZWZpbmVQcm9wZXJ0eSBleGNlcHRpb24AanNfYXN5bmNfZ2VuZXJhdG9yX3Jlc29sdmVfZnVuY3Rpb24AanNfY3JlYXRlX2Z1bmN0aW9uAHNldC9hZGQgaXMgbm90IGEgZnVuY3Rpb24AcmV0dXJuIG5vdCBpbiBhIGZ1bmN0aW9uAEFzeW5jR2VuZXJhdG9yRnVuY3Rpb24AQXN5bmNGdW5jdGlvbgBpbnZhbGlkIG9wZXJhdGlvbgB1bnN1cHBvcnRlZCBvcGVyYXRpb24AYXdhaXQgaW4gZGVmYXVsdCBleHByZXNzaW9uAHlpZWxkIGluIGRlZmF1bHQgZXhwcmVzc2lvbgBpbnZhbGlkIGRlY2ltYWwgZXNjYXBlIGluIHJlZ3VsYXIgZXhwcmVzc2lvbgBiYWNrIHJlZmVyZW5jZSBvdXQgb2YgcmFuZ2UgaW4gcmVndWxhciBleHByZXNzaW9uAGludmFsaWQgZXNjYXBlIHNlcXVlbmNlIGluIHJlZ3VsYXIgZXhwcmVzc2lvbgBleHBlY3RlZCAnb2YnIG9yICdpbicgaW4gZm9yIGNvbnRyb2wgZXhwcmVzc2lvbgB0b28gY29tcGxpY2F0ZWQgZGVzdHJ1Y3R1cmluZyBleHByZXNzaW9uAGV4cGVjdGVkICd9JyBhZnRlciB0ZW1wbGF0ZSBleHByZXNzaW9uAHRvUHJlY2lzaW9uAGFzaW4Aam9pbgBtaW4AY29weVdpdGhpbgB0ZW1wbGF0ZSBsaXRlcmFsIGNhbm5vdCBhcHBlYXIgaW4gYW4gb3B0aW9uYWwgY2hhaW4AY2lyY3VsYXIgcHJvdG90eXBlIGNoYWluAGFzc2lnbgAheS0+c2lnbgBpc0Zyb3plbgBtYXJrX2NoaWxkcmVuAChwb3MgKyBsZW4pIDw9IGJjX2J1Zl9sZW4AdW5leHBlY3RlZCBlbGxpcHNpcyB0b2tlbgB0aGVuAHNldHRlciBpcyBmb3JiaWRkZW4AbnVsbCBvciB1bmRlZmluZWQgYXJlIGZvcmJpZGRlbgBhdGFuAG5hbgBub3QgYSBib29sZWFuAEJvb2xlYW4AZ2Nfc2NhbgBiYWQgbm9ybWFsaXphdGlvbiBmb3JtAEpTX05ld1N5bWJvbEZyb21BdG9tAGZyb20AcmFuZG9tAHRyaW0AdGRpdnJlbQBmZGl2cmVtAGVkaXZyZW0AY2RpdnJlbQBiZl9kaXZyZW0Ac3FydHJlbQBpbXVsAG5vdCBhIHN5bWJvbABTeW1ib2wAUmVnRXhwIGV4ZWMgbWV0aG9kIG11c3QgcmV0dXJuIGFuIG9iamVjdCBvciBudWxsAHBhcmVudCBwcm90b3R5cGUgbXVzdCBiZSBhbiBvYmplY3Qgb3IgbnVsbABjYW5ub3Qgc2V0IHByb3BlcnR5ICclcycgb2YgbnVsbABjYW5ub3QgcmVhZCBwcm9wZXJ0eSAnJXMnIG9mIG51bGwATnVsbABmaWxsAG5ldyBBcnJheUJ1ZmZlciBpcyB0b28gc21hbGwAVHlwZWRBcnJheSBsZW5ndGggaXMgdG9vIHNtYWxsAGNhbGwAZG90QWxsAG1hdGNoQWxsAHJlcGxhY2VBbGwAY2VpbAB1cGRhdGVfbGFiZWwAYmNfYnVmW3Bvc10gPT0gT1BfbGFiZWwAZXZhbABpbnZhbGlkIGJpZ2ludCBsaXRlcmFsAGludmFsaWQgbnVtYmVyIGxpdGVyYWwAbWFsZm9ybWVkIGVzY2FwZSBzZXF1ZW5jZSBpbiBzdHJpbmcgbGl0ZXJhbABiZl9leHBfaW50ZXJuYWwAYmZfbG9nX2ludGVybmFsAEpTX1NldFByb3BlcnR5SW50ZXJuYWwASlNfR2V0T3duUHJvcGVydHlOYW1lc0ludGVybmFsAF9fSlNfRXZhbEludGVybmFsAGJpZ2RlY2ltYWwAbnR0X2ZmdF9wYXJ0aWFsAHRvRXhwb25lbnRpYWwAc2VhbABnbG9iYWwAYmxpbmsAX19kYXRlX2Nsb2NrAHN0YWNrAGxyZV9leGVjX2JhY2t0cmFjawBzLT5pc193ZWFrAGJmX3Bvd191aQBzZXRNb250aABnZXRNb250aABzZXRVVENNb250aABnZXRVVENNb250aABpbnZhbGlkIGtleXdvcmQ6IHdpdGgAc3RhcnRzV2l0aABlbmRzV2l0aABwcm9wID09IEpTX0FUT01fbGVuZ3RoAGludmFsaWQgYXJyYXkgbGVuZ3RoAGludmFsaWQgYXJyYXkgYnVmZmVyIGxlbmd0aABpbnZhbGlkIGxlbmd0aABpbnZhbGlkIGJ5dGVMZW5ndGgAdXNlIG1hdGgATWF0aABwdXNoAGFjb3NoAEpTX1Jlc2l6ZUF0b21IYXNoAGFzaW5oAGF0YW5oAGJyZWFrIG11c3QgYmUgaW5zaWRlIGxvb3Agb3Igc3dpdGNoAG1hdGNoAGNhdGNoAHNlYXJjaABmb3JFYWNoAGJmX2xvZwBBcnJheSB0b28gbG9uZwBzdHJpbmcgdG9vIGxvbmcAQXJyYXkgbG9vIGxvbmcAc3Vic3RyaW5nAGNhbm5vdCBjb252ZXJ0IHN5bWJvbCB0byBzdHJpbmcAdW5leHBlY3RlZCBlbmQgb2Ygc3RyaW5nAG5vdCBhIHN0cmluZwBpbnZhbGlkIGNoYXJhY3RlciBpbiBhIEpTT04gc3RyaW5nAHRvU3RyaW5nAHRvRGF0ZVN0cmluZwB0b0xvY2FsZURhdGVTdHJpbmcAdG9UaW1lU3RyaW5nAHRvTG9jYWxlVGltZVN0cmluZwB0b0xvY2FsZVN0cmluZwB0b0dNVFN0cmluZwBKU1N0cmluZwB0b0lTT1N0cmluZwB0b1VUQ1N0cmluZwBkdXBsaWNhdGUgaW1wb3J0IGJpbmRpbmcAaW52YWxpZCBpbXBvcnQgYmluZGluZwBiaWcAcmVnZXhwIG11c3QgaGF2ZSB0aGUgJ2cnIGZsYWcAb2YAaW5mAGRpZmYgPT0gKGludDhfdClkaWZmAGRpZmYgPT0gKGludDE2X3QpZGlmZgBocmVmAGdjX2RlY3JlZgBmcmVlX3Zhcl9yZWYAb3B0aW1pemVfc2NvcGVfbWFrZV9nbG9iYWxfcmVmAHJlc2V0X3dlYWtfcmVmAGRlbGV0ZV93ZWFrX3JlZgBvcHRpbWl6ZV9zY29wZV9tYWtlX3JlZgBpbmRleE9mAGxhc3RJbmRleE9mAHZhbHVlT2YAc2V0UHJvdG90eXBlT2YAZ2V0UHJvdG90eXBlT2YAaXNQcm90b3R5cGVPZgAlLipmAGZvbnRzaXplAGJpbmFyeV9vYmplY3Rfc2l6ZQBzdHJfc2l6ZQBuZXdfc2l6ZSA8PSBzaC0+cHJvcF9zaXplAGRlc2NyIDwgcnQtPmF0b21fc2l6ZQBhdG9tIDwgcnQtPmF0b21fc2l6ZQBjb21wdXRlX3N0YWNrX3NpemUAb2JqX3NpemUAbiA8IGJ1Zl9zaXplAHNoYXBlX3NpemUAanNfZnVuY19wYzJsaW5lX3NpemUAanNfZnVuY19jb2RlX3NpemUAbWVtb3J5X3VzZWRfc2l6ZQBqc19mdW5jX3NpemUAbm9ybWFsaXplAGZyZWV6ZQByZXNvbHZlAHRvUHJpbWl0aXZlAHB1dF9sdmFsdWUAdW5rbm93biB1bmljb2RlIHByb3BlcnR5IHZhbHVlAHJlc3QgZWxlbWVudCBjYW5ub3QgaGF2ZSBhIGRlZmF1bHQgdmFsdWUAaW52YWxpZCByZXQgdmFsdWUAX19KU19BdG9tVG9WYWx1ZQBfX3F1b3RlAGlzRmluaXRlAGRlbGV0ZQBjcmVhdGUAc2V0RGF0ZQBnZXREYXRlAHNldFVUQ0RhdGUAZ2V0VVRDRGF0ZQBJbnZhbGlkIERhdGUAcmV2ZXJzZQBwYXJzZQBwcm94eSBwcmV2ZW50RXh0ZW5zaW9ucyBoYW5kbGVyIHJldHVybmVkIGZhbHNlAFByb21pc2UAdG9Mb3dlckNhc2UAdG9Mb2NhbGVMb3dlckNhc2UAdG9VcHBlckNhc2UAdG9Mb2NhbGVVcHBlckNhc2UAaWdub3JlQ2FzZQBsb2NhbGVDb21wYXJlAHByb3h5OiBpbmNvbnNpc3RlbnQgcHJvdG90eXBlAHByb3h5OiBiYWQgcHJvdG90eXBlAG5vdCBhIHByb3RvdHlwZQBpbnZhbGlkIG9iamVjdCB0eXBlAHVuZXNjYXBlAG5vbmUAcmVzdCBlbGVtZW50IG11c3QgYmUgdGhlIGxhc3Qgb25lAG11bHRpbGluZQAgIHBjMmxpbmUAc29tZQBKU19GcmVlUnVudGltZQBKU1J1bnRpbWUAc2V0VGltZQBnZXRUaW1lAHNldF9vYmplY3RfbmFtZQBleHBlY3RpbmcgcHJvcGVydHkgbmFtZQB1bmtub3duIHVuaWNvZGUgcHJvcGVydHkgbmFtZQBpbnZhbGlkIHByb3BlcnR5IG5hbWUAZHVwbGljYXRlIF9fcHJvdG9fXyBwcm9wZXJ0eSBuYW1lAGludmFsaWQgcmVkZWZpbml0aW9uIG9mIHBhcmFtZXRlciBuYW1lAGV4cGVjdGluZyBncm91cCBuYW1lAGR1cGxpY2F0ZSBncm91cCBuYW1lAGludmFsaWQgZ3JvdXAgbmFtZQBkdXBsaWNhdGUgbGFiZWwgbmFtZQBpbnZhbGlkIGZpcnN0IGNoYXJhY3RlciBvZiBwcml2YXRlIG5hbWUAaW52YWxpZCBsZXhpY2FsIHZhcmlhYmxlIG5hbWUAaW52YWxpZCBtZXRob2QgbmFtZQBleHBlY3RpbmcgZmllbGQgbmFtZQBpbnZhbGlkIGZpZWxkIG5hbWUAY2xhc3Mgc3RhdGVtZW50IHJlcXVpcmVzIGEgbmFtZQBmaWxlTmFtZQBjb21waWxlAG9iamVjdCBpcyBub3QgZXh0ZW5zaWJsZQBwcm94eTogaW5jb25zaXN0ZW50IGlzRXh0ZW5zaWJsZQBjYW5ub3QgaGF2ZSBzZXR0ZXIvZ2V0dGVyIGFuZCB2YWx1ZSBvciB3cml0YWJsZQBwcm9wZXJ0eSBpcyBub3QgY29uZmlndXJhYmxlAHZhbHVlIGlzIG5vdCBpdGVyYWJsZQBwcm9wZXJ0eUlzRW51bWVyYWJsZQBtaXNzaW5nIGluaXRpYWxpemVyIGZvciBjb25zdCB2YXJpYWJsZQBsZXhpY2FsIHZhcmlhYmxlAGludmFsaWQgcmVkZWZpbml0aW9uIG9mIGEgdmFyaWFibGUAcmV2b2NhYmxlAHN0cmlrZQBtcF9kaXZub3JtX2xhcmdlAGludmFsaWQgY2xhc3MgcmFuZ2UAbWVzc2FnZQBhc3luY19mdW5jX2ZyZWUAaW52YWxpZCBsdmFsdWUgaW4gc3RyaWN0IG1vZGUAaW52YWxpZCB2YXJpYWJsZSBuYW1lIGluIHN0cmljdCBtb2RlAGNhbm5vdCBkZWxldGUgYSBkaXJlY3QgcmVmZXJlbmNlIGluIHN0cmljdCBtb2RlAG9jdGFsIGVzY2FwZSBzZXF1ZW5jZXMgYXJlIG5vdCBhbGxvd2VkIGluIHN0cmljdCBtb2RlAG9jdGFsIGxpdGVyYWxzIGFyZSBkZXByZWNhdGVkIGluIHN0cmljdCBtb2RlAHVuaWNvZGUAICBieXRlY29kZQBKU0Z1bmN0aW9uQnl0ZWNvZGUAc2tpcF9kZWFkX2NvZGUAaW52YWxpZCBhcmd1bWVudCBuYW1lIGluIHN0cmljdCBjb2RlAGludmFsaWQgZnVuY3Rpb24gbmFtZSBpbiBzdHJpY3QgY29kZQBpbnZhbGlkIHJlZGVmaW5pdGlvbiBvZiBnbG9iYWwgaWRlbnRpZmllciBpbiBtb2R1bGUgY29kZQBpbXBvcnQubWV0YSBvbmx5IHZhbGlkIGluIG1vZHVsZSBjb2RlAGZyb21DaGFyQ29kZQBpbnZhbGlkIGZvciBpbi9vZiBsZWZ0IGhhbmQtc2lkZQBpbnZhbGlkIGFzc2lnbm1lbnQgbGVmdC1oYW5kIHNpZGUAcmVkdWNlAHNvdXJjZQAndGhpcycgY2FuIGJlIGluaXRpYWxpemVkIG9ubHkgb25jZQBwcm9wZXJ0eSBjb25zdHJ1Y3RvciBhcHBlYXJzIG1vcmUgdGhhbiBvbmNlAGludmFsaWQgVVRGLTggc2VxdWVuY2UAY2lyY3VsYXIgcmVmZXJlbmNlAHNsaWNlAHNwbGljZQByYWNlAHJlcGxhY2UAJSsuKmUAdW5leHBlY3RlZCAnYXdhaXQnIGtleXdvcmQAdW5leHBlY3RlZCAneWllbGQnIGtleXdvcmQAbWFwX2RlY3JlZl9yZWNvcmQAaXRlcmF0b3IgZG9lcyBub3QgaGF2ZSBhIHRocm93IG1ldGhvZABvYmplY3QgbmVlZHMgdG9JU09TdHJpbmcgbWV0aG9kACdzdXBlcicgaXMgb25seSB2YWxpZCBpbiBhIG1ldGhvZABmcm91bmQAX19iZl9yb3VuZABicmVhay9jb250aW51ZSBsYWJlbCBub3QgZm91bmQAb3V0IG9mIGJvdW5kAGZpbmQAYmluZABpbnZhbGlkIGluZGV4IGZvciBhcHBlbmQAZXh0cmFuZW91cyBjaGFyYWN0ZXJzIGF0IHRoZSBlbmQAdW5leHBlY3RlZCBkYXRhIGF0IHRoZSBlbmQAdW5leHBlY3RlZCBlbmQAaW52YWxpZCBpbmNyZW1lbnQvZGVjcmVtZW50IG9wZXJhbmQAaW52YWxpZCAnaW5zdGFuY2VvZicgcmlnaHQgb3BlcmFuZABpbnZhbGlkICdpbicgb3BlcmFuZAB0cmltRW5kAHBhZEVuZABib2xkACVsbGQAZ2NfZGVjcmVmX2NoaWxkAHJlc29sdmVfc2NvcGVfcHJpdmF0ZV9maWVsZABjYW5ub3QgZGVsZXRlIGEgcHJpdmF0ZSBjbGFzcyBmaWVsZABleHBlY3RpbmcgPGJyYW5kPiBwcml2YXRlIGZpZWxkACVzIGlzIG5vdCBpbml0aWFsaXplZABmaXhlZAB0b0ZpeGVkAHNldF9vYmplY3RfbmFtZV9jb21wdXRlZAByZWdleCBub3Qgc3VwcG9ydGVkAGV2YWwgaXMgbm90IHN1cHBvcnRlZABSZWdFeHAgYXJlIG5vdCBzdXBwb3J0ZWQAaW50ZXJydXB0ZWQAJXMgb2JqZWN0IGV4cGVjdGVkAGlkZW50aWZpZXIgZXhwZWN0ZWQAYnl0ZWNvZGUgZnVuY3Rpb24gZXhwZWN0ZWQAc3RyaW5nIGV4cGVjdGVkAGZyb20gY2xhdXNlIGV4cGVjdGVkAGZ1bmN0aW9uIG5hbWUgZXhwZWN0ZWQAdmFyaWFibGUgbmFtZSBleHBlY3RlZABtZXRhIGV4cGVjdGVkAHJlamVjdGVkAG1lbW9yeSBhbGxvY2F0ZWQAbWVtb3J5IHVzZWQAZGVyaXZlZCBjbGFzcyBjb25zdHJ1Y3RvciBtdXN0IHJldHVybiBhbiBvYmplY3Qgb3IgdW5kZWZpbmVkAGNhbm5vdCBzZXQgcHJvcGVydHkgJyVzJyBvZiB1bmRlZmluZWQAY2Fubm90IHJlYWQgcHJvcGVydHkgJyVzJyBvZiB1bmRlZmluZWQAZmxhZ3MgbXVzdCBiZSB1bmRlZmluZWQAVW5kZWZpbmVkAHByaXZhdGUgY2xhc3MgZmllbGQgaXMgYWxyZWFkeSBkZWZpbmVkACclcycgaXMgbm90IGRlZmluZWQAZ3JvdXAgbmFtZSBub3QgZGVmaW5lZABvcGVyYXRvciAlczogbm8gZnVuY3Rpb24gZGVmaW5lZABhbGxTZXR0bGVkAGZ1bGZpbGxlZABjYW5ub3QgYmUgY2FsbGVkAGlzU2VhbGVkACFzaC0+aXNfaGFzaGVkAHZhcl9yZWYtPmlzX2RldGFjaGVkAEFycmF5QnVmZmVyIGlzIGRldGFjaGVkAGFkZAAlKzA3ZAAlMDRkACUwMmQlMDJkACUwMmQvJTAyZC8lMCpkACUuM3MgJS4zcyAlMDJkICUwKmQAOiVkAGludmFsaWQgdGhyb3cgdmFyIHR5cGUgJWQAc2MAanNfZGVmX21hbGxvYwB0cnVuYwBnYwBleGVjAGJmX2ludGVnZXJfdG9fcmFkaXhfcmVjAHF1aWNranMvcXVpY2tqcy5jAHF1aWNranMvbGlicmVnZXhwLmMAcXVpY2tqcy9saWJiZi5jAHF1aWNranMvbGlidW5pY29kZS5jAHN1YgBwcm9taXNlX3JlYWN0aW9uX2pvYgBqc19wcm9taXNlX3Jlc29sdmVfdGhlbmFibGVfam9iAHIgIT0gYSAmJiByICE9IGIAcSAhPSBhICYmIHEgIT0gYgByd2EAciAhPSBhAF9fbG9va3VwU2V0dGVyX18AX19kZWZpbmVTZXR0ZXJfXwBfX2xvb2t1cEdldHRlcl9fAF9fZGVmaW5lR2V0dGVyX18AX19wcm90b19fAFtTeW1ib2wuc3BsaXRdAFtTeW1ib2wuc3BlY2llc10AW1N5bWJvbC5pdGVyYXRvcl0AW1N5bWJvbC5hc3luY0l0ZXJhdG9yXQBbU3ltYm9sLm1hdGNoQWxsXQBbU3ltYm9sLm1hdGNoXQBbU3ltYm9sLnNlYXJjaF0AW1N5bWJvbC50b1N0cmluZ1RhZ10AW1N5bWJvbC50b1ByaW1pdGl2ZV0AW3Vuc3VwcG9ydGVkIHR5cGVdAFtmdW5jdGlvbiBieXRlY29kZV0AW1N5bWJvbC5oYXNJbnN0YW5jZV0AW1N5bWJvbC5yZXBsYWNlXQBbACUwMmQ6JTAyZDolMDJkLiUwM2RaAFBPU0lUSVZFX0lORklOSVRZAE5FR0FUSVZFX0lORklOSVRZAHAtPmNsYXNzX2lkID09IEpTX0NMQVNTX0FSUkFZAHN0YWNrX2xlbiA8IFBPUF9TVEFDS19MRU5fTUFYAC0lMDJkLSUwMmRUAEpTX0F0b21HZXRTdHJSVABvcGNvZGUgPCBSRU9QX0NPVU5UAEJZVEVTX1BFUl9FTEVNRU5UACUwMmQ6JTAyZDolMDJkIEdNVABKU19WQUxVRV9HRVRfVEFHKHNmLT5jdXJfZnVuYykgPT0gSlNfVEFHX09CSkVDVAB2YXJfa2luZCA9PSBKU19WQVJfUFJJVkFURV9TRVRURVIATUFYX1NBRkVfSU5URUdFUgBNSU5fU0FGRV9JTlRFR0VSAGFzVWludE4AYXNJbnROAGlzTmFOAERhdGUgdmFsdWUgaXMgTmFOAHRvSlNPTgBFUFNJTE9OAE5BTgAlMDJkOiUwMmQ6JTAyZCAlY00Acy0+bGFiZWxfc2xvdHNbbGFiZWxdLmZpcnN0X3JlbG9jID09IE5VTEwAbGFiZWxfc2xvdHNbaV0uZmlyc3RfcmVsb2MgPT0gTlVMTABwcnMgIT0gTlVMTABzZi0+Y3VyX3NwICE9IE5VTEwAc2YgIT0gTlVMTABtcjEgIT0gTlVMTAB2YXJfa2luZCAhPSBKU19WQVJfTk9STUFMAGItPmZ1bmNfa2luZCA9PSBKU19GVU5DX05PUk1BTABlbmNvZGVVUkkAZGVjb2RlVVJJAFBJAHNwZWNpYWwgPT0gUFVUX0xWQUxVRV9OT0tFRVAgfHwgc3BlY2lhbCA9PSBQVVRfTFZBTFVFX05PS0VFUF9ERVBUSABzLT5zdGF0ZSA9PSBKU19BU1lOQ19HRU5FUkFUT1JfU1RBVEVfRVhFQ1VUSU5HAHByZWMxICE9IEJGX1BSRUNfSU5GADAxMjM0NTY3ODlBQkNERUYAU0laRQBNQVhfVkFMVUUATUlOX1ZBTFVFAE5BTUUAZXZhbF90eXBlID09IEpTX0VWQUxfVFlQRV9HTE9CQUwgfHwgZXZhbF90eXBlID09IEpTX0VWQUxfVFlQRV9NT0RVTEUAcC0+Z2Nfb2JqX3R5cGUgPT0gSlNfR0NfT0JKX1RZUEVfSlNfT0JKRUNUIHx8IHAtPmdjX29ial90eXBlID09IEpTX0dDX09CSl9UWVBFX0ZVTkNUSU9OX0JZVEVDT0RFAExPRzJFAExPRzEwRQBzLT5zdGF0ZSA9PSBKU19BU1lOQ19HRU5FUkFUT1JfU1RBVEVfQVdBSVRJTkdfUkVUVVJOIHx8IHMtPnN0YXRlID09IEpTX0FTWU5DX0dFTkVSQVRPUl9TVEFURV9DT01QTEVURUQAVVRDADxpbnB1dD4APHNldD4APGFub255bW91cz4APGR1bXA+ADxudWxsPgBiaWdpbnQgb3BlcmFuZHMgYXJlIGZvcmJpZGRlbiBmb3IgPj4+ACZxdW90OwBzZXRVaW50OABnZXRVaW50OABzZXRJbnQ4AGdldEludDgAbWFsZm9ybWVkIFVURi04AHJhZGl4IG11c3QgYmUgYmV0d2VlbiAyIGFuZCAzNgBzZXRVaW50MTYAZ2V0VWludDE2AHNldEludDE2AGdldEludDE2AGFyZ2MgPT0gNQBzZXRCaWdVaW50NjQAZ2V0QmlnVWludDY0AHNldEJpZ0ludDY0AGdldEJpZ0ludDY0AHNldEZsb2F0NjQAZ2V0RmxvYXQ2NABhcmdjID09IDMAYXRhbjIAbG9nMgBmbG9vckxvZzIAU1FSVDFfMgBTUVJUMgBMTjIAY2x6MzIAc2V0VWludDMyAGdldFVpbnQzMgBzZXRJbnQzMgBnZXRJbnQzMgBzZXRGbG9hdDMyAGdldEZsb2F0MzIAc3RhY2tfbGVuID49IDIASlNfQXRvbUlzTnVtZXJpY0luZGV4MQBqc19mY3Z0MQBKU19Db21wYWN0QmlnSW50MQBleHBtMQByICE9IGExICYmIHIgIT0gYjEAbHMtPmFkZHIgPT0gLTEAbnEgPj0gMQBzdGFja19sZW4gPj0gMQBwLT5oZWFkZXIucmVmX2NvdW50ID09IDEAcC0+c2hhcGUtPmhlYWRlci5yZWZfY291bnQgPT0gMQBzdGFja19sZW4gPT0gMQBqc19mcmVlX3NoYXBlMABsb2cxMABMTjEwAHAtPnJlZl9jb3VudCA+IDAAdmFyX3JlZi0+aGVhZGVyLnJlZl9jb3VudCA+IDAAc3RhY2tfc2l6ZSA+IDAAY3Bvb2xfaWR4ID49IDAAcnQtPmF0b21fY291bnQgPj0gMABscy0+cmVmX2NvdW50ID49IDAAcy0+aXNfZXZhbCB8fCBzLT5jbG9zdXJlX3Zhcl9jb3VudCA9PSAwAHAtPnJlZl9jb3VudCA9PSAwAGN0eC0+aGVhZGVyLnJlZl9jb3VudCA9PSAwAHNoLT5oZWFkZXIucmVmX2NvdW50ID09IDAAcC0+bWFyayA9PSAwAChuMiAlIHN0cmlwX2xlbikgPT0gMAAocHItPnUuaW5pdC5yZWFsbV9hbmRfaWQgJiAzKSA9PSAwAChuZXdfaGFzaF9zaXplICYgKG5ld19oYXNoX3NpemUgLSAxKSkgPT0gMABpICE9IDAAc2l6ZSAhPSAwAF4kXC4qKz8oKVtde318LwA8LwAwLgBtaXNzaW5nIGJpbmRpbmcgcGF0dGVybi4uLgBiaWdpbnQgYXJndW1lbnQgd2l0aCB1bmFyeSArAGFzeW5jIGZ1bmN0aW9uICoACn0pAGxpc3RfZW1wdHkoJnJ0LT5nY19vYmpfbGlzdCkAaiA9PSAoc2gtPnByb3BfY291bnQgLSBzaC0+ZGVsZXRlZF9wcm9wX2NvdW50KQBKU19Jc1VuZGVmaW5lZChmdW5jX3JldCkAIV9fSlNfQXRvbUlzVGFnZ2VkSW50KGRlc2NyKQAhYXRvbV9pc19mcmVlKHApAChudWxsKQAgKG5hdGl2ZSkAanNfY2xhc3NfaGFzX2J5dGVjb2RlKHAtPmNsYXNzX2lkKQB1bmNvbnNpc3RlbnQgc3RhY2sgc2l6ZTogJWQgJWQgKHBjPSVkKQBieXRlY29kZSBidWZmZXIgb3ZlcmZsb3cgKG9wPSVkLCBwYz0lZCkAc3RhY2sgb3ZlcmZsb3cgKG9wPSVkLCBwYz0lZCkAc3RhY2sgdW5kZXJmbG93IChvcD0lZCwgcGM9JWQpAGludmFsaWQgb3Bjb2RlIChvcD0lZCwgcGM9JWQpACg/OikAbm8gZnVuY3Rpb24gZmlsZW5hbWUgZm9yIGltcG9ydCgpAC1fLiF+KicoKQAgYW5vbnltb3VzKABTeW1ib2woAGV4cGVjdGluZyAnfScAY2xhc3MgY29uc3RydWN0b3JzIG11c3QgYmUgaW52b2tlZCB3aXRoICduZXcnAGV4cGVjdGluZyAnYXMnAHVuZXhwZWN0ZWQgdG9rZW4gaW4gZXhwcmVzc2lvbjogJyUuKnMnAHVuZXhwZWN0ZWQgdG9rZW46ICclLipzJwByZWRlY2xhcmF0aW9uIG9mICclcycAZHVwbGljYXRlIGV4cG9ydGVkIG5hbWUgJyVzJwBjaXJjdWxhciByZWZlcmVuY2Ugd2hlbiBsb29raW5nIGZvciBleHBvcnQgJyVzJyBpbiBtb2R1bGUgJyVzJwBDb3VsZCBub3QgZmluZCBleHBvcnQg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AJYAAADBAAAAlwAAAJgAAADCAAAAlwAAAJgAAADDAAAAawAAAGwAAADEAAAAmQAAAJoAAADFAAAAmQAAAJoAAAAvAAAAmwAAAJwAAADGAAAAawAAAGwAAADHAAAAnQAAAJ4AAAAAAAAA7h8AAB8gAAAqIAAA4h8AABUgAAA5IAAA+B8AAAYgAABjb3B5V2l0aGluAGVudHJpZXMAZmlsbABmaW5kAGZpbmRJbmRleABmbGF0AGZsYXRNYXAAaW5jbHVkZXMAa2V5cwB2YWx1ZXMAAAAAAAEBAgIDAwIDAEGQpwEL3xBudWxsAGZhbHNlAHRydWUAaWYAZWxzZQByZXR1cm4AdmFyAHRoaXMAZGVsZXRlAHZvaWQAdHlwZW9mAG5ldwBpbgBpbnN0YW5jZW9mAGRvAHdoaWxlAGZvcgBicmVhawBjb250aW51ZQBzd2l0Y2gAY2FzZQBkZWZhdWx0AHRocm93AHRyeQBjYXRjaABmaW5hbGx5AGZ1bmN0aW9uAGRlYnVnZ2VyAHdpdGgAY2xhc3MAY29uc3QAZW51bQBleHBvcnQAZXh0ZW5kcwBpbXBvcnQAc3VwZXIAaW1wbGVtZW50cwBpbnRlcmZhY2UAbGV0AHBhY2thZ2UAcHJpdmF0ZQBwcm90ZWN0ZWQAcHVibGljAHN0YXRpYwB5aWVsZABhd2FpdAAAbGVuZ3RoAGZpbGVOYW1lAGxpbmVOdW1iZXIAbWVzc2FnZQBlcnJvcnMAc3RhY2sAbmFtZQB0b1N0cmluZwB0b0xvY2FsZVN0cmluZwB2YWx1ZU9mAGV2YWwAcHJvdG90eXBlAGNvbnN0cnVjdG9yAGNvbmZpZ3VyYWJsZQB3cml0YWJsZQBlbnVtZXJhYmxlAHZhbHVlAGdldABzZXQAb2YAX19wcm90b19fAHVuZGVmaW5lZABudW1iZXIAYm9vbGVhbgBzdHJpbmcAb2JqZWN0AHN5bWJvbABpbnRlZ2VyAHVua25vd24AYXJndW1lbnRzAGNhbGxlZQBjYWxsZXIAPGV2YWw+ADxyZXQ+ADx2YXI+ADxhcmdfdmFyPgA8d2l0aD4AbGFzdEluZGV4AHRhcmdldABpbmRleABpbnB1dABkZWZpbmVQcm9wZXJ0aWVzAGFwcGx5AGpvaW4AY29uY2F0AHNwbGl0AGNvbnN0cnVjdABnZXRQcm90b3R5cGVPZgBzZXRQcm90b3R5cGVPZgBpc0V4dGVuc2libGUAcHJldmVudEV4dGVuc2lvbnMAaGFzAGRlbGV0ZVByb3BlcnR5AGRlZmluZVByb3BlcnR5AGdldE93blByb3BlcnR5RGVzY3JpcHRvcgBvd25LZXlzAGFkZABkb25lAG5leHQAdmFsdWVzAHNvdXJjZQBmbGFncwBnbG9iYWwAdW5pY29kZQByYXcAbmV3LnRhcmdldAB0aGlzLmFjdGl2ZV9mdW5jADxob21lX29iamVjdD4APGNvbXB1dGVkX2ZpZWxkPgA8c3RhdGljX2NvbXB1dGVkX2ZpZWxkPgA8Y2xhc3NfZmllbGRzX2luaXQ+ADxicmFuZD4AI2NvbnN0cnVjdG9yAGFzAGZyb20AbWV0YQAqZGVmYXVsdCoAKgBNb2R1bGUAdGhlbgByZXNvbHZlAHJlamVjdABwcm9taXNlAHByb3h5AHJldm9rZQBhc3luYwBleGVjAGdyb3VwcwBzdGF0dXMAcmVhc29uAGdsb2JhbFRoaXMAYmlnaW50AGJpZ2Zsb2F0AGJpZ2RlY2ltYWwAcm91bmRpbmdNb2RlAG1heGltdW1TaWduaWZpY2FudERpZ2l0cwBtYXhpbXVtRnJhY3Rpb25EaWdpdHMAdG9KU09OAE9iamVjdABBcnJheQBFcnJvcgBOdW1iZXIAU3RyaW5nAEJvb2xlYW4AU3ltYm9sAEFyZ3VtZW50cwBNYXRoAEpTT04ARGF0ZQBGdW5jdGlvbgBHZW5lcmF0b3JGdW5jdGlvbgBGb3JJbkl0ZXJhdG9yAFJlZ0V4cABBcnJheUJ1ZmZlcgBTaGFyZWRBcnJheUJ1ZmZlcgBVaW50OENsYW1wZWRBcnJheQBJbnQ4QXJyYXkAVWludDhBcnJheQBJbnQxNkFycmF5AFVpbnQxNkFycmF5AEludDMyQXJyYXkAVWludDMyQXJyYXkAQmlnSW50NjRBcnJheQBCaWdVaW50NjRBcnJheQBGbG9hdDMyQXJyYXkARmxvYXQ2NEFycmF5AERhdGFWaWV3AEJpZ0ludABCaWdGbG9hdABCaWdGbG9hdEVudgBCaWdEZWNpbWFsAE9wZXJhdG9yU2V0AE9wZXJhdG9ycwBNYXAAU2V0AFdlYWtNYXAAV2Vha1NldABNYXAgSXRlcmF0b3IAU2V0IEl0ZXJhdG9yAEFycmF5IEl0ZXJhdG9yAFN0cmluZyBJdGVyYXRvcgBSZWdFeHAgU3RyaW5nIEl0ZXJhdG9yAEdlbmVyYXRvcgBQcm94eQBQcm9taXNlAFByb21pc2VSZXNvbHZlRnVuY3Rpb24AUHJvbWlzZVJlamVjdEZ1bmN0aW9uAEFzeW5jRnVuY3Rpb24AQXN5bmNGdW5jdGlvblJlc29sdmUAQXN5bmNGdW5jdGlvblJlamVjdABBc3luY0dlbmVyYXRvckZ1bmN0aW9uAEFzeW5jR2VuZXJhdG9yAEV2YWxFcnJvcgBSYW5nZUVycm9yAFJlZmVyZW5jZUVycm9yAFN5bnRheEVycm9yAFR5cGVFcnJvcgBVUklFcnJvcgBJbnRlcm5hbEVycm9yADxicmFuZD4AU3ltYm9sLnRvUHJpbWl0aXZlAFN5bWJvbC5pdGVyYXRvcgBTeW1ib2wubWF0Y2gAU3ltYm9sLm1hdGNoQWxsAFN5bWJvbC5yZXBsYWNlAFN5bWJvbC5zZWFyY2gAU3ltYm9sLnNwbGl0AFN5bWJvbC50b1N0cmluZ1RhZwBTeW1ib2wuaXNDb25jYXRTcHJlYWRhYmxlAFN5bWJvbC5oYXNJbnN0YW5jZQBTeW1ib2wuc3BlY2llcwBTeW1ib2wudW5zY29wYWJsZXMAU3ltYm9sLmFzeW5jSXRlcmF0b3IAU3ltYm9sLm9wZXJhdG9yU2V0AEGAuAELtQgBAAAABQABFAUAARUFAAEVBQABFwUAARcBAAEAAQABAAEAAQABAAEAAQABAAEAAQACAAEFAwABCgEBAAABAgEAAQMCAAEBAgABAgMAAQIEAAEDBgABAgMAAQMEAAEEBQABAwMAAQQEAAEFBQABAgIAAQQEAAEDAwABAwMAAQQEAAEFBQADAgENAwEBDQMBAA0DAgENAwIADQMAAQ0DAwEKAQEAAAEAAAABAQIAAQAAAAECAgABAgAAAQEAAAEBAAAGAAAYBQEBDwMCAQoBAgEAAQEBAAEBAQAFAAEXBQABFwUAARcFAQAXBQEAFwUCABcBAgMAAQMAAAYAABgGAAAYBgEAGAUBARcFAQIXBQIAFwECAQABAwAAAQMBAAECAQABAgIAAQMAAAEDAQABBAAABQIBFwUBARcBAgIAAQIB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AAABADAAOgBB0IECCxEEADAAOgBBAFsAXwBgAGEAewBB8IECC8QLAQMFAQEBAQUFBQECAgMFBQEBAQICAwMFBQEFAREAAAAwmiAAAJowAHOBWgAwF2AAMAdsALOBbwAAF3AAAAd8AACBfwBAMIAAwwGYAJCBmABABpkAQJCcALSBpABALqUAMAG8AECGvABwgb8AAAHAADCBwABABMEAMAHDAECCwwAwgsQAQILFADABxwAwgccAMAHIAECCyAAwgckAMAHKAACBygAwAcsAMIHLAEACzAAAAc0AMAHOADCBzgAAAc8AMIHPAEAG0AAwAdMAQILTADCB1ABAAtYAMAHXAECC1wAwgtgAQITZADCB2wBAAtwAQALeAACB3wBQA+IAUIPjAFAD5QBAkOYAAIHuAEAS7wC0AfgAUIP4AEAC+gAwAfsAMIH7AEAo/AAwARABQBIRATEBHQFAgh0BMIEeATEBHwEBgh8BQIIgATCBIQEwASIBMIEiAUAKIwEBASgBAYEoAQEBKQEAgSkBAAEqAQACKwEAgSwBAIEtAQEBLgEAATABAYEwAQCBMQEBgTIBAQEzAQABNAEAgTQBAQE1AQGBNQEBATYBAIE3AQGBOAEAATkBAIE6AQGBPgEAAUABAQFBAQCBQQEBgUMBAAFEAQCBRAEAAkUBAAFGAQABSQEBgU4BAQFPAXOBogFABLgBQAK7AQCDvQEwgb8BMAHDATADxAEwAcYBMALHAdAByAEwkcgBMInRAQAB1gEAg9YB0wHYAQCR2AFzAeEBAInhAQAB5gEAguYBMIHnAXMB6AFzgegBc4HqAXMB6wEAgesBQBjsAXMB+AFzgfgBAAH5AQCB+QGgAfoBc4H6AUCC+wEwgfwBQAL9ATCD/gEwEAACMCAIAgAgGAIAECgCQCIwAkA2RQIwAWACQI5gAgCBZwJAYGgCMKaYAgCmsAK1gcMCMSZQCDGBYwgxgWYIACtoCACDfggRUNAJEAb4CSAG/Al0AUAOdIFADnQBQQ50gUEOdAFCDnSBQg50AUMOgIFDDoABRA4wK0gOMINeDgGBvA4Bgb4OAQHHDkB+AA9AGD8PtQFLD7aBSw+2AUwPtoFMD7cBTQ+AgU0PMAFPD0BgUA8ACIAPMAiEDwAGiA8wBowPAAiQDzAIlA8ACJgPMAicDwAGoA8wBqQPsAGoDwCBqA/T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iaCCsQARDAiAqCSBQOs4CYlgTyOAQuCPj48Rl4JAv4mkgEK8gEDhgECUhEEkiUVWEAyDpxOAQKSBQjwfiUFwgUCYikCugrSOnomOg6yKtIkqo42AiSGrgIuCr407gIvRiyhAn4uEiSu2CDEJgoiAiQkyhEC/kYiJGNCTi4lA1DGImoHRkI6J0IyHidKOg4lA8Y5ApInFKAkYAIGLifYxMoCbiacwH4CIiq2PQZQ4h4+Jt5WAjfkqAAgwB4mvIAgniUFIg2BLaIlAhYS6hpiJQ/QAtjPQgIqBYEyqgVTFIi85hp2DQJOCRYixQf+2g7E4jYCVII5FTzCQDgEEQQSGiIlBoY1F1YbsNIlSlYlsBQVA7wBBoKcCC6MS+gYAhAkA8AoAcAwA9A0AShAgGhggdBsg3SAADKgAWqogGv8ArQ4BOBIhwRUh5Rkhqh0hjNFBSuEh8AEOAAAAAEFkbGFtLEFkbG0AQWhvbSxBaG9tAEFuYXRvbGlhbl9IaWVyb2dseXBocyxIbHV3AEFyYWJpYyxBcmFiAEFybWVuaWFuLEFybW4AQXZlc3RhbixBdnN0AEJhbGluZXNlLEJhbGkAQmFtdW0sQmFtdQBCYXNzYV9WYWgsQmFzcwBCYXRhayxCYXRrAEJlbmdhbGksQmVuZwBCaGFpa3N1a2ksQmhrcwBCb3BvbW9mbyxCb3BvAEJyYWhtaSxCcmFoAEJyYWlsbGUsQnJhaQBCdWdpbmVzZSxCdWdpAEJ1aGlkLEJ1aGQAQ2FuYWRpYW5fQWJvcmlnaW5hbCxDYW5zAENhcmlhbixDYXJpAENhdWNhc2lhbl9BbGJhbmlhbixBZ2hiAENoYWttYSxDYWttAENoYW0sQ2hhbQBDaGVyb2tlZSxDaGVyAENob3Jhc21pYW4sQ2hycwBDb21tb24sWnl5eQBDb3B0aWMsQ29wdCxRYWFjAEN1bmVpZm9ybSxYc3V4AEN5cHJpb3QsQ3BydABDeXJpbGxpYyxDeXJsAERlc2VyZXQsRHNydABEZXZhbmFnYXJpLERldmEARGl2ZXNfQWt1cnUsRGlhawBEb2dyYSxEb2dyAER1cGxveWFuLER1cGwARWd5cHRpYW5fSGllcm9nbHlwaHMsRWd5cABFbGJhc2FuLEVsYmEARWx5bWFpYyxFbHltAEV0aGlvcGljLEV0aGkAR2VvcmdpYW4sR2VvcgBHbGFnb2xpdGljLEdsYWcAR290aGljLEdvdGgAR3JhbnRoYSxHcmFuAEdyZWVrLEdyZWsAR3VqYXJhdGksR3VqcgBHdW5qYWxhX0dvbmRpLEdvbmcAR3VybXVraGksR3VydQBIYW4sSGFuaQBIYW5ndWwsSGFuZwBIYW5pZmlfUm9oaW5neWEsUm9oZwBIYW51bm9vLEhhbm8ASGF0cmFuLEhhdHIASGVicmV3LEhlYnIASGlyYWdhbmEsSGlyYQBJbXBlcmlhbF9BcmFtYWljLEFybWkASW5oZXJpdGVkLFppbmgsUWFhaQBJbnNjcmlwdGlvbmFsX1BhaGxhdmksUGhsaQBJbnNjcmlwdGlvbmFsX1BhcnRoaWFuLFBydGkASmF2YW5lc2UsSmF2YQBLYWl0aGksS3RoaQBLYW5uYWRhLEtuZGEAS2F0YWthbmEsS2FuYQBLYXlhaF9MaSxLYWxpAEtoYXJvc2h0aGksS2hhcgBLaG1lcixLaG1yAEtob2praSxLaG9qAEtoaXRhbl9TbWFsbF9TY3JpcHQsS2l0cwBLaHVkYXdhZGksU2luZABMYW8sTGFvbwBMYXRpbixMYXRuAExlcGNoYSxMZXBjAExpbWJ1LExpbWIATGluZWFyX0EsTGluYQBMaW5lYXJfQixMaW5iAExpc3UsTGlzdQBMeWNpYW4sTHljaQBMeWRpYW4sTHlkaQBNYWthc2FyLE1ha2EATWFoYWphbmksTWFoagBNYWxheWFsYW0sTWx5bQBNYW5kYWljLE1hbmQATWFuaWNoYWVhbixNYW5pAE1hcmNoZW4sTWFyYwBNYXNhcmFtX0dvbmRpLEdvbm0ATWVkZWZhaWRyaW4sTWVkZgBNZWV0ZWlfTWF5ZWssTXRlaQBNZW5kZV9LaWtha3VpLE1lbmQATWVyb2l0aWNfQ3Vyc2l2ZSxNZXJjAE1lcm9pdGljX0hpZXJvZ2x5cGhzLE1lcm8ATWlhbyxQbHJkAE1vZGksTW9kaQBNb25nb2xpYW4sTW9uZwBNcm8sTXJvbwBNdWx0YW5pLE11bHQATXlhbm1hcixNeW1yAE5hYmF0YWVhbixOYmF0AE5hbmRpbmFnYXJpLE5hbmQATmV3X1RhaV9MdWUsVGFsdQBOZXdhLE5ld2EATmtvLE5rb28ATnVzaHUsTnNodQBOeWlha2VuZ19QdWFjaHVlX0htb25nLEhtbnAAT2doYW0sT2dhbQBPbF9DaGlraSxPbGNrAE9sZF9IdW5nYXJpYW4sSHVuZwBPbGRfSXRhbGljLEl0YWwAT2xkX05vcnRoX0FyYWJpYW4sTmFyYgBPbGRfUGVybWljLFBlcm0AT2xkX1BlcnNpYW4sWHBlbwBPbGRfU29nZGlhbixTb2dvAE9sZF9Tb3V0aF9BcmFiaWFuLFNhcmIAT2xkX1R1cmtpYyxPcmtoAE9yaXlhLE9yeWEAT3NhZ2UsT3NnZQBPc21hbnlhLE9zbWEAUGFoYXdoX0htb25nLEhtbmcAUGFsbXlyZW5lLFBhbG0AUGF1X0Npbl9IYXUsUGF1YwBQaGFnc19QYSxQaGFnAFBob2VuaWNpYW4sUGhueABQc2FsdGVyX1BhaGxhdmksUGhscABSZWphbmcsUmpuZwBSdW5pYyxSdW5yAFNhbWFyaXRhbixTYW1yAFNhdXJhc2h0cmEsU2F1cgBTaGFyYWRhLFNocmQAU2hhdmlhbixTaGF3AFNpZGRoYW0sU2lkZABTaWduV3JpdGluZyxTZ253AFNpbmhhbGEsU2luaABTb2dkaWFuLFNvZ2QAU29yYV9Tb21wZW5nLFNvcmEAU295b21ibyxTb3lvAFN1bmRhbmVzZSxTdW5kAFN5bG90aV9OYWdyaSxTeWxvAFN5cmlhYyxTeXJjAFRhZ2Fsb2csVGdsZwBUYWdiYW53YSxUYWdiAFRhaV9MZSxUYWxlAFRhaV9UaGFtLExhbmEAVGFpX1ZpZXQsVGF2dABUYWtyaSxUYWtyAFRhbWlsLFRhbWwAVGFuZ3V0LFRhbmcAVGVsdWd1LFRlbHUAVGhhYW5hLFRoYWEAVGhhaSxUaGFpAFRpYmV0YW4sVGlidABUaWZpbmFnaCxUZm5nAFRpcmh1dGEsVGlyaABVZ2FyaXRpYyxVZ2FyAFZhaSxWYWlpAFdhbmNobyxXY2hvAFdhcmFuZ19DaXRpLFdhcmEAWWV6aWRpLFllemkAWWksWWlpaQBaYW5hYmF6YXJfU3F1YXJlLFphbmIAQdC5AguxFMAZmUWFGZlFrhmARY4ZgEWEGZZFgBmeRYAZ4WBFphmERYQZgQ2TGeAPN4MrgBmCKwGDK4AZgCsDgCuAGYArgBmCKwCAKwCT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ayxNb2RpZmllcl9TeW1ib2wAU28sT3RoZXJfU3ltYm9sAFBjLENvbm5lY3Rvcl9QdW5jdHVhdGlvbgBQZCxEYXNoX1B1bmN0dWF0aW9uAFBzLE9wZW5fUHVuY3R1YXRpb24AUGUsQ2xvc2VfUHVuY3R1YXRpb24AUGksSW5pdGlhbF9QdW5jdHVhdGlvbgBQZixGaW5hbF9QdW5jdHVhdGlvbgBQbyxPdGhlcl9QdW5jdHVhdGlvbgBacyxTcGFjZV9TZXBhcmF0b3IAWmwsTGluZV9TZXBhcmF0b3IAWnAsUGFyYWdyYXBoX1NlcGFyYXRvcgBDYyxDb250cm9sLGNudHJsAENmLEZvcm1hdABDcyxTdXJyb2dhdGUAQ28sUHJpdmF0ZV9Vc2UATEMsQ2FzZWRfTGV0dGVyAEwsTGV0dGVyAE0sTWFyayxDb21iaW5pbmdfTWFyawBOLE51bWJlcgBTLFN5bWJvbABQLFB1bmN0dWF0aW9uLHB1bmN0AFosU2VwYXJhdG9yAEMsT3RoZXIAQdDZAguwCA4AAAA+AAAAwAEAAAAOAAAA8AAAAAB/AAAAgAMBAAA8QVNDSUlfSGV4X0RpZ2l0LEFIZXgAQmlkaV9Db250cm9sLEJpZGlfQwBEYXNoAERlcHJlY2F0ZWQsRGVwAERpYWNyaXRpYyxEaWEARXh0ZW5kZXIsRXh0AEhleF9EaWdpdCxIZXgASURTX0JpbmFyeV9PcGVyYXRvcixJRFNCAElEU19UcmluYXJ5X09wZXJhdG9yLElEU1QASWRlb2dyYXBoaWMsSWRlbwBKb2luX0NvbnRyb2wsSm9pbl9DAExvZ2ljYWxfT3JkZXJfRXhjZXB0aW9uLExPRQBOb25jaGFyYWN0ZXJfQ29kZV9Qb2ludCxOQ2hhcgBQYXR0ZXJuX1N5bnRheCxQYXRfU3luAFBhdHRlcm5fV2hpdGVfU3BhY2UsUGF0X1dTAFF1b3RhdGlvbl9NYXJrLFFNYXJrAFJhZGljYWwAUmVnaW9uYWxfSW5kaWNhdG9yLFJJAFNlbnRlbmNlX1Rlcm1pbmFsLFNUZXJtAFNvZnRfRG90dGVkLFNEAFRlcm1pbmFsX1B1bmN0dWF0aW9uLFRlcm0AVW5pZmllZF9JZGVvZ3JhcGgsVUlkZW8AVmFyaWF0aW9uX1NlbGVjdG9yLFZTAFdoaXRlX1NwYWNlLHNwYWNlAEJpZGlfTWlycm9yZWQsQmlkaV9NAEVtb2ppAEVtb2ppX0NvbXBvbmVudCxFQ29tcABFbW9qaV9Nb2RpZmllcixFTW9kAEVtb2ppX01vZGlmaWVyX0Jhc2UsRUJhc2UARW1vamlfUHJlc2VudGF0aW9uLEVQcmVzAEV4dGVuZGVkX1BpY3RvZ3JhcGhpYyxFeHRQaWN0AERlZmF1bHRfSWdub3JhYmxlX0NvZGVfUG9pbnQsREkASURfU3RhcnQsSURTAENhc2VfSWdub3JhYmxlLENJAEFTQ0lJAEFscGhhYmV0aWMsQWxwaGEAQW55AEFzc2lnbmVkAENhc2VkAENoYW5nZXNfV2hlbl9DYXNlZm9sZGVkLENXQ0YAQ2hhbmdlc19XaGVuX0Nhc2VtYXBwZWQsQ1dDTQBDaGFuZ2VzX1doZW5fTG93ZXJjYXNlZCxDV0wAQ2hhbmdlc19XaGVuX05GS0NfQ2FzZWZvbGRlZCxDV0tDRgBDaGFuZ2VzX1doZW5fVGl0bGVjYXNlZCxDV1QAQ2hhbmdlc19XaGVuX1VwcGVyY2FzZWQsQ1dVAEdyYXBoZW1lX0Jhc2UsR3JfQmFzZQBHcmFwaGVtZV9FeHRlbmQsR3JfRXh0AElEX0NvbnRpbnVlLElEQwBMb3dlcmNhc2UsTG93ZXIATWF0aABVcHBlcmNhc2UsVXBwZXIAWElEX0NvbnRpbnVlLFhJREMAWElEX1N0YXJ0LFhJRFMAQZDiAgu0IIEAKACXACoAgYAqAJfAKwAVgSwAlwAtAIFALQCXAC4AFUEuAJkBLwAWIDAAQghAAEKKRABCBEoAlgBMABeBTABCAk0AQkNOAC/BTwBCw1AAv0BSAEIDUwBCCVUAQghaAJYAXgBCQ14AgcBfAEIBaABCwWsAhQFxABfDcQBESHMARIN3AEKDeQC+AnsAl0F8AEIBfQBEBH4AQg6AAEKBhwBEh4kAgwSsABcDtgCDArgAFALQAJYA0QCAAN0Al4DeAICA3wCXAOEAPkHhAIDA4QC+BOIAroPqAK6C8gCtAfQALsH0AANB9QADA/wAgUD+AD4CAAG+wAEBvgEDAb5ABgG+QA4BPgIUAb7AFQG+ARcBRIEdAURBMAFEAjQBRIE1AUSDNgFEgzgBRIY6AUQBPgGFwGEB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SHpUSHq8AxMhbQATIWQAEyFrABMhZgBtbgBtvANtbQBtYwBtawBtYwAKCk8ACk9tALIAYwAICk8KClAAClBtALMAawBtALMAbQAVInMAbQAVInMAsgBQYWtQYU1QYUdQYXJhZHJhZNFzcgBhAGQAFSJzALIAcABzbgBzvANzbQBzcABWbgBWvANWbQBWawBWTQBWcABXbgBXvANXbQBXawBXTQBXawCpA00AqQNhLm0uQnFjY2NkQ9FrZ0NvLmRCR3loYUhQaW5LS0tNa3RsbWxubG9nbHhtYm1pbG1vbFBIcC5tLlBQTVBSc3JTdldiVtFtQdFtMQDlZTEAMADlZTIAMADlZTMAMADlZWdhbEoETAQmAVMBJ6c3q2sCUqtIjPRmyo7IjNFuMk7lU5yfnJ9RWdGRh1VIWfZhaXaFfz+Guof4iI+QAmobbdlw3nM9hGqR8ZmCTnVTBGsbci2GHp5QXetvzYVkicli2IEfiMpeF2dqbfxyzpCGT7dR3lLEZNNqEHLndgGABoZchu+NMpdvm/qdjHh/eaB9yYMEk3+e1orfWARfYHx+gGJyynjCjPeW2FhiXBNq2m0Pby99N35LltJSi4DcUcxRHHq+ffGDdZaAi89iAmr+ijlO51sSYIdzcHUXU/t4v0+pXw1OzGx4ZSJ9w1NeWAF3SYSqirprsI+IbP5i5YKgY2V1rk5pUclRgWjnfG+C0orPkfVSQlRzWexexWX+byp5rZVqmpeezp6bUsZmd2tij3RekGEAYppkI29JcYl0ynn0fW+AJo/uhCOQSpMXUqNSvVTIcMKIqorJXvVfe2Ouaz58dXPkTvlW51u6XRxgsnNpdJp/RoA0kvaWSJcYmItPrnm0kbiW4WCGTtpQ7ls/XJllAmrOcUJ2/IR8kI2fiGYulolSe2fzZ0FtnG4JdFl1a3gQfV6YbVEuYniWK1AZXeptKo+LX0RhF2iHc4aWKVIPVGVcE2ZOZ6ho5WwGdOJ1eX/PiOGIzJHilj9Tum4dVNBxmHT6haOWV5yfnpdny23ogct6IHuSfMBymXBYi8BONoM6UgdSpl7TYtZ8hVsebbRmO49MiE2Wi4nTXkBRwFUAAAAAWlgAAHRmAAAAAN5RKnPKdjx5XnlleY95Vpe+fL1/AAAShgAA+IoAAAAAOJD9kO+Y/JgombSd3pC3lq5P51BNUclS5FJR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";
- if (!R.startsWith(Q)) {
- var fa = R;
- R = a.locateFile ? a.locateFile(fa, x) : x + fa;
- }
- function ha(b) {
- try {
- if (b == R && E)
- return new Uint8Array(E);
- var c = C(b);
- if (c)
- return c;
- if (A)
- return A(b);
- throw "both async and sync fetching of the wasm failed";
- } catch (d) {
- F(d);
- }
- }
- function ia(b) {
- if (!E && (u || v)) {
- if ("function" == typeof fetch && !b.startsWith("file://"))
- return fetch(b, { credentials: "same-origin" }).then(function(c) {
- if (!c.ok)
- throw "failed to load wasm binary file at '" + b + "'";
- return c.arrayBuffer();
- }).catch(function() {
- return ha(b);
- });
- if (z)
- return new Promise(function(c, d) {
- z(b, function(e) {
- c(new Uint8Array(e));
- }, d);
- });
- }
- return Promise.resolve().then(function() {
- return ha(b);
- });
- }
- function ja(b, c, d) {
- return ia(b).then(function(e) {
- return WebAssembly.instantiate(e, c);
- }).then(function(e) {
- return e;
- }).then(d, function(e) {
- D("failed to asynchronously prepare wasm: " + e);
- F(e);
- });
- }
- function ka(b, c) {
- var d = R;
- return E || "function" != typeof WebAssembly.instantiateStreaming || d.startsWith(Q) || d.startsWith("file://") || w || "function" != typeof fetch ? ja(d, b, c) : fetch(d, { credentials: "same-origin" }).then(function(e) {
- return WebAssembly.instantiateStreaming(e, b).then(c, function(f) {
- D("wasm streaming compile failed: " + f);
- D("falling back to ArrayBuffer instantiation");
- return ja(d, b, c);
- });
- });
- }
- function S(b) {
- for (; 0 < b.length; )
- b.shift()(a);
- }
- var la = "undefined" != typeof TextDecoder ? new TextDecoder("utf8") : void 0;
- function na(b, c, d) {
- var e = c + d;
- for (d = c; b[d] && !(d >= e); )
- ++d;
- if (16 < d - c && b.buffer && la)
- return la.decode(b.subarray(c, d));
- for (e = ""; c < d; ) {
- var f = b[c++];
- if (f & 128) {
- var g = b[c++] & 63;
- if (192 == (f & 224))
- e += String.fromCharCode((f & 31) << 6 | g);
- else {
- var h = b[c++] & 63;
- f = 224 == (f & 240) ? (f & 15) << 12 | g << 6 | h : (f & 7) << 18 | g << 12 | h << 6 | b[c++] & 63;
- 65536 > f ? e += String.fromCharCode(f) : (f -= 65536, e += String.fromCharCode(55296 | f >> 10, 56320 | f & 1023));
- }
- } else
- e += String.fromCharCode(f);
- }
- return e;
- }
- function T(b, c) {
- return b ? na(J, b, c) : "";
- }
- var oa = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335], pa = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];
- function U(b) {
- for (var c = 0, d = 0; d < b.length; ++d) {
- var e = b.charCodeAt(d);
- 127 >= e ? c++ : 2047 >= e ? c += 2 : 55296 <= e && 57343 >= e ? (c += 4, ++d) : c += 3;
- }
- return c;
- }
- function V(b, c, d) {
- var e = J;
- if (!(0 < d))
- return 0;
- var f = c;
- d = c + d - 1;
- for (var g = 0; g < b.length; ++g) {
- var h = b.charCodeAt(g);
- if (55296 <= h && 57343 >= h) {
- var k = b.charCodeAt(++g);
- h = 65536 + ((h & 1023) << 10) | k & 1023;
- }
- if (127 >= h) {
- if (c >= d)
- break;
- e[c++] = h;
- } else {
- if (2047 >= h) {
- if (c + 1 >= d)
- break;
- e[c++] = 192 | h >> 6;
- } else {
- if (65535 >= h) {
- if (c + 2 >= d)
- break;
- e[c++] = 224 | h >> 12;
- } else {
- if (c + 3 >= d)
- break;
- e[c++] = 240 | h >> 18;
- e[c++] = 128 | h >> 12 & 63;
- }
- e[c++] = 128 | h >> 6 & 63;
- }
- e[c++] = 128 | h & 63;
- }
- }
- e[c] = 0;
- return c - f;
- }
- function qa(b) {
- var c = U(b) + 1, d = ra(c);
- d && V(b, d, c);
- return d;
- }
- var W = {};
- function sa() {
- if (!X) {
- var b = { USER: "web_user", LOGNAME: "web_user", PATH: "/", PWD: "/", HOME: "/home/web_user", LANG: ("object" == typeof navigator && navigator.languages && navigator.languages[0] || "C").replace("-", "_") + ".UTF-8", _: t || "./this.program" }, c;
- for (c in W)
- void 0 === W[c] ? delete b[c] : b[c] = W[c];
- var d = [];
- for (c in b)
- d.push(c + "=" + b[c]);
- X = d;
- }
- return X;
- }
- var X, ta = [null, [], []];
- function ua(b, c, d, e) {
- var f = { string: (l) => {
- var q = 0;
- if (null !== l && void 0 !== l && 0 !== l) {
- q = U(l) + 1;
- var ma = Y(q);
- V(l, ma, q);
- q = ma;
- }
- return q;
- }, array: (l) => {
- var q = Y(l.length);
- I.set(l, q);
- return q;
- } };
- b = a["_" + b];
- var g = [], h = 0;
- if (e)
- for (var k = 0; k < e.length; k++) {
- var r = f[d[k]];
- r ? (0 === h && (h = va()), g[k] = r(e[k])) : g[k] = e[k];
- }
- d = b.apply(null, g);
- return d = function(l) {
- 0 !== h && wa(h);
- return "string" === c ? T(l) : "boolean" === c ? !!l : l;
- }(d);
- }
- var xa = "function" == typeof atob ? atob : function(b) {
- var c = "", d = 0;
- b = b.replace(/[^A-Za-z0-9\+\/=]/g, "");
- do {
- var e = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(b.charAt(d++));
- var f = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(b.charAt(d++));
- var g = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(b.charAt(d++));
- var h = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(b.charAt(d++));
- e = e << 2 | f >> 4;
- f = (f & 15) << 4 | g >> 2;
- var k = (g & 3) << 6 | h;
- c += String.fromCharCode(e);
- 64 !== g && (c += String.fromCharCode(f));
- 64 !== h && (c += String.fromCharCode(k));
- } while (d < b.length);
- return c;
- };
- function C(b) {
- if (b.startsWith(Q)) {
- b = b.slice(Q.length);
- if ("boolean" == typeof w && w) {
- var c = Buffer.from(b, "base64");
- c = new Uint8Array(c.buffer, c.byteOffset, c.byteLength);
- } else
- try {
- var d = xa(b), e = new Uint8Array(d.length);
- for (b = 0; b < d.length; ++b)
- e[b] = d.charCodeAt(b);
- c = e;
- } catch (f) {
- throw Error("Converting base64 string to bytes failed.");
- }
- return c;
- }
- }
- var ya = {
- a: function(b, c, d, e) {
- F("Assertion failed: " + T(b) + ", at: " + [c ? T(c) : "unknown filename", d, e ? T(e) : "unknown function"]);
- },
- l: function(b, c) {
- b = new Date(1e3 * (L[b >> 2] + 4294967296 * K[b + 4 >> 2]));
- K[c >> 2] = b.getSeconds();
- K[c + 4 >> 2] = b.getMinutes();
- K[c + 8 >> 2] = b.getHours();
- K[c + 12 >> 2] = b.getDate();
- K[c + 16 >> 2] = b.getMonth();
- K[c + 20 >> 2] = b.getFullYear() - 1900;
- K[c + 24 >> 2] = b.getDay();
- var d = b.getFullYear();
- K[c + 28 >> 2] = (0 !== d % 4 || 0 === d % 100 && 0 !== d % 400 ? pa : oa)[b.getMonth()] + b.getDate() - 1 | 0;
- K[c + 36 >> 2] = -(60 * b.getTimezoneOffset());
- d = new Date(b.getFullYear(), 6, 1).getTimezoneOffset();
- var e = new Date(b.getFullYear(), 0, 1).getTimezoneOffset();
- K[c + 32 >> 2] = (d != e && b.getTimezoneOffset() == Math.min(e, d)) | 0;
- },
- k: function(b, c, d) {
- function e(r) {
- return (r = r.toTimeString().match(/\(([A-Za-z ]+)\)$/)) ? r[1] : "GMT";
- }
- var f = (/* @__PURE__ */ new Date()).getFullYear(), g = new Date(f, 0, 1), h = new Date(f, 6, 1);
- f = g.getTimezoneOffset();
- var k = h.getTimezoneOffset();
- L[b >> 2] = 60 * Math.max(f, k);
- K[c >> 2] = Number(f != k);
- b = e(g);
- c = e(h);
- b = qa(b);
- c = qa(c);
- k < f ? (L[d >> 2] = b, L[d + 4 >> 2] = c) : (L[d >> 2] = c, L[d + 4 >> 2] = b);
- },
- b: function() {
- F("");
- },
- m: function() {
- return Date.now();
- },
- j: function(b) {
- var c = J.length;
- b >>>= 0;
- if (2147483648 < b)
- return false;
- for (var d = 1; 4 >= d; d *= 2) {
- var e = c * (1 + 0.2 / d);
- e = Math.min(e, b + 100663296);
- var f = Math, g = f.min;
- e = Math.max(b, e);
- e += (65536 - e % 65536) % 65536;
- a: {
- var h = G.buffer;
- try {
- G.grow(g.call(f, 2147483648, e) - h.byteLength + 65535 >>> 16);
- M();
- var k = 1;
- break a;
- } catch (r) {
- }
- k = void 0;
- }
- if (k)
- return true;
- }
- return false;
- },
- e: function(b, c) {
- var d = 0;
- sa().forEach(function(e, f) {
- var g = c + d;
- f = L[b + 4 * f >> 2] = g;
- for (g = 0; g < e.length; ++g)
- I[f++ >> 0] = e.charCodeAt(g);
- I[f >> 0] = 0;
- d += e.length + 1;
- });
- return 0;
- },
- f: function(b, c) {
- var d = sa();
- L[b >> 2] = d.length;
- var e = 0;
- d.forEach(function(f) {
- e += f.length + 1;
- });
- L[c >> 2] = e;
- return 0;
- },
- d: function() {
- return 52;
- },
- i: function() {
- return 70;
- },
- c: function(b, c, d, e) {
- for (var f = 0, g = 0; g < d; g++) {
- var h = L[c >> 2], k = L[c + 4 >> 2];
- c += 8;
- for (var r = 0; r < k; r++) {
- var l = J[h + r], q = ta[b];
- 0 === l || 10 === l ? ((1 === b ? aa : D)(na(q, 0)), q.length = 0) : q.push(l);
- }
- f += k;
- }
- L[e >> 2] = f;
- return 0;
- },
- o: function(b, c, d, e, f) {
- return a.callbacks.callFunction(void 0, b, c, d, e, f);
- },
- n: function(b) {
- return a.callbacks.shouldInterrupt(void 0, b);
- },
- h: function(b, c, d) {
- d = T(d);
- return a.callbacks.loadModuleSource(void 0, b, c, d);
- },
- g: function(b, c, d, e) {
- d = T(d);
- e = T(e);
- return a.callbacks.normalizeModule(void 0, b, c, d, e);
- }
- };
- (function() {
- function b(d) {
- d = d.exports;
- a.asm = d;
- G = a.asm.p;
- M();
- ca.unshift(a.asm.q);
- N--;
- a.monitorRunDependencies && a.monitorRunDependencies(N);
- if (0 == N && (null !== O && (clearInterval(O), O = null), P)) {
- var e = P;
- P = null;
- e();
- }
- return d;
- }
- var c = { a: ya };
- N++;
- a.monitorRunDependencies && a.monitorRunDependencies(N);
- if (a.instantiateWasm)
- try {
- return a.instantiateWasm(c, b);
- } catch (d) {
- D("Module.instantiateWasm callback failed with error: " + d), n(d);
- }
- ka(c, function(d) {
- b(d.instance);
- }).catch(n);
- return {};
- })();
- var ra = a._malloc = function() {
- return (ra = a._malloc = a.asm.r).apply(null, arguments);
- };
- a._QTS_Throw = function() {
- return (a._QTS_Throw = a.asm.s).apply(null, arguments);
- };
- a._QTS_NewError = function() {
- return (a._QTS_NewError = a.asm.t).apply(null, arguments);
- };
- a._QTS_RuntimeSetMemoryLimit = function() {
- return (a._QTS_RuntimeSetMemoryLimit = a.asm.u).apply(null, arguments);
- };
- a._QTS_RuntimeComputeMemoryUsage = function() {
- return (a._QTS_RuntimeComputeMemoryUsage = a.asm.v).apply(null, arguments);
- };
- a._QTS_RuntimeDumpMemoryUsage = function() {
- return (a._QTS_RuntimeDumpMemoryUsage = a.asm.w).apply(null, arguments);
- };
- a._QTS_RecoverableLeakCheck = function() {
- return (a._QTS_RecoverableLeakCheck = a.asm.x).apply(null, arguments);
- };
- a._QTS_BuildIsSanitizeLeak = function() {
- return (a._QTS_BuildIsSanitizeLeak = a.asm.y).apply(null, arguments);
- };
- a._QTS_RuntimeSetMaxStackSize = function() {
- return (a._QTS_RuntimeSetMaxStackSize = a.asm.z).apply(null, arguments);
- };
- a._QTS_GetUndefined = function() {
- return (a._QTS_GetUndefined = a.asm.A).apply(null, arguments);
- };
- a._QTS_GetNull = function() {
- return (a._QTS_GetNull = a.asm.B).apply(null, arguments);
- };
- a._QTS_GetFalse = function() {
- return (a._QTS_GetFalse = a.asm.C).apply(null, arguments);
- };
- a._QTS_GetTrue = function() {
- return (a._QTS_GetTrue = a.asm.D).apply(null, arguments);
- };
- a._QTS_NewRuntime = function() {
- return (a._QTS_NewRuntime = a.asm.E).apply(null, arguments);
- };
- a._QTS_FreeRuntime = function() {
- return (a._QTS_FreeRuntime = a.asm.F).apply(null, arguments);
- };
- a._QTS_NewContext = function() {
- return (a._QTS_NewContext = a.asm.G).apply(null, arguments);
- };
- a._QTS_FreeContext = function() {
- return (a._QTS_FreeContext = a.asm.H).apply(null, arguments);
- };
- a._QTS_FreeValuePointer = function() {
- return (a._QTS_FreeValuePointer = a.asm.I).apply(null, arguments);
- };
- a._free = function() {
- return (a._free = a.asm.J).apply(null, arguments);
- };
- a._QTS_FreeValuePointerRuntime = function() {
- return (a._QTS_FreeValuePointerRuntime = a.asm.K).apply(null, arguments);
- };
- a._QTS_FreeVoidPointer = function() {
- return (a._QTS_FreeVoidPointer = a.asm.L).apply(null, arguments);
- };
- a._QTS_FreeCString = function() {
- return (a._QTS_FreeCString = a.asm.M).apply(null, arguments);
- };
- a._QTS_DupValuePointer = function() {
- return (a._QTS_DupValuePointer = a.asm.N).apply(null, arguments);
- };
- a._QTS_NewObject = function() {
- return (a._QTS_NewObject = a.asm.O).apply(null, arguments);
- };
- a._QTS_NewObjectProto = function() {
- return (a._QTS_NewObjectProto = a.asm.P).apply(null, arguments);
- };
- a._QTS_NewArray = function() {
- return (a._QTS_NewArray = a.asm.Q).apply(null, arguments);
- };
- a._QTS_NewFloat64 = function() {
- return (a._QTS_NewFloat64 = a.asm.R).apply(null, arguments);
- };
- a._QTS_GetFloat64 = function() {
- return (a._QTS_GetFloat64 = a.asm.S).apply(null, arguments);
- };
- a._QTS_NewString = function() {
- return (a._QTS_NewString = a.asm.T).apply(null, arguments);
- };
- a._QTS_GetString = function() {
- return (a._QTS_GetString = a.asm.U).apply(null, arguments);
- };
- a._QTS_NewSymbol = function() {
- return (a._QTS_NewSymbol = a.asm.V).apply(null, arguments);
- };
- a._QTS_GetSymbolDescriptionOrKey = function() {
- return (a._QTS_GetSymbolDescriptionOrKey = a.asm.W).apply(null, arguments);
- };
- a._QTS_IsGlobalSymbol = function() {
- return (a._QTS_IsGlobalSymbol = a.asm.X).apply(null, arguments);
- };
- a._QTS_IsJobPending = function() {
- return (a._QTS_IsJobPending = a.asm.Y).apply(null, arguments);
- };
- a._QTS_ExecutePendingJob = function() {
- return (a._QTS_ExecutePendingJob = a.asm.Z).apply(null, arguments);
- };
- a._QTS_GetProp = function() {
- return (a._QTS_GetProp = a.asm._).apply(null, arguments);
- };
- a._QTS_SetProp = function() {
- return (a._QTS_SetProp = a.asm.$).apply(null, arguments);
- };
- a._QTS_DefineProp = function() {
- return (a._QTS_DefineProp = a.asm.aa).apply(null, arguments);
- };
- a._QTS_Call = function() {
- return (a._QTS_Call = a.asm.ba).apply(null, arguments);
- };
- a._QTS_ResolveException = function() {
- return (a._QTS_ResolveException = a.asm.ca).apply(null, arguments);
- };
- a._QTS_Dump = function() {
- return (a._QTS_Dump = a.asm.da).apply(null, arguments);
- };
- a._QTS_Eval = function() {
- return (a._QTS_Eval = a.asm.ea).apply(null, arguments);
- };
- a._QTS_Typeof = function() {
- return (a._QTS_Typeof = a.asm.fa).apply(null, arguments);
- };
- a._QTS_GetGlobalObject = function() {
- return (a._QTS_GetGlobalObject = a.asm.ga).apply(null, arguments);
- };
- a._QTS_NewPromiseCapability = function() {
- return (a._QTS_NewPromiseCapability = a.asm.ha).apply(null, arguments);
- };
- a._QTS_TestStringArg = function() {
- return (a._QTS_TestStringArg = a.asm.ia).apply(null, arguments);
- };
- a._QTS_BuildIsDebug = function() {
- return (a._QTS_BuildIsDebug = a.asm.ja).apply(null, arguments);
- };
- a._QTS_BuildIsAsyncify = function() {
- return (a._QTS_BuildIsAsyncify = a.asm.ka).apply(null, arguments);
- };
- a._QTS_NewFunction = function() {
- return (a._QTS_NewFunction = a.asm.la).apply(null, arguments);
- };
- a._QTS_ArgvGetJSValueConstPointer = function() {
- return (a._QTS_ArgvGetJSValueConstPointer = a.asm.ma).apply(null, arguments);
- };
- a._QTS_RuntimeEnableInterruptHandler = function() {
- return (a._QTS_RuntimeEnableInterruptHandler = a.asm.na).apply(null, arguments);
- };
- a._QTS_RuntimeDisableInterruptHandler = function() {
- return (a._QTS_RuntimeDisableInterruptHandler = a.asm.oa).apply(null, arguments);
- };
- a._QTS_RuntimeEnableModuleLoader = function() {
- return (a._QTS_RuntimeEnableModuleLoader = a.asm.pa).apply(null, arguments);
- };
- a._QTS_RuntimeDisableModuleLoader = function() {
- return (a._QTS_RuntimeDisableModuleLoader = a.asm.qa).apply(null, arguments);
- };
- function va() {
- return (va = a.asm.sa).apply(null, arguments);
- }
- function wa() {
- return (wa = a.asm.ta).apply(null, arguments);
- }
- function Y() {
- return (Y = a.asm.ua).apply(null, arguments);
- }
- a.___start_em_js = 74916;
- a.___stop_em_js = 75818;
- a.cwrap = function(b, c, d, e) {
- var f = !d || d.every((g) => "number" === g || "boolean" === g);
- return "string" !== c && f && !e ? a["_" + b] : function() {
- return ua(b, c, d, arguments);
- };
- };
- a.UTF8ToString = T;
- a.stringToUTF8 = function(b, c, d) {
- return V(b, c, d);
- };
- a.lengthBytesUTF8 = U;
- var Z;
- P = function za() {
- Z || Aa();
- Z || (P = za);
- };
- function Aa() {
- function b() {
- if (!Z && (Z = true, a.calledRun = true, !H)) {
- S(ca);
- m(a);
- if (a.onRuntimeInitialized)
- a.onRuntimeInitialized();
- if (a.postRun)
- for ("function" == typeof a.postRun && (a.postRun = [a.postRun]); a.postRun.length; ) {
- var c = a.postRun.shift();
- da.unshift(c);
- }
- S(da);
- }
- }
- if (!(0 < N)) {
- if (a.preRun)
- for ("function" == typeof a.preRun && (a.preRun = [a.preRun]); a.preRun.length; )
- ea();
- S(ba);
- 0 < N || (a.setStatus ? (a.setStatus("Running..."), setTimeout(function() {
- setTimeout(function() {
- a.setStatus("");
- }, 1);
- b();
- }, 1)) : b());
- }
- }
- if (a.preInit)
- for ("function" == typeof a.preInit && (a.preInit = [a.preInit]); 0 < a.preInit.length; )
- a.preInit.pop()();
- Aa();
- return QuickJSRaw2.ready;
- };
- })();
- if (typeof exports === "object" && typeof module2 === "object")
- module2.exports = QuickJSRaw;
- else if (typeof define === "function" && define["amd"])
- define([], function() {
- return QuickJSRaw;
- });
- else if (typeof exports === "object")
- exports["QuickJSRaw"] = QuickJSRaw;
- }
-});
-
-// .yarn/unplugged/@tootallnate-quickjs-emscripten-npm-0.23.0-a889ea7aeb/node_modules/@tootallnate/quickjs-emscripten/dist/variants.js
-var require_variants = __commonJS({
- ".yarn/unplugged/@tootallnate-quickjs-emscripten-npm-0.23.0-a889ea7aeb/node_modules/@tootallnate/quickjs-emscripten/dist/variants.js"(exports) {
- "use strict";
- var __createBinding2 = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) {
- if (k2 === void 0)
- k2 = k;
- var desc = Object.getOwnPropertyDescriptor(m, k);
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
- desc = { enumerable: true, get: function() {
- return m[k];
- } };
- }
- Object.defineProperty(o, k2, desc);
- } : function(o, m, k, k2) {
- if (k2 === void 0)
- k2 = k;
- o[k2] = m[k];
- });
- var __setModuleDefault2 = exports && exports.__setModuleDefault || (Object.create ? function(o, v) {
- Object.defineProperty(o, "default", { enumerable: true, value: v });
- } : function(o, v) {
- o["default"] = v;
- });
- var __importStar2 = exports && exports.__importStar || function(mod) {
- if (mod && mod.__esModule)
- return mod;
- var result = {};
- if (mod != null) {
- for (var k in mod)
- if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k))
- __createBinding2(result, mod, k);
- }
- __setModuleDefault2(result, mod);
- return result;
- };
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.RELEASE_ASYNC = exports.DEBUG_ASYNC = exports.RELEASE_SYNC = exports.DEBUG_SYNC = exports.memoizePromiseFactory = exports.newQuickJSAsyncWASMModule = exports.newQuickJSWASMModule = void 0;
- var esmHelpers_1 = require_esmHelpers();
- async function newQuickJSWASMModule(variant = exports.RELEASE_SYNC) {
- const [wasmModuleLoader, QuickJSFFI, { QuickJSWASMModule }] = await Promise.all([
- variant.importModuleLoader(),
- variant.importFFI(),
- Promise.resolve().then(() => __importStar2(require_module())).then(esmHelpers_1.unwrapTypescript)
- ]);
- const wasmModule = await wasmModuleLoader();
- wasmModule.type = "sync";
- const ffi = new QuickJSFFI(wasmModule);
- return new QuickJSWASMModule(wasmModule, ffi);
- }
- exports.newQuickJSWASMModule = newQuickJSWASMModule;
- async function newQuickJSAsyncWASMModule(variant = exports.RELEASE_ASYNC) {
- const [wasmModuleLoader, QuickJSAsyncFFI, { QuickJSAsyncWASMModule }] = await Promise.all([
- variant.importModuleLoader(),
- variant.importFFI(),
- Promise.resolve().then(() => __importStar2(require_module_asyncify())).then(esmHelpers_1.unwrapTypescript)
- ]);
- const wasmModule = await wasmModuleLoader();
- wasmModule.type = "async";
- const ffi = new QuickJSAsyncFFI(wasmModule);
- return new QuickJSAsyncWASMModule(wasmModule, ffi);
- }
- exports.newQuickJSAsyncWASMModule = newQuickJSAsyncWASMModule;
- function memoizePromiseFactory(fn2) {
- let promise;
- return () => {
- return promise ?? (promise = fn2());
- };
- }
- exports.memoizePromiseFactory = memoizePromiseFactory;
- exports.DEBUG_SYNC = {
- type: "sync",
- async importFFI() {
- throw new Error("not implemented");
- },
- async importModuleLoader() {
- throw new Error("not implemented");
- }
- };
- exports.RELEASE_SYNC = {
- type: "sync",
- async importFFI() {
- const mod = await Promise.resolve().then(() => __importStar2(require_ffi_WASM_RELEASE_SYNC()));
- return (0, esmHelpers_1.unwrapTypescript)(mod).QuickJSFFI;
- },
- async importModuleLoader() {
- const mod = await Promise.resolve().then(() => __importStar2(require_emscripten_module_WASM_RELEASE_SYNC()));
- return (0, esmHelpers_1.unwrapJavascript)(mod);
- }
- };
- exports.DEBUG_ASYNC = {
- type: "async",
- async importFFI() {
- throw new Error("not implemented");
- },
- async importModuleLoader() {
- throw new Error("not implemented");
- }
- };
- exports.RELEASE_ASYNC = {
- type: "async",
- async importFFI() {
- throw new Error("not implemented");
- },
- async importModuleLoader() {
- throw new Error("not implemented");
- }
- };
- }
-});
-
-// .yarn/unplugged/@tootallnate-quickjs-emscripten-npm-0.23.0-a889ea7aeb/node_modules/@tootallnate/quickjs-emscripten/dist/vm-interface.js
-var require_vm_interface = __commonJS({
- ".yarn/unplugged/@tootallnate-quickjs-emscripten-npm-0.23.0-a889ea7aeb/node_modules/@tootallnate/quickjs-emscripten/dist/vm-interface.js"(exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.isFail = exports.isSuccess = void 0;
- function isSuccess(successOrFail) {
- return "error" in successOrFail === false;
- }
- exports.isSuccess = isSuccess;
- function isFail(successOrFail) {
- return "error" in successOrFail === true;
- }
- exports.isFail = isFail;
- }
-});
-
-// .yarn/unplugged/@tootallnate-quickjs-emscripten-npm-0.23.0-a889ea7aeb/node_modules/@tootallnate/quickjs-emscripten/dist/module-test.js
-var require_module_test = __commonJS({
- ".yarn/unplugged/@tootallnate-quickjs-emscripten-npm-0.23.0-a889ea7aeb/node_modules/@tootallnate/quickjs-emscripten/dist/module-test.js"(exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.TestQuickJSWASMModule = void 0;
- var errors_1 = require_errors();
- var lifetime_1 = require_lifetime();
- var TestQuickJSWASMModule = class {
- constructor(parent) {
- this.parent = parent;
- this.contexts = /* @__PURE__ */ new Set();
- this.runtimes = /* @__PURE__ */ new Set();
- }
- newRuntime(options) {
- const runtime = this.parent.newRuntime({
- ...options,
- ownedLifetimes: [
- new lifetime_1.Lifetime(void 0, void 0, () => this.runtimes.delete(runtime)),
- ...options?.ownedLifetimes ?? []
- ]
- });
- this.runtimes.add(runtime);
- return runtime;
- }
- newContext(options) {
- const context = this.parent.newContext({
- ...options,
- ownedLifetimes: [
- new lifetime_1.Lifetime(void 0, void 0, () => this.contexts.delete(context)),
- ...options?.ownedLifetimes ?? []
- ]
- });
- this.contexts.add(context);
- return context;
- }
- evalCode(code, options) {
- return this.parent.evalCode(code, options);
- }
- disposeAll() {
- const allDisposables = [...this.contexts, ...this.runtimes];
- this.runtimes.clear();
- this.contexts.clear();
- allDisposables.forEach((d) => {
- if (d.alive) {
- d.dispose();
- }
- });
- }
- assertNoMemoryAllocated() {
- const leaksDetected = this.getFFI().QTS_RecoverableLeakCheck();
- if (leaksDetected) {
- throw new errors_1.QuickJSMemoryLeakDetected("Leak sanitizer detected un-freed memory");
- }
- if (this.contexts.size > 0) {
- throw new errors_1.QuickJSMemoryLeakDetected(`${this.contexts.size} contexts leaked`);
- }
- if (this.runtimes.size > 0) {
- throw new errors_1.QuickJSMemoryLeakDetected(`${this.runtimes.size} runtimes leaked`);
- }
- }
- /** @private */
- getFFI() {
- return this.parent.getFFI();
- }
- };
- exports.TestQuickJSWASMModule = TestQuickJSWASMModule;
- }
-});
-
-// .yarn/unplugged/@tootallnate-quickjs-emscripten-npm-0.23.0-a889ea7aeb/node_modules/@tootallnate/quickjs-emscripten/dist/index.js
-var require_dist10 = __commonJS({
- ".yarn/unplugged/@tootallnate-quickjs-emscripten-npm-0.23.0-a889ea7aeb/node_modules/@tootallnate/quickjs-emscripten/dist/index.js"(exports) {
- "use strict";
- var __createBinding2 = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) {
- if (k2 === void 0)
- k2 = k;
- var desc = Object.getOwnPropertyDescriptor(m, k);
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
- desc = { enumerable: true, get: function() {
- return m[k];
- } };
- }
- Object.defineProperty(o, k2, desc);
- } : function(o, m, k, k2) {
- if (k2 === void 0)
- k2 = k;
- o[k2] = m[k];
- });
- var __setModuleDefault2 = exports && exports.__setModuleDefault || (Object.create ? function(o, v) {
- Object.defineProperty(o, "default", { enumerable: true, value: v });
- } : function(o, v) {
- o["default"] = v;
- });
- var __exportStar2 = exports && exports.__exportStar || function(m, exports2) {
- for (var p in m)
- if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports2, p))
- __createBinding2(exports2, m, p);
- };
- var __importStar2 = exports && exports.__importStar || function(mod) {
- if (mod && mod.__esModule)
- return mod;
- var result = {};
- if (mod != null) {
- for (var k in mod)
- if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k))
- __createBinding2(result, mod, k);
- }
- __setModuleDefault2(result, mod);
- return result;
- };
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.shouldInterruptAfterDeadline = exports.newAsyncContext = exports.newAsyncRuntime = exports.getQuickJSSync = exports.getQuickJS = exports.errors = exports.RELEASE_SYNC = exports.RELEASE_ASYNC = exports.DEBUG_SYNC = exports.DEBUG_ASYNC = exports.newQuickJSAsyncWASMModule = exports.newQuickJSWASMModule = void 0;
- var variants_1 = require_variants();
- Object.defineProperty(exports, "newQuickJSWASMModule", { enumerable: true, get: function() {
- return variants_1.newQuickJSWASMModule;
- } });
- Object.defineProperty(exports, "newQuickJSAsyncWASMModule", { enumerable: true, get: function() {
- return variants_1.newQuickJSAsyncWASMModule;
- } });
- Object.defineProperty(exports, "DEBUG_ASYNC", { enumerable: true, get: function() {
- return variants_1.DEBUG_ASYNC;
- } });
- Object.defineProperty(exports, "DEBUG_SYNC", { enumerable: true, get: function() {
- return variants_1.DEBUG_SYNC;
- } });
- Object.defineProperty(exports, "RELEASE_ASYNC", { enumerable: true, get: function() {
- return variants_1.RELEASE_ASYNC;
- } });
- Object.defineProperty(exports, "RELEASE_SYNC", { enumerable: true, get: function() {
- return variants_1.RELEASE_SYNC;
- } });
- __exportStar2(require_vm_interface(), exports);
- __exportStar2(require_lifetime(), exports);
- exports.errors = __importStar2(require_errors());
- __exportStar2(require_deferred_promise(), exports);
- __exportStar2(require_module_test(), exports);
- var singleton = void 0;
- var singletonPromise = void 0;
- async function getQuickJS() {
- singletonPromise ?? (singletonPromise = (0, variants_1.newQuickJSWASMModule)().then((instance) => {
- singleton = instance;
- return instance;
- }));
- return await singletonPromise;
- }
- exports.getQuickJS = getQuickJS;
- function getQuickJSSync() {
- if (!singleton) {
- throw new Error("QuickJS not initialized. Await getQuickJS() at least once.");
- }
- return singleton;
- }
- exports.getQuickJSSync = getQuickJSSync;
- async function newAsyncRuntime(options) {
- const module3 = await (0, variants_1.newQuickJSAsyncWASMModule)();
- return module3.newRuntime(options);
- }
- exports.newAsyncRuntime = newAsyncRuntime;
- async function newAsyncContext(options) {
- const module3 = await (0, variants_1.newQuickJSAsyncWASMModule)();
- return module3.newContext(options);
- }
- exports.newAsyncContext = newAsyncContext;
- function shouldInterruptAfterDeadline(deadline) {
- const deadlineAsNumber = typeof deadline === "number" ? deadline : deadline.getTime();
- return function() {
- return Date.now() > deadlineAsNumber;
- };
- }
- exports.shouldInterruptAfterDeadline = shouldInterruptAfterDeadline;
- }
-});
-
-// .yarn/cache/pac-proxy-agent-npm-7.0.1-8d7216fff5-95b07e2a40.zip/node_modules/pac-proxy-agent/dist/index.js
-var require_dist11 = __commonJS({
- ".yarn/cache/pac-proxy-agent-npm-7.0.1-8d7216fff5-95b07e2a40.zip/node_modules/pac-proxy-agent/dist/index.js"(exports) {
- "use strict";
- var __createBinding2 = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) {
- if (k2 === void 0)
- k2 = k;
- var desc = Object.getOwnPropertyDescriptor(m, k);
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
- desc = { enumerable: true, get: function() {
- return m[k];
- } };
- }
- Object.defineProperty(o, k2, desc);
- } : function(o, m, k, k2) {
- if (k2 === void 0)
- k2 = k;
- o[k2] = m[k];
- });
- var __setModuleDefault2 = exports && exports.__setModuleDefault || (Object.create ? function(o, v) {
- Object.defineProperty(o, "default", { enumerable: true, value: v });
- } : function(o, v) {
- o["default"] = v;
- });
- var __importStar2 = exports && exports.__importStar || function(mod) {
- if (mod && mod.__esModule)
- return mod;
- var result = {};
- if (mod != null) {
- for (var k in mod)
- if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k))
- __createBinding2(result, mod, k);
- }
- __setModuleDefault2(result, mod);
- return result;
- };
- var __importDefault2 = exports && exports.__importDefault || function(mod) {
- return mod && mod.__esModule ? mod : { "default": mod };
- };
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.PacProxyAgent = void 0;
- var net = __importStar2(require("net"));
- var tls = __importStar2(require("tls"));
- var crypto = __importStar2(require("crypto"));
- var events_1 = require("events");
- var debug_1 = __importDefault2(require_src2());
- var url_1 = require("url");
- var agent_base_1 = require_dist();
- var http_proxy_agent_1 = require_dist2();
- var https_proxy_agent_1 = require_dist3();
- var socks_proxy_agent_1 = require_dist4();
- var get_uri_1 = require_dist7();
- var pac_resolver_1 = require_dist9();
- var quickjs_emscripten_1 = require_dist10();
- var debug2 = (0, debug_1.default)("pac-proxy-agent");
- var PacProxyAgent = class extends agent_base_1.Agent {
- constructor(uri, opts) {
- super(opts);
- this.clearResolverPromise = () => {
- this.resolverPromise = void 0;
- };
- const uriStr = typeof uri === "string" ? uri : uri.href;
- this.uri = new url_1.URL(uriStr.replace(/^pac\+/i, ""));
- debug2("Creating PacProxyAgent with URI %o", this.uri.href);
- this.opts = { ...opts };
- this.cache = void 0;
- this.resolver = void 0;
- this.resolverHash = "";
- this.resolverPromise = void 0;
- if (!this.opts.filename) {
- this.opts.filename = this.uri.href;
- }
- }
- /**
- * Loads the PAC proxy file from the source if necessary, and returns
- * a generated `FindProxyForURL()` resolver function to use.
- *
- * @api private
- */
- getResolver() {
- if (!this.resolverPromise) {
- this.resolverPromise = this.loadResolver();
- this.resolverPromise.then(this.clearResolverPromise, this.clearResolverPromise);
- }
- return this.resolverPromise;
- }
- async loadResolver() {
- try {
- const [qjs, code] = await Promise.all([
- (0, quickjs_emscripten_1.getQuickJS)(),
- this.loadPacFile()
- ]);
- const hash = crypto.createHash("sha1").update(code).digest("hex");
- if (this.resolver && this.resolverHash === hash) {
- debug2("Same sha1 hash for code - contents have not changed, reusing previous proxy resolver");
- return this.resolver;
- }
- debug2("Creating new proxy resolver instance");
- this.resolver = (0, pac_resolver_1.createPacResolver)(qjs, code, this.opts);
- this.resolverHash = hash;
- return this.resolver;
- } catch (err) {
- if (this.resolver && err.code === "ENOTMODIFIED") {
- debug2("Got ENOTMODIFIED response, reusing previous proxy resolver");
- return this.resolver;
- }
- throw err;
- }
- }
- /**
- * Loads the contents of the PAC proxy file.
- *
- * @api private
- */
- async loadPacFile() {
- debug2("Loading PAC file: %o", this.uri);
- const rs = await (0, get_uri_1.getUri)(this.uri, { ...this.opts, cache: this.cache });
- debug2("Got `Readable` instance for URI");
- this.cache = rs;
- const buf = await (0, agent_base_1.toBuffer)(rs);
- debug2("Read %o byte PAC file from URI", buf.length);
- return buf.toString("utf8");
- }
- /**
- * Called when the node-core HTTP client library is creating a new HTTP request.
- */
- async connect(req, opts) {
- const { secureEndpoint } = opts;
- const resolver = await this.getResolver();
- const defaultPort = secureEndpoint ? 443 : 80;
- let path10 = req.path;
- let search = null;
- const firstQuestion = path10.indexOf("?");
- if (firstQuestion !== -1) {
- search = path10.substring(firstQuestion);
- path10 = path10.substring(0, firstQuestion);
- }
- const urlOpts = {
- ...opts,
- protocol: secureEndpoint ? "https:" : "http:",
- pathname: path10,
- search,
- // need to use `hostname` instead of `host` otherwise `port` is ignored
- hostname: opts.host,
- host: null,
- href: null,
- // set `port` to null when it is the protocol default port (80 / 443)
- port: defaultPort === opts.port ? null : opts.port
- };
- const url = (0, url_1.format)(urlOpts);
- debug2("url: %o", url);
- let result = await resolver(url);
- if (!result) {
- result = "DIRECT";
- }
- const proxies = String(result).trim().split(/\s*;\s*/g).filter(Boolean);
- if (this.opts.fallbackToDirect && !proxies.includes("DIRECT")) {
- proxies.push("DIRECT");
- }
- for (const proxy of proxies) {
- let agent = null;
- let socket = null;
- const [type, target] = proxy.split(/\s+/);
- debug2("Attempting to use proxy: %o", proxy);
- if (type === "DIRECT") {
- if (secureEndpoint) {
- const servername = opts.servername || opts.host;
- socket = tls.connect({
- ...opts,
- servername: !servername || net.isIP(servername) ? void 0 : servername
- });
- } else {
- socket = net.connect(opts);
- }
- } else if (type === "SOCKS" || type === "SOCKS5") {
- agent = new socks_proxy_agent_1.SocksProxyAgent(`socks://${target}`, this.opts);
- } else if (type === "SOCKS4") {
- agent = new socks_proxy_agent_1.SocksProxyAgent(`socks4a://${target}`, this.opts);
- } else if (type === "PROXY" || type === "HTTP" || type === "HTTPS") {
- const proxyURL = `${type === "HTTPS" ? "https" : "http"}://${target}`;
- if (secureEndpoint) {
- agent = new https_proxy_agent_1.HttpsProxyAgent(proxyURL, this.opts);
- } else {
- agent = new http_proxy_agent_1.HttpProxyAgent(proxyURL, this.opts);
- }
- }
- try {
- if (socket) {
- await (0, events_1.once)(socket, "connect");
- req.emit("proxy", { proxy, socket });
- return socket;
- }
- if (agent) {
- const s = await agent.connect(req, opts);
- if (!(s instanceof net.Socket)) {
- throw new Error("Expected a `net.Socket` to be returned from agent");
- }
- req.emit("proxy", { proxy, socket: s });
- return s;
- }
- throw new Error(`Could not determine proxy type for: ${proxy}`);
- } catch (err) {
- debug2("Got error for proxy %o: %o", proxy, err);
- req.emit("proxy", { proxy, error: err });
- }
- }
- throw new Error(`Failed to establish a socket connection to proxies: ${JSON.stringify(proxies)}`);
- }
- };
- PacProxyAgent.protocols = [
- "pac+data",
- "pac+file",
- "pac+ftp",
- "pac+http",
- "pac+https"
- ];
- exports.PacProxyAgent = PacProxyAgent;
- }
-});
-
-// .yarn/cache/proxy-agent-npm-6.3.1-b14461a822-72532eeae5.zip/node_modules/proxy-agent/dist/index.js
-var require_dist12 = __commonJS({
- ".yarn/cache/proxy-agent-npm-6.3.1-b14461a822-72532eeae5.zip/node_modules/proxy-agent/dist/index.js"(exports) {
- "use strict";
- var __createBinding2 = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) {
- if (k2 === void 0)
- k2 = k;
- var desc = Object.getOwnPropertyDescriptor(m, k);
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
- desc = { enumerable: true, get: function() {
- return m[k];
- } };
- }
- Object.defineProperty(o, k2, desc);
- } : function(o, m, k, k2) {
- if (k2 === void 0)
- k2 = k;
- o[k2] = m[k];
- });
- var __setModuleDefault2 = exports && exports.__setModuleDefault || (Object.create ? function(o, v) {
- Object.defineProperty(o, "default", { enumerable: true, value: v });
- } : function(o, v) {
- o["default"] = v;
- });
- var __importStar2 = exports && exports.__importStar || function(mod) {
- if (mod && mod.__esModule)
- return mod;
- var result = {};
- if (mod != null) {
- for (var k in mod)
- if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k))
- __createBinding2(result, mod, k);
- }
- __setModuleDefault2(result, mod);
- return result;
- };
- var __importDefault2 = exports && exports.__importDefault || function(mod) {
- return mod && mod.__esModule ? mod : { "default": mod };
- };
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.ProxyAgent = exports.proxies = void 0;
- var http = __importStar2(require("http"));
- var https = __importStar2(require("https"));
- var url_1 = require("url");
- var lru_cache_1 = __importDefault2(require_lru_cache2());
- var agent_base_1 = require_dist();
- var debug_1 = __importDefault2(require_src2());
- var proxy_from_env_1 = require_proxy_from_env();
- var pac_proxy_agent_1 = require_dist11();
- var http_proxy_agent_1 = require_dist2();
- var https_proxy_agent_1 = require_dist3();
- var socks_proxy_agent_1 = require_dist4();
- var debug2 = (0, debug_1.default)("proxy-agent");
- var PROTOCOLS = [
- ...http_proxy_agent_1.HttpProxyAgent.protocols,
- ...socks_proxy_agent_1.SocksProxyAgent.protocols,
- ...pac_proxy_agent_1.PacProxyAgent.protocols
- ];
- exports.proxies = {
- http: [http_proxy_agent_1.HttpProxyAgent, https_proxy_agent_1.HttpsProxyAgent],
- https: [http_proxy_agent_1.HttpProxyAgent, https_proxy_agent_1.HttpsProxyAgent],
- socks: [socks_proxy_agent_1.SocksProxyAgent, socks_proxy_agent_1.SocksProxyAgent],
- socks4: [socks_proxy_agent_1.SocksProxyAgent, socks_proxy_agent_1.SocksProxyAgent],
- socks4a: [socks_proxy_agent_1.SocksProxyAgent, socks_proxy_agent_1.SocksProxyAgent],
- socks5: [socks_proxy_agent_1.SocksProxyAgent, socks_proxy_agent_1.SocksProxyAgent],
- socks5h: [socks_proxy_agent_1.SocksProxyAgent, socks_proxy_agent_1.SocksProxyAgent],
- "pac+data": [pac_proxy_agent_1.PacProxyAgent, pac_proxy_agent_1.PacProxyAgent],
- "pac+file": [pac_proxy_agent_1.PacProxyAgent, pac_proxy_agent_1.PacProxyAgent],
- "pac+ftp": [pac_proxy_agent_1.PacProxyAgent, pac_proxy_agent_1.PacProxyAgent],
- "pac+http": [pac_proxy_agent_1.PacProxyAgent, pac_proxy_agent_1.PacProxyAgent],
- "pac+https": [pac_proxy_agent_1.PacProxyAgent, pac_proxy_agent_1.PacProxyAgent]
- };
- function isValidProtocol(v) {
- return PROTOCOLS.includes(v);
- }
- var ProxyAgent = class extends agent_base_1.Agent {
- constructor(opts) {
- super(opts);
- this.cache = new lru_cache_1.default({ max: 20 });
- debug2("Creating new ProxyAgent instance: %o", opts);
- this.connectOpts = opts;
- this.httpAgent = opts?.httpAgent || new http.Agent(opts);
- this.httpsAgent = opts?.httpsAgent || new https.Agent(opts);
- this.getProxyForUrl = opts?.getProxyForUrl || proxy_from_env_1.getProxyForUrl;
- }
- async connect(req, opts) {
- const { secureEndpoint } = opts;
- const isWebSocket = req.getHeader("upgrade") === "websocket";
- const protocol = secureEndpoint ? isWebSocket ? "wss:" : "https:" : isWebSocket ? "ws:" : "http:";
- const host = req.getHeader("host");
- const url = new url_1.URL(req.path, `${protocol}//${host}`).href;
- const proxy = this.getProxyForUrl(url);
- if (!proxy) {
- debug2("Proxy not enabled for URL: %o", url);
- return secureEndpoint ? this.httpsAgent : this.httpAgent;
- }
- debug2("Request URL: %o", url);
- debug2("Proxy URL: %o", proxy);
- const cacheKey = `${protocol}+${proxy}`;
- let agent = this.cache.get(cacheKey);
- if (!agent) {
- const proxyUrl = new url_1.URL(proxy);
- const proxyProto = proxyUrl.protocol.replace(":", "");
- if (!isValidProtocol(proxyProto)) {
- throw new Error(`Unsupported protocol for proxy URL: ${proxy}`);
- }
- const ctor = exports.proxies[proxyProto][secureEndpoint || isWebSocket ? 1 : 0];
- agent = new ctor(proxy, this.connectOpts);
- this.cache.set(cacheKey, agent);
- } else {
- debug2("Cache hit for proxy URL: %o", proxy);
- }
- return agent;
- }
- destroy() {
- for (const agent of this.cache.values()) {
- agent.destroy();
- }
- super.destroy();
- }
- };
- exports.ProxyAgent = ProxyAgent;
- }
-});
-
-// .yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/high-level-opt.js
-var require_high_level_opt = __commonJS({
- ".yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/high-level-opt.js"(exports, module2) {
- "use strict";
- var 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"]
- ]);
- module2.exports = (opt) => opt ? Object.keys(opt).map((k) => [
- argmap.has(k) ? argmap.get(k) : k,
- opt[k]
- ]).reduce((set, kv) => (set[kv[0]] = kv[1], set), /* @__PURE__ */ Object.create(null)) : {};
- }
-});
-
-// .yarn/cache/minipass-npm-5.0.0-c64fb63c92-a91d8043f6.zip/node_modules/minipass/index.js
-var require_minipass = __commonJS({
- ".yarn/cache/minipass-npm-5.0.0-c64fb63c92-a91d8043f6.zip/node_modules/minipass/index.js"(exports) {
- "use strict";
- var proc = typeof process === "object" && process ? process : {
- stdout: null,
- stderr: null
- };
- var EE = require("events");
- var Stream = require("stream");
- var stringdecoder = require("string_decoder");
- var SD = stringdecoder.StringDecoder;
- var EOF = Symbol("EOF");
- var MAYBE_EMIT_END = Symbol("maybeEmitEnd");
- var EMITTED_END = Symbol("emittedEnd");
- var EMITTING_END = Symbol("emittingEnd");
- var EMITTED_ERROR = Symbol("emittedError");
- var CLOSED = Symbol("closed");
- var READ = Symbol("read");
- var FLUSH = Symbol("flush");
- var FLUSHCHUNK = Symbol("flushChunk");
- var ENCODING = Symbol("encoding");
- var DECODER = Symbol("decoder");
- var FLOWING = Symbol("flowing");
- var PAUSED = Symbol("paused");
- var RESUME = Symbol("resume");
- var BUFFER = Symbol("buffer");
- var PIPES = Symbol("pipes");
- var BUFFERLENGTH = Symbol("bufferLength");
- var BUFFERPUSH = Symbol("bufferPush");
- var BUFFERSHIFT = Symbol("bufferShift");
- var OBJECTMODE = Symbol("objectMode");
- var DESTROYED = Symbol("destroyed");
- var ERROR = Symbol("error");
- var EMITDATA = Symbol("emitData");
- var EMITEND = Symbol("emitEnd");
- var EMITEND2 = Symbol("emitEnd2");
- var ASYNC = Symbol("async");
- var ABORT = Symbol("abort");
- var ABORTED = Symbol("aborted");
- var SIGNAL = Symbol("signal");
- var defer = (fn2) => Promise.resolve().then(fn2);
- var doIter = global._MP_NO_ITERATOR_SYMBOLS_ !== "1";
- var ASYNCITERATOR = doIter && Symbol.asyncIterator || Symbol("asyncIterator not implemented");
- var ITERATOR = doIter && Symbol.iterator || Symbol("iterator not implemented");
- var isEndish = (ev) => ev === "end" || ev === "finish" || ev === "prefinish";
- var isArrayBuffer = (b) => b instanceof ArrayBuffer || typeof b === "object" && b.constructor && b.constructor.name === "ArrayBuffer" && b.byteLength >= 0;
- var isArrayBufferView = (b) => !Buffer.isBuffer(b) && ArrayBuffer.isView(b);
- var Pipe = class {
- constructor(src, dest, opts) {
- this.src = src;
- this.dest = dest;
- this.opts = opts;
- this.ondrain = () => src[RESUME]();
- dest.on("drain", this.ondrain);
- }
- unpipe() {
- this.dest.removeListener("drain", this.ondrain);
- }
- // istanbul ignore next - only here for the prototype
- proxyErrors() {
- }
- end() {
- this.unpipe();
- if (this.opts.end)
- this.dest.end();
- }
- };
- var PipeProxyErrors = class extends Pipe {
- unpipe() {
- this.src.removeListener("error", this.proxyErrors);
- super.unpipe();
- }
- constructor(src, dest, opts) {
- super(src, dest, opts);
- this.proxyErrors = (er) => dest.emit("error", er);
- src.on("error", this.proxyErrors);
- }
- };
- var Minipass = class _Minipass extends Stream {
- constructor(options) {
- super();
- this[FLOWING] = false;
- this[PAUSED] = false;
- this[PIPES] = [];
- this[BUFFER] = [];
- this[OBJECTMODE] = options && options.objectMode || false;
- if (this[OBJECTMODE])
- this[ENCODING] = null;
- else
- this[ENCODING] = options && options.encoding || null;
- if (this[ENCODING] === "buffer")
- this[ENCODING] = null;
- this[ASYNC] = options && !!options.async || false;
- this[DECODER] = this[ENCODING] ? new SD(this[ENCODING]) : null;
- this[EOF] = false;
- this[EMITTED_END] = false;
- this[EMITTING_END] = false;
- this[CLOSED] = false;
- this[EMITTED_ERROR] = null;
- this.writable = true;
- this.readable = true;
- this[BUFFERLENGTH] = 0;
- this[DESTROYED] = false;
- if (options && options.debugExposeBuffer === true) {
- Object.defineProperty(this, "buffer", { get: () => this[BUFFER] });
- }
- if (options && options.debugExposePipes === true) {
- Object.defineProperty(this, "pipes", { get: () => this[PIPES] });
- }
- this[SIGNAL] = options && options.signal;
- this[ABORTED] = false;
- if (this[SIGNAL]) {
- this[SIGNAL].addEventListener("abort", () => this[ABORT]());
- if (this[SIGNAL].aborted) {
- this[ABORT]();
- }
- }
- }
- get bufferLength() {
- return this[BUFFERLENGTH];
- }
- get encoding() {
- return this[ENCODING];
- }
- set encoding(enc) {
- if (this[OBJECTMODE])
- throw new Error("cannot set encoding in objectMode");
- if (this[ENCODING] && enc !== this[ENCODING] && (this[DECODER] && this[DECODER].lastNeed || this[BUFFERLENGTH]))
- throw new Error("cannot change encoding");
- if (this[ENCODING] !== enc) {
- this[DECODER] = enc ? new SD(enc) : null;
- if (this[BUFFER].length)
- this[BUFFER] = this[BUFFER].map((chunk) => this[DECODER].write(chunk));
- }
- this[ENCODING] = enc;
- }
- setEncoding(enc) {
- this.encoding = enc;
- }
- get objectMode() {
- return this[OBJECTMODE];
- }
- set objectMode(om) {
- this[OBJECTMODE] = this[OBJECTMODE] || !!om;
- }
- get ["async"]() {
- return this[ASYNC];
- }
- 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);
- }
- get aborted() {
- return this[ABORTED];
- }
- 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 : (f) => f();
- if (!this[OBJECTMODE] && !Buffer.isBuffer(chunk)) {
- if (isArrayBufferView(chunk))
- chunk = Buffer.from(chunk.buffer, chunk.byteOffset, chunk.byteLength);
- else if (isArrayBuffer(chunk))
- chunk = Buffer.from(chunk);
- else if (typeof chunk !== "string")
- this.objectMode = true;
- }
- 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;
- }
- read(n) {
- if (this[DESTROYED])
- return null;
- if (this[BUFFERLENGTH] === 0 || n === 0 || n > this[BUFFERLENGTH]) {
- this[MAYBE_EMIT_END]();
- return null;
- }
- if (this[OBJECTMODE])
- n = null;
- if (this[BUFFER].length > 1 && !this[OBJECTMODE]) {
- if (this.encoding)
- this[BUFFER] = [this[BUFFER].join("")];
- else
- this[BUFFER] = [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 (n === chunk.length || n === null)
- this[BUFFERSHIFT]();
- else {
- this[BUFFER][0] = chunk.slice(n);
- chunk = chunk.slice(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 = null;
- if (typeof encoding === "function")
- cb = encoding, encoding = "utf8";
- if (chunk)
- 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;
- 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() {
- return this[RESUME]();
- }
- pause() {
- this[FLOWING] = false;
- this[PAUSED] = true;
- }
- get destroyed() {
- return this[DESTROYED];
- }
- get flowing() {
- return this[FLOWING];
- }
- 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) {
- 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(dest, opts) {
- if (this[DESTROYED])
- return;
- 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;
- }
- unpipe(dest) {
- const p = this[PIPES].find((p2) => p2.dest === dest);
- if (p) {
- this[PIPES].splice(this[PIPES].indexOf(p), 1);
- p.unpipe();
- }
- }
- addListener(ev, fn2) {
- return this.on(ev, fn2);
- }
- on(ev, fn2) {
- const ret = super.on(ev, fn2);
- if (ev === "data" && !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]) {
- if (this[ASYNC])
- defer(() => fn2.call(this, this[EMITTED_ERROR]));
- else
- fn2.call(this, this[EMITTED_ERROR]);
- }
- return ret;
- }
- 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;
- }
- }
- emit(ev, data, ...extra) {
- if (ev !== "error" && ev !== "close" && ev !== DESTROYED && this[DESTROYED])
- return;
- else if (ev === "data") {
- return !this[OBJECTMODE] && !data ? false : this[ASYNC] ? defer(() => this[EMITDATA](data)) : this[EMITDATA](data);
- } else if (ev === "end") {
- return this[EMITEND]();
- } else if (ev === "close") {
- this[CLOSED] = true;
- if (!this[EMITTED_END] && !this[DESTROYED])
- return;
- 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, data, ...extra);
- this[MAYBE_EMIT_END]();
- return ret;
- }
- [EMITDATA](data) {
- for (const p of this[PIPES]) {
- if (p.dest.write(data) === false)
- this.pause();
- }
- const ret = super.emit("data", data);
- this[MAYBE_EMIT_END]();
- return ret;
- }
- [EMITEND]() {
- if (this[EMITTED_END])
- return;
- this[EMITTED_END] = true;
- this.readable = false;
- if (this[ASYNC])
- defer(() => this[EMITEND2]());
- else
- this[EMITEND2]();
- }
- [EMITEND2]() {
- if (this[DECODER]) {
- const data = this[DECODER].end();
- if (data) {
- for (const p of this[PIPES]) {
- p.dest.write(data);
- }
- super.emit("data", data);
- }
- }
- for (const p of this[PIPES]) {
- p.end();
- }
- const ret = super.emit("end");
- this.removeAllListeners("end");
- return ret;
- }
- // const all = await stream.collect()
- collect() {
- const buf = [];
- if (!this[OBJECTMODE])
- buf.dataLength = 0;
- const p = this.promise();
- this.on("data", (c) => {
- buf.push(c);
- if (!this[OBJECTMODE])
- buf.dataLength += c.length;
- });
- return p.then(() => buf);
- }
- // const data = await stream.concat()
- concat() {
- return this[OBJECTMODE] ? Promise.reject(new Error("cannot concat in objectMode")) : this.collect().then(
- (buf) => this[OBJECTMODE] ? Promise.reject(new Error("cannot concat in objectMode")) : this[ENCODING] ? buf.join("") : Buffer.concat(buf, buf.dataLength)
- );
- }
- // stream.promise().then(() => done, er => emitted error)
- promise() {
- return new Promise((resolve, reject) => {
- this.on(DESTROYED, () => reject(new Error("stream destroyed")));
- this.on("error", (er) => reject(er));
- this.on("end", () => resolve());
- });
- }
- // for await (let chunk of stream)
- [ASYNCITERATOR]() {
- let stopped = false;
- const stop = () => {
- this.pause();
- stopped = true;
- return Promise.resolve({ 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 = null;
- let reject = null;
- const onerr = (er) => {
- this.removeListener("data", ondata);
- this.removeListener("end", onend);
- this.removeListener(DESTROYED, ondestroy);
- stop();
- reject(er);
- };
- const ondata = (value) => {
- this.removeListener("error", onerr);
- this.removeListener("end", onend);
- this.removeListener(DESTROYED, ondestroy);
- this.pause();
- resolve({ value, done: !!this[EOF] });
- };
- const onend = () => {
- this.removeListener("error", onerr);
- this.removeListener("data", ondata);
- this.removeListener(DESTROYED, ondestroy);
- stop();
- resolve({ done: true });
- };
- 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,
- [ASYNCITERATOR]() {
- return this;
- }
- };
- }
- // for (let chunk of stream)
- [ITERATOR]() {
- let stopped = false;
- const stop = () => {
- this.pause();
- this.removeListener(ERROR, stop);
- this.removeListener(DESTROYED, stop);
- this.removeListener("end", stop);
- stopped = true;
- return { done: true };
- };
- const next = () => {
- if (stopped)
- return stop();
- const value = this.read();
- return value === null ? stop() : { value };
- };
- this.once("end", stop);
- this.once(ERROR, stop);
- this.once(DESTROYED, stop);
- return {
- next,
- throw: stop,
- return: stop,
- [ITERATOR]() {
- return this;
- }
- };
- }
- destroy(er) {
- if (this[DESTROYED]) {
- if (er)
- this.emit("error", er);
- else
- this.emit(DESTROYED);
- return this;
- }
- this[DESTROYED] = true;
- this[BUFFER].length = 0;
- this[BUFFERLENGTH] = 0;
- if (typeof this.close === "function" && !this[CLOSED])
- this.close();
- if (er)
- this.emit("error", er);
- else
- this.emit(DESTROYED);
- return this;
- }
- static isStream(s) {
- return !!s && (s instanceof _Minipass || s instanceof Stream || s instanceof EE && // readable
- (typeof s.pipe === "function" || // writable
- typeof s.write === "function" && typeof s.end === "function"));
- }
- };
- exports.Minipass = Minipass;
- }
-});
-
-// .yarn/cache/minizlib-npm-2.1.2-ea89cd0cfb-64fae024e1.zip/node_modules/minizlib/constants.js
-var require_constants3 = __commonJS({
- ".yarn/cache/minizlib-npm-2.1.2-ea89cd0cfb-64fae024e1.zip/node_modules/minizlib/constants.js"(exports, module2) {
- var realZlibConstants = require("zlib").constants || /* istanbul ignore next */
- { ZLIB_VERNUM: 4736 };
- module2.exports = 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));
- }
-});
-
-// .yarn/cache/minipass-npm-3.3.6-b8d93a945b-a114746943.zip/node_modules/minipass/index.js
-var require_minipass2 = __commonJS({
- ".yarn/cache/minipass-npm-3.3.6-b8d93a945b-a114746943.zip/node_modules/minipass/index.js"(exports, module2) {
- "use strict";
- var proc = typeof process === "object" && process ? process : {
- stdout: null,
- stderr: null
- };
- var EE = require("events");
- var Stream = require("stream");
- var SD = require("string_decoder").StringDecoder;
- var EOF = Symbol("EOF");
- var MAYBE_EMIT_END = Symbol("maybeEmitEnd");
- var EMITTED_END = Symbol("emittedEnd");
- var EMITTING_END = Symbol("emittingEnd");
- var EMITTED_ERROR = Symbol("emittedError");
- var CLOSED = Symbol("closed");
- var READ = Symbol("read");
- var FLUSH = Symbol("flush");
- var FLUSHCHUNK = Symbol("flushChunk");
- var ENCODING = Symbol("encoding");
- var DECODER = Symbol("decoder");
- var FLOWING = Symbol("flowing");
- var PAUSED = Symbol("paused");
- var RESUME = Symbol("resume");
- var BUFFERLENGTH = Symbol("bufferLength");
- var BUFFERPUSH = Symbol("bufferPush");
- var BUFFERSHIFT = Symbol("bufferShift");
- var OBJECTMODE = Symbol("objectMode");
- var DESTROYED = Symbol("destroyed");
- var EMITDATA = Symbol("emitData");
- var EMITEND = Symbol("emitEnd");
- var EMITEND2 = Symbol("emitEnd2");
- var ASYNC = Symbol("async");
- var defer = (fn2) => Promise.resolve().then(fn2);
- var doIter = global._MP_NO_ITERATOR_SYMBOLS_ !== "1";
- var ASYNCITERATOR = doIter && Symbol.asyncIterator || Symbol("asyncIterator not implemented");
- var ITERATOR = doIter && Symbol.iterator || Symbol("iterator not implemented");
- var isEndish = (ev) => ev === "end" || ev === "finish" || ev === "prefinish";
- var isArrayBuffer = (b) => b instanceof ArrayBuffer || typeof b === "object" && b.constructor && b.constructor.name === "ArrayBuffer" && b.byteLength >= 0;
- var isArrayBufferView = (b) => !Buffer.isBuffer(b) && ArrayBuffer.isView(b);
- var Pipe = class {
- constructor(src, dest, opts) {
- this.src = src;
- this.dest = dest;
- this.opts = opts;
- this.ondrain = () => src[RESUME]();
- dest.on("drain", this.ondrain);
- }
- unpipe() {
- this.dest.removeListener("drain", this.ondrain);
- }
- // istanbul ignore next - only here for the prototype
- proxyErrors() {
- }
- end() {
- this.unpipe();
- if (this.opts.end)
- this.dest.end();
- }
- };
- var PipeProxyErrors = class extends Pipe {
- unpipe() {
- this.src.removeListener("error", this.proxyErrors);
- super.unpipe();
- }
- constructor(src, dest, opts) {
- super(src, dest, opts);
- this.proxyErrors = (er) => dest.emit("error", er);
- src.on("error", this.proxyErrors);
- }
- };
- module2.exports = class Minipass extends Stream {
- constructor(options) {
- super();
- this[FLOWING] = false;
- this[PAUSED] = false;
- this.pipes = [];
- this.buffer = [];
- this[OBJECTMODE] = options && options.objectMode || false;
- if (this[OBJECTMODE])
- this[ENCODING] = null;
- else
- this[ENCODING] = options && options.encoding || null;
- if (this[ENCODING] === "buffer")
- this[ENCODING] = null;
- this[ASYNC] = options && !!options.async || false;
- this[DECODER] = this[ENCODING] ? new SD(this[ENCODING]) : null;
- this[EOF] = false;
- this[EMITTED_END] = false;
- this[EMITTING_END] = false;
- this[CLOSED] = false;
- this[EMITTED_ERROR] = null;
- this.writable = true;
- this.readable = true;
- this[BUFFERLENGTH] = 0;
- this[DESTROYED] = false;
- }
- get bufferLength() {
- return this[BUFFERLENGTH];
- }
- get encoding() {
- return this[ENCODING];
- }
- set encoding(enc) {
- if (this[OBJECTMODE])
- throw new Error("cannot set encoding in objectMode");
- if (this[ENCODING] && enc !== this[ENCODING] && (this[DECODER] && this[DECODER].lastNeed || this[BUFFERLENGTH]))
- throw new Error("cannot change encoding");
- if (this[ENCODING] !== enc) {
- this[DECODER] = enc ? new SD(enc) : null;
- if (this.buffer.length)
- this.buffer = this.buffer.map((chunk) => this[DECODER].write(chunk));
- }
- this[ENCODING] = enc;
- }
- setEncoding(enc) {
- this.encoding = enc;
- }
- get objectMode() {
- return this[OBJECTMODE];
- }
- set objectMode(om) {
- this[OBJECTMODE] = this[OBJECTMODE] || !!om;
- }
- get ["async"]() {
- return this[ASYNC];
- }
- set ["async"](a) {
- this[ASYNC] = this[ASYNC] || !!a;
- }
- write(chunk, encoding, cb) {
- 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 : (f) => f();
- if (!this[OBJECTMODE] && !Buffer.isBuffer(chunk)) {
- if (isArrayBufferView(chunk))
- chunk = Buffer.from(chunk.buffer, chunk.byteOffset, chunk.byteLength);
- else if (isArrayBuffer(chunk))
- chunk = Buffer.from(chunk);
- else if (typeof chunk !== "string")
- this.objectMode = true;
- }
- 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;
- }
- read(n) {
- if (this[DESTROYED])
- return null;
- if (this[BUFFERLENGTH] === 0 || n === 0 || n > this[BUFFERLENGTH]) {
- this[MAYBE_EMIT_END]();
- return null;
- }
- if (this[OBJECTMODE])
- n = null;
- if (this.buffer.length > 1 && !this[OBJECTMODE]) {
- if (this.encoding)
- this.buffer = [this.buffer.join("")];
- else
- this.buffer = [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 (n === chunk.length || n === null)
- this[BUFFERSHIFT]();
- else {
- this.buffer[0] = chunk.slice(n);
- chunk = chunk.slice(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 = null;
- if (typeof encoding === "function")
- cb = encoding, encoding = "utf8";
- if (chunk)
- 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;
- 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() {
- return this[RESUME]();
- }
- pause() {
- this[FLOWING] = false;
- this[PAUSED] = true;
- }
- get destroyed() {
- return this[DESTROYED];
- }
- get flowing() {
- return this[FLOWING];
- }
- 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.buffer.length) {
- if (this[OBJECTMODE])
- this[BUFFERLENGTH] -= 1;
- else
- this[BUFFERLENGTH] -= this.buffer[0].length;
- }
- return this.buffer.shift();
- }
- [FLUSH](noDrain) {
- do {
- } while (this[FLUSHCHUNK](this[BUFFERSHIFT]()));
- if (!noDrain && !this.buffer.length && !this[EOF])
- this.emit("drain");
- }
- [FLUSHCHUNK](chunk) {
- return chunk ? (this.emit("data", chunk), this.flowing) : false;
- }
- pipe(dest, opts) {
- if (this[DESTROYED])
- return;
- 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;
- }
- unpipe(dest) {
- const p = this.pipes.find((p2) => p2.dest === dest);
- if (p) {
- this.pipes.splice(this.pipes.indexOf(p), 1);
- p.unpipe();
- }
- }
- addListener(ev, fn2) {
- return this.on(ev, fn2);
- }
- on(ev, fn2) {
- const ret = super.on(ev, fn2);
- if (ev === "data" && !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]) {
- if (this[ASYNC])
- defer(() => fn2.call(this, this[EMITTED_ERROR]));
- else
- fn2.call(this, this[EMITTED_ERROR]);
- }
- return ret;
- }
- 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;
- }
- }
- emit(ev, data, ...extra) {
- if (ev !== "error" && ev !== "close" && ev !== DESTROYED && this[DESTROYED])
- return;
- else if (ev === "data") {
- return !data ? false : this[ASYNC] ? defer(() => this[EMITDATA](data)) : this[EMITDATA](data);
- } else if (ev === "end") {
- return this[EMITEND]();
- } else if (ev === "close") {
- this[CLOSED] = true;
- if (!this[EMITTED_END] && !this[DESTROYED])
- return;
- const ret2 = super.emit("close");
- this.removeAllListeners("close");
- return ret2;
- } else if (ev === "error") {
- this[EMITTED_ERROR] = data;
- const ret2 = super.emit("error", data);
- 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, data, ...extra);
- this[MAYBE_EMIT_END]();
- return ret;
- }
- [EMITDATA](data) {
- for (const p of this.pipes) {
- if (p.dest.write(data) === false)
- this.pause();
- }
- const ret = super.emit("data", data);
- this[MAYBE_EMIT_END]();
- return ret;
- }
- [EMITEND]() {
- if (this[EMITTED_END])
- return;
- this[EMITTED_END] = true;
- this.readable = false;
- if (this[ASYNC])
- defer(() => this[EMITEND2]());
- else
- this[EMITEND2]();
- }
- [EMITEND2]() {
- if (this[DECODER]) {
- const data = this[DECODER].end();
- if (data) {
- for (const p of this.pipes) {
- p.dest.write(data);
- }
- super.emit("data", data);
- }
- }
- for (const p of this.pipes) {
- p.end();
- }
- const ret = super.emit("end");
- this.removeAllListeners("end");
- return ret;
- }
- // const all = await stream.collect()
- collect() {
- const buf = [];
- if (!this[OBJECTMODE])
- buf.dataLength = 0;
- const p = this.promise();
- this.on("data", (c) => {
- buf.push(c);
- if (!this[OBJECTMODE])
- buf.dataLength += c.length;
- });
- return p.then(() => buf);
- }
- // const data = await stream.concat()
- concat() {
- return this[OBJECTMODE] ? Promise.reject(new Error("cannot concat in objectMode")) : this.collect().then((buf) => this[OBJECTMODE] ? Promise.reject(new Error("cannot concat in objectMode")) : this[ENCODING] ? buf.join("") : Buffer.concat(buf, buf.dataLength));
- }
- // stream.promise().then(() => done, er => emitted error)
- promise() {
- return new Promise((resolve, reject) => {
- this.on(DESTROYED, () => reject(new Error("stream destroyed")));
- this.on("error", (er) => reject(er));
- this.on("end", () => resolve());
- });
- }
- // for await (let chunk of stream)
- [ASYNCITERATOR]() {
- const next = () => {
- const res = this.read();
- if (res !== null)
- return Promise.resolve({ done: false, value: res });
- if (this[EOF])
- return Promise.resolve({ done: true });
- let resolve = null;
- let reject = null;
- const onerr = (er) => {
- this.removeListener("data", ondata);
- this.removeListener("end", onend);
- reject(er);
- };
- const ondata = (value) => {
- this.removeListener("error", onerr);
- this.removeListener("end", onend);
- this.pause();
- resolve({ value, done: !!this[EOF] });
- };
- const onend = () => {
- this.removeListener("error", onerr);
- this.removeListener("data", ondata);
- resolve({ done: true });
- };
- 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 };
- }
- // for (let chunk of stream)
- [ITERATOR]() {
- const next = () => {
- const value = this.read();
- const done = value === null;
- return { value, done };
- };
- return { next };
- }
- destroy(er) {
- if (this[DESTROYED]) {
- if (er)
- this.emit("error", er);
- else
- this.emit(DESTROYED);
- return this;
- }
- this[DESTROYED] = true;
- this.buffer.length = 0;
- this[BUFFERLENGTH] = 0;
- if (typeof this.close === "function" && !this[CLOSED])
- this.close();
- if (er)
- this.emit("error", er);
- else
- this.emit(DESTROYED);
- return this;
- }
- static isStream(s) {
- return !!s && (s instanceof Minipass || s instanceof Stream || s instanceof EE && (typeof s.pipe === "function" || // readable
- typeof s.write === "function" && typeof s.end === "function"));
- }
- };
- }
-});
-
-// .yarn/cache/minizlib-npm-2.1.2-ea89cd0cfb-64fae024e1.zip/node_modules/minizlib/index.js
-var require_minizlib = __commonJS({
- ".yarn/cache/minizlib-npm-2.1.2-ea89cd0cfb-64fae024e1.zip/node_modules/minizlib/index.js"(exports) {
- "use strict";
- var assert2 = require("assert");
- var Buffer2 = require("buffer").Buffer;
- var realZlib = require("zlib");
- var constants = exports.constants = require_constants3();
- var Minipass = require_minipass2();
- var OriginalBufferConcat = Buffer2.concat;
- var _superWrite = Symbol("_superWrite");
- var ZlibError = class extends Error {
- constructor(err) {
- super("zlib: " + err.message);
- this.code = err.code;
- this.errno = err.errno;
- if (!this.code)
- this.code = "ZLIB_ERROR";
- this.message = "zlib: " + err.message;
- Error.captureStackTrace(this, this.constructor);
- }
- get name() {
- return "ZlibError";
- }
- };
- var _opts = Symbol("opts");
- var _flushFlag = Symbol("flushFlag");
- var _finishFlushFlag = Symbol("finishFlushFlag");
- var _fullFlushFlag = Symbol("fullFlushFlag");
- var _handle = Symbol("handle");
- var _onError = Symbol("onError");
- var _sawError = Symbol("sawError");
- var _level = Symbol("level");
- var _strategy = Symbol("strategy");
- var _ended = Symbol("ended");
- var _defaultFullFlush = Symbol("_defaultFullFlush");
- var ZlibBase = class extends Minipass {
- constructor(opts, mode) {
- if (!opts || typeof opts !== "object")
- throw new TypeError("invalid options for ZlibBase constructor");
- super(opts);
- this[_sawError] = false;
- this[_ended] = false;
- this[_opts] = opts;
- this[_flushFlag] = opts.flush;
- this[_finishFlushFlag] = opts.finishFlush;
- try {
- this[_handle] = new realZlib[mode](opts);
- } catch (er) {
- throw new ZlibError(er);
- }
- 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] = null;
- this.emit("close");
- }
- }
- reset() {
- if (!this[_sawError]) {
- assert2(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(Buffer2.alloc(0), { [_flushFlag]: flushFlag }));
- }
- end(chunk, encoding, cb) {
- if (chunk)
- this.write(chunk, encoding);
- this.flush(this[_finishFlushFlag]);
- this[_ended] = true;
- return super.end(null, null, cb);
- }
- get ended() {
- return this[_ended];
- }
- write(chunk, encoding, cb) {
- if (typeof encoding === "function")
- cb = encoding, encoding = "utf8";
- if (typeof chunk === "string")
- chunk = Buffer2.from(chunk, encoding);
- if (this[_sawError])
- return;
- assert2(this[_handle], "zlib binding closed");
- const nativeHandle = this[_handle]._handle;
- const originalNativeClose = nativeHandle.close;
- nativeHandle.close = () => {
- };
- const originalClose = this[_handle].close;
- this[_handle].close = () => {
- };
- Buffer2.concat = (args) => args;
- let result;
- try {
- const flushFlag = typeof chunk[_flushFlag] === "number" ? chunk[_flushFlag] : this[_flushFlag];
- result = this[_handle]._processChunk(chunk, flushFlag);
- Buffer2.concat = OriginalBufferConcat;
- } catch (err) {
- Buffer2.concat = OriginalBufferConcat;
- this[_onError](new ZlibError(err));
- } 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)));
- let writeReturn;
- if (result) {
- if (Array.isArray(result) && result.length > 0) {
- writeReturn = this[_superWrite](Buffer2.from(result[0]));
- for (let i = 1; i < result.length; i++) {
- writeReturn = this[_superWrite](result[i]);
- }
- } else {
- writeReturn = this[_superWrite](Buffer2.from(result));
- }
- }
- if (cb)
- cb();
- return writeReturn;
- }
- [_superWrite](data) {
- return super.write(data);
- }
- };
- var Zlib = class extends ZlibBase {
- constructor(opts, mode) {
- opts = opts || {};
- opts.flush = opts.flush || constants.Z_NO_FLUSH;
- opts.finishFlush = opts.finishFlush || constants.Z_FINISH;
- super(opts, mode);
- this[_fullFlushFlag] = constants.Z_FULL_FLUSH;
- 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);
- assert2(this[_handle], "zlib binding closed");
- const origFlush = this[_handle].flush;
- this[_handle].flush = (flushFlag, cb) => {
- this.flush(flushFlag);
- cb();
- };
- try {
- this[_handle].params(level, strategy);
- } finally {
- this[_handle].flush = origFlush;
- }
- if (this[_handle]) {
- this[_level] = level;
- this[_strategy] = strategy;
- }
- }
- }
- };
- var Deflate = class extends Zlib {
- constructor(opts) {
- super(opts, "Deflate");
- }
- };
- var Inflate = class extends Zlib {
- constructor(opts) {
- super(opts, "Inflate");
- }
- };
- var _portable = Symbol("_portable");
- var Gzip = class extends Zlib {
- 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);
- }
- };
- var Gunzip = class extends Zlib {
- constructor(opts) {
- super(opts, "Gunzip");
- }
- };
- var DeflateRaw = class extends Zlib {
- constructor(opts) {
- super(opts, "DeflateRaw");
- }
- };
- var InflateRaw = class extends Zlib {
- constructor(opts) {
- super(opts, "InflateRaw");
- }
- };
- var Unzip = class extends Zlib {
- constructor(opts) {
- super(opts, "Unzip");
- }
- };
- var 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;
- super(opts, mode);
- this[_fullFlushFlag] = constants.BROTLI_OPERATION_FLUSH;
- }
- };
- var BrotliCompress = class extends Brotli {
- constructor(opts) {
- super(opts, "BrotliCompress");
- }
- };
- var BrotliDecompress = class extends Brotli {
- constructor(opts) {
- super(opts, "BrotliDecompress");
- }
- };
- exports.Deflate = Deflate;
- exports.Inflate = Inflate;
- exports.Gzip = Gzip;
- exports.Gunzip = Gunzip;
- exports.DeflateRaw = DeflateRaw;
- exports.InflateRaw = InflateRaw;
- exports.Unzip = Unzip;
- if (typeof realZlib.BrotliCompress === "function") {
- exports.BrotliCompress = BrotliCompress;
- exports.BrotliDecompress = BrotliDecompress;
- } else {
- exports.BrotliCompress = exports.BrotliDecompress = class {
- constructor() {
- throw new Error("Brotli is not supported in this version of Node.js");
- }
- };
- }
- }
-});
-
-// .yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/normalize-windows-path.js
-var require_normalize_windows_path = __commonJS({
- ".yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/normalize-windows-path.js"(exports, module2) {
- var platform = process.env.TESTING_TAR_FAKE_PLATFORM || process.platform;
- module2.exports = platform !== "win32" ? (p) => p : (p) => p && p.replace(/\\/g, "/");
- }
-});
-
-// .yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/read-entry.js
-var require_read_entry = __commonJS({
- ".yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/read-entry.js"(exports, module2) {
- "use strict";
- var { Minipass } = require_minipass();
- var normPath = require_normalize_windows_path();
- var SLURP = Symbol("slurp");
- module2.exports = class ReadEntry extends Minipass {
- constructor(header, ex, gex) {
- super();
- this.pause();
- this.extended = ex;
- this.globalExtended = gex;
- this.header = header;
- this.startBlockSize = 512 * Math.ceil(header.size / 512);
- this.blockRemain = this.startBlockSize;
- this.remain = header.size;
- this.type = header.type;
- this.meta = false;
- this.ignore = false;
- 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;
- default:
- this.ignore = true;
- }
- this.path = normPath(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 = header.size;
- this.mtime = header.mtime;
- this.atime = header.atime;
- this.ctime = header.ctime;
- this.linkpath = normPath(header.linkpath);
- 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.slice(0, r));
- }
- [SLURP](ex, global2) {
- for (const k in ex) {
- if (ex[k] !== null && ex[k] !== void 0 && !(global2 && k === "path")) {
- this[k] = k === "path" || k === "linkpath" ? normPath(ex[k]) : ex[k];
- }
- }
- }
- };
- }
-});
-
-// .yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/types.js
-var require_types3 = __commonJS({
- ".yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/types.js"(exports) {
- "use strict";
- exports.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"]
- ]);
- exports.code = new Map(Array.from(exports.name).map((kv) => [kv[1], kv[0]]));
- }
-});
-
-// .yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/large-numbers.js
-var require_large_numbers = __commonJS({
- ".yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/large-numbers.js"(exports, module2) {
- "use strict";
- var 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;
- };
- var encodePositive = (num, buf) => {
- buf[0] = 128;
- for (var i = buf.length; i > 1; i--) {
- buf[i - 1] = num & 255;
- num = Math.floor(num / 256);
- }
- };
- var 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);
- }
- }
- };
- var parse = (buf) => {
- const pre = buf[0];
- const value = pre === 128 ? pos(buf.slice(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;
- };
- var twos = (buf) => {
- var len = buf.length;
- var sum = 0;
- var flipped = false;
- for (var i = len - 1; i > -1; i--) {
- var byte = 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;
- };
- var pos = (buf) => {
- var len = buf.length;
- var sum = 0;
- for (var i = len - 1; i > -1; i--) {
- var byte = buf[i];
- if (byte !== 0) {
- sum += byte * Math.pow(256, len - i - 1);
- }
- }
- return sum;
- };
- var onesComp = (byte) => (255 ^ byte) & 255;
- var twosComp = (byte) => (255 ^ byte) + 1 & 255;
- module2.exports = {
- encode,
- parse
- };
- }
-});
-
-// .yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/header.js
-var require_header = __commonJS({
- ".yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/header.js"(exports, module2) {
- "use strict";
- var types = require_types3();
- var pathModule = require("path").posix;
- var large = require_large_numbers();
- var SLURP = Symbol("slurp");
- var TYPE = Symbol("type");
- var Header = class {
- constructor(data, off, ex, gex) {
- this.cksumValid = false;
- this.needPax = false;
- this.nullBlock = false;
- this.block = null;
- this.path = null;
- this.mode = null;
- this.uid = null;
- this.gid = null;
- this.size = null;
- this.mtime = null;
- this.cksum = null;
- this[TYPE] = "0";
- this.linkpath = null;
- this.uname = null;
- this.gname = null;
- this.devmaj = 0;
- this.devmin = 0;
- this.atime = null;
- this.ctime = null;
- if (Buffer.isBuffer(data)) {
- this.decode(data, off || 0, ex, gex);
- } else if (data) {
- this.set(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 = decString(buf, off, 100);
- this.mode = decNumber(buf, off + 100, 8);
- this.uid = decNumber(buf, off + 108, 8);
- this.gid = decNumber(buf, off + 116, 8);
- this.size = decNumber(buf, off + 124, 12);
- this.mtime = decDate(buf, off + 136, 12);
- this.cksum = decNumber(buf, off + 148, 12);
- this[SLURP](ex);
- this[SLURP](gex, true);
- this[TYPE] = decString(buf, off + 156, 1);
- if (this[TYPE] === "") {
- this[TYPE] = "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.slice(off + 257, off + 265).toString() === "ustar\x0000") {
- this.uname = decString(buf, off + 265, 32);
- this.gname = decString(buf, off + 297, 32);
- this.devmaj = decNumber(buf, off + 329, 8);
- this.devmin = decNumber(buf, off + 337, 8);
- 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 = decDate(buf, off + 476, 12);
- this.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 === null && sum === 8 * 32) {
- this.nullBlock = true;
- }
- }
- [SLURP](ex, global2) {
- for (const k in ex) {
- if (ex[k] !== null && ex[k] !== void 0 && !(global2 && k === "path")) {
- this[k] = ex[k];
- }
- }
- }
- encode(buf, off) {
- if (!buf) {
- buf = this.block = Buffer.alloc(512);
- off = 0;
- }
- if (!off) {
- off = 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 path10 = split[0];
- const prefix = split[1];
- this.needPax = split[2];
- this.needPax = encString(buf, off, 100, path10) || 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] = this[TYPE].charCodeAt(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;
- }
- set(data) {
- for (const i in data) {
- if (data[i] !== null && data[i] !== void 0) {
- this[i] = data[i];
- }
- }
- }
- get type() {
- return types.name.get(this[TYPE]) || this[TYPE];
- }
- get typeKey() {
- return this[TYPE];
- }
- set type(type) {
- if (types.code.has(type)) {
- this[TYPE] = types.code.get(type);
- } else {
- this[TYPE] = type;
- }
- }
- };
- var splitPrefix = (p, prefixSize) => {
- const pathSize = 100;
- let pp = p;
- let prefix = "";
- let ret;
- const root = pathModule.parse(p).root || ".";
- if (Buffer.byteLength(pp) < pathSize) {
- ret = [pp, prefix, false];
- } else {
- prefix = pathModule.dirname(pp);
- pp = pathModule.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 = pathModule.join(pathModule.basename(prefix), pp);
- prefix = pathModule.dirname(prefix);
- }
- } while (prefix !== root && !ret);
- if (!ret) {
- ret = [p.slice(0, pathSize - 1), "", true];
- }
- }
- return ret;
- };
- var decString = (buf, off, size) => buf.slice(off, off + size).toString("utf8").replace(/\0.*/, "");
- var decDate = (buf, off, size) => numToDate(decNumber(buf, off, size));
- var numToDate = (num) => num === null ? null : new Date(num * 1e3);
- var decNumber = (buf, off, size) => buf[off] & 128 ? large.parse(buf.slice(off, off + size)) : decSmallNumber(buf, off, size);
- var nanNull = (value) => isNaN(value) ? null : value;
- var decSmallNumber = (buf, off, size) => nanNull(parseInt(
- buf.slice(off, off + size).toString("utf8").replace(/\0.*$/, "").trim(),
- 8
- ));
- var MAXNUM = {
- 12: 8589934591,
- 8: 2097151
- };
- var encNumber = (buf, off, size, number) => number === null ? false : number > MAXNUM[size] || number < 0 ? (large.encode(number, buf.slice(off, off + size)), true) : (encSmallNumber(buf, off, size, number), false);
- var encSmallNumber = (buf, off, size, number) => buf.write(octalString(number, size), off, size, "ascii");
- var octalString = (number, size) => padOctal(Math.floor(number).toString(8), size);
- var padOctal = (string, size) => (string.length === size - 1 ? string : new Array(size - string.length - 1).join("0") + string + " ") + "\0";
- var encDate = (buf, off, size, date) => date === null ? false : encNumber(buf, off, size, date.getTime() / 1e3);
- var NULLS = new Array(156).join("\0");
- var encString = (buf, off, size, string) => string === null ? false : (buf.write(string + NULLS, off, size, "utf8"), string.length !== Buffer.byteLength(string) || string.length > size);
- module2.exports = Header;
- }
-});
-
-// .yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/pax.js
-var require_pax = __commonJS({
- ".yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/pax.js"(exports, module2) {
- "use strict";
- var Header = require_header();
- var path10 = require("path");
- var Pax = class {
- constructor(obj, global2) {
- this.atime = obj.atime || null;
- this.charset = obj.charset || null;
- this.comment = obj.comment || null;
- this.ctime = obj.ctime || null;
- this.gid = obj.gid || null;
- this.gname = obj.gname || null;
- this.linkpath = obj.linkpath || null;
- this.mtime = obj.mtime || null;
- this.path = obj.path || null;
- this.size = obj.size || null;
- this.uid = obj.uid || null;
- this.uname = obj.uname || null;
- this.dev = obj.dev || null;
- this.ino = obj.ino || null;
- this.nlink = obj.nlink || null;
- this.global = global2 || false;
- }
- encode() {
- const body = this.encodeBody();
- if (body === "") {
- return null;
- }
- 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
- path: ("PaxHeader/" + path10.basename(this.path)).slice(0, 99),
- mode: this.mode || 420,
- uid: this.uid || null,
- gid: this.gid || null,
- size: bodyLen,
- mtime: this.mtime || null,
- type: this.global ? "GlobalExtendedHeader" : "ExtendedHeader",
- linkpath: "",
- uname: this.uname || "",
- gname: this.gname || "",
- devmaj: 0,
- devmin: 0,
- atime: this.atime || null,
- ctime: this.ctime || null
- }).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] === null || this[field] === void 0) {
- return "";
- }
- const v = this[field] instanceof Date ? this[field].getTime() / 1e3 : this[field];
- 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;
- }
- };
- Pax.parse = (string, ex, g) => new Pax(merge(parseKV(string), ex), g);
- var merge = (a, b) => b ? Object.keys(a).reduce((s, k) => (s[k] = a[k], s), b) : a;
- var parseKV = (string) => string.replace(/\n$/, "").split("\n").reduce(parseKVLine, /* @__PURE__ */ Object.create(null));
- var 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 k = kv.shift().replace(/^SCHILY\.(dev|ino|nlink)/, "$1");
- if (!k) {
- return set;
- }
- const v = kv.join("=");
- set[k] = /^([A-Z]+\.)?([mac]|birth|creation)time$/.test(k) ? new Date(v * 1e3) : /^[0-9]+$/.test(v) ? +v : v;
- return set;
- };
- module2.exports = Pax;
- }
-});
-
-// .yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/strip-trailing-slashes.js
-var require_strip_trailing_slashes = __commonJS({
- ".yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/strip-trailing-slashes.js"(exports, module2) {
- module2.exports = (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);
- };
- }
-});
-
-// .yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/warn-mixin.js
-var require_warn_mixin = __commonJS({
- ".yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/warn-mixin.js"(exports, module2) {
- "use strict";
- module2.exports = (Base) => class extends Base {
- warn(code, message, data = {}) {
- if (this.file) {
- data.file = this.file;
- }
- if (this.cwd) {
- data.cwd = this.cwd;
- }
- data.code = message instanceof Error && message.code || code;
- data.tarCode = code;
- if (!this.strict && data.recoverable !== false) {
- if (message instanceof Error) {
- data = Object.assign(message, data);
- message = message.message;
- }
- this.emit("warn", data.tarCode, message, data);
- } else if (message instanceof Error) {
- this.emit("error", Object.assign(message, data));
- } else {
- this.emit("error", Object.assign(new Error(`${code}: ${message}`), data));
- }
- }
- };
- }
-});
-
-// .yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/winchars.js
-var require_winchars = __commonJS({
- ".yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/winchars.js"(exports, module2) {
- "use strict";
- var raw = [
- "|",
- "<",
- ">",
- "?",
- ":"
- ];
- var win = raw.map((char) => String.fromCharCode(61440 + char.charCodeAt(0)));
- var toWin = new Map(raw.map((char, i) => [char, win[i]]));
- var toRaw = new Map(win.map((char, i) => [char, raw[i]]));
- module2.exports = {
- encode: (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)
- };
- }
-});
-
-// .yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/strip-absolute-path.js
-var require_strip_absolute_path = __commonJS({
- ".yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/strip-absolute-path.js"(exports, module2) {
- var { isAbsolute, parse } = require("path").win32;
- module2.exports = (path10) => {
- let r = "";
- let parsed = parse(path10);
- while (isAbsolute(path10) || parsed.root) {
- const root = path10.charAt(0) === "/" && path10.slice(0, 4) !== "//?/" ? "/" : parsed.root;
- path10 = path10.slice(root.length);
- r += root;
- parsed = parse(path10);
- }
- return [r, path10];
- };
- }
-});
-
-// .yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/mode-fix.js
-var require_mode_fix = __commonJS({
- ".yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/mode-fix.js"(exports, module2) {
- "use strict";
- module2.exports = (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;
- };
- }
-});
-
-// .yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/write-entry.js
-var require_write_entry = __commonJS({
- ".yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/write-entry.js"(exports, module2) {
- "use strict";
- var { Minipass } = require_minipass();
- var Pax = require_pax();
- var Header = require_header();
- var fs8 = require("fs");
- var path10 = require("path");
- var normPath = require_normalize_windows_path();
- var stripSlash = require_strip_trailing_slashes();
- var prefixPath = (path11, prefix) => {
- if (!prefix) {
- return normPath(path11);
- }
- path11 = normPath(path11).replace(/^\.(\/|$)/, "");
- return stripSlash(prefix) + "/" + path11;
- };
- var maxReadSize = 16 * 1024 * 1024;
- var PROCESS = Symbol("process");
- var FILE = Symbol("file");
- var DIRECTORY = Symbol("directory");
- var SYMLINK = Symbol("symlink");
- var HARDLINK = Symbol("hardlink");
- var HEADER = Symbol("header");
- var READ = Symbol("read");
- var LSTAT = Symbol("lstat");
- var ONLSTAT = Symbol("onlstat");
- var ONREAD = Symbol("onread");
- var ONREADLINK = Symbol("onreadlink");
- var OPENFILE = Symbol("openfile");
- var ONOPENFILE = Symbol("onopenfile");
- var CLOSE = Symbol("close");
- var MODE = Symbol("mode");
- var AWAITDRAIN = Symbol("awaitDrain");
- var ONDRAIN = Symbol("ondrain");
- var PREFIX = Symbol("prefix");
- var HAD_ERROR = Symbol("hadError");
- var warner = require_warn_mixin();
- var winchars = require_winchars();
- var stripAbsolutePath = require_strip_absolute_path();
- var modeFix = require_mode_fix();
- var WriteEntry = warner(class WriteEntry extends Minipass {
- constructor(p, opt) {
- opt = opt || {};
- super(opt);
- if (typeof p !== "string") {
- throw new TypeError("path is required");
- }
- this.path = normPath(p);
- this.portable = !!opt.portable;
- this.myuid = process.getuid && process.getuid() || 0;
- this.myuser = process.env.USER || "";
- 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 = normPath(opt.cwd || process.cwd());
- this.strict = !!opt.strict;
- this.noPax = !!opt.noPax;
- this.noMtime = !!opt.noMtime;
- this.mtime = opt.mtime || null;
- this.prefix = opt.prefix ? normPath(opt.prefix) : null;
- this.fd = null;
- this.blockLen = null;
- this.blockRemain = null;
- this.buf = null;
- this.offset = null;
- this.length = null;
- this.pos = null;
- this.remain = null;
- if (typeof opt.onwarn === "function") {
- this.on("warn", opt.onwarn);
- }
- let pathWarn = false;
- if (!this.preservePaths) {
- const [root, stripped] = stripAbsolutePath(this.path);
- if (root) {
- this.path = stripped;
- pathWarn = root;
- }
- }
- this.win32 = !!opt.win32 || process.platform === "win32";
- if (this.win32) {
- this.path = winchars.decode(this.path.replace(/\\/g, "/"));
- p = p.replace(/\\/g, "/");
- }
- this.absolute = normPath(opt.absolute || path10.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
- });
- }
- if (this.statCache.has(this.absolute)) {
- this[ONLSTAT](this.statCache.get(this.absolute));
- } else {
- this[LSTAT]();
- }
- }
- emit(ev, ...data) {
- if (ev === "error") {
- this[HAD_ERROR] = true;
- }
- return super.emit(ev, ...data);
- }
- [LSTAT]() {
- fs8.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[FILE]();
- case "Directory":
- return this[DIRECTORY]();
- case "SymbolicLink":
- return this[SYMLINK]();
- default:
- return this.end();
- }
- }
- [MODE](mode) {
- return modeFix(mode, this.type === "Directory", this.portable);
- }
- [PREFIX](path11) {
- return prefixPath(path11, this.prefix);
- }
- [HEADER]() {
- if (this.type === "Directory" && this.portable) {
- this.noMtime = true;
- }
- this.header = new Header({
- path: this[PREFIX](this.path),
- // only apply the prefix to hard links.
- linkpath: this.type === "Link" ? 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 ? null : this.stat.uid,
- gid: this.portable ? null : this.stat.gid,
- size: this.stat.size,
- mtime: this.noMtime ? null : this.mtime || this.stat.mtime,
- type: this.type,
- uname: this.portable ? null : this.stat.uid === this.myuid ? this.myuser : "",
- atime: this.portable ? null : this.stat.atime,
- ctime: this.portable ? null : this.stat.ctime
- });
- if (this.header.encode() && !this.noPax) {
- super.write(new Pax({
- atime: this.portable ? null : this.header.atime,
- ctime: this.portable ? null : this.header.ctime,
- gid: this.portable ? null : this.header.gid,
- mtime: this.noMtime ? null : this.mtime || this.header.mtime,
- path: this[PREFIX](this.path),
- linkpath: this.type === "Link" ? this[PREFIX](this.linkpath) : this.linkpath,
- size: this.header.size,
- uid: this.portable ? null : this.header.uid,
- uname: this.portable ? null : this.header.uname,
- dev: this.portable ? null : this.stat.dev,
- ino: this.portable ? null : this.stat.ino,
- nlink: this.portable ? null : this.stat.nlink
- }).encode());
- }
- super.write(this.header.block);
- }
- [DIRECTORY]() {
- if (this.path.slice(-1) !== "/") {
- this.path += "/";
- }
- this.stat.size = 0;
- this[HEADER]();
- this.end();
- }
- [SYMLINK]() {
- fs8.readlink(this.absolute, (er, linkpath) => {
- if (er) {
- return this.emit("error", er);
- }
- this[ONREADLINK](linkpath);
- });
- }
- [ONREADLINK](linkpath) {
- this.linkpath = normPath(linkpath);
- this[HEADER]();
- this.end();
- }
- [HARDLINK](linkpath) {
- this.type = "Link";
- this.linkpath = normPath(path10.relative(this.cwd, linkpath));
- this.stat.size = 0;
- this[HEADER]();
- this.end();
- }
- [FILE]() {
- if (this.stat.nlink > 1) {
- const linkKey = this.stat.dev + ":" + this.stat.ino;
- if (this.linkCache.has(linkKey)) {
- const linkpath = this.linkCache.get(linkKey);
- if (linkpath.indexOf(this.cwd) === 0) {
- return this[HARDLINK](linkpath);
- }
- }
- this.linkCache.set(linkKey, this.absolute);
- }
- this[HEADER]();
- if (this.stat.size === 0) {
- return this.end();
- }
- this[OPENFILE]();
- }
- [OPENFILE]() {
- fs8.open(this.absolute, "r", (er, fd) => {
- if (er) {
- return this.emit("error", er);
- }
- this[ONOPENFILE](fd);
- });
- }
- [ONOPENFILE](fd) {
- this.fd = fd;
- if (this[HAD_ERROR]) {
- return this[CLOSE]();
- }
- 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[READ]();
- }
- [READ]() {
- const { fd, buf, offset, length, pos } = this;
- fs8.read(fd, buf, offset, length, pos, (er, bytesRead) => {
- if (er) {
- return this[CLOSE](() => this.emit("error", er));
- }
- this[ONREAD](bytesRead);
- });
- }
- [CLOSE](cb) {
- fs8.close(this.fd, cb);
- }
- [ONREAD](bytesRead) {
- if (bytesRead <= 0 && this.remain > 0) {
- const er = new Error("encountered unexpected EOF");
- er.path = this.absolute;
- er.syscall = "read";
- er.code = "EOF";
- return this[CLOSE](() => this.emit("error", er));
- }
- if (bytesRead > this.remain) {
- const er = new Error("did not encounter expected EOF");
- er.path = this.absolute;
- er.syscall = "read";
- er.code = "EOF";
- return this[CLOSE](() => this.emit("error", er));
- }
- 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 writeBuf = this.offset === 0 && bytesRead === this.buf.length ? this.buf : this.buf.slice(this.offset, this.offset + bytesRead);
- const flushed = this.write(writeBuf);
- if (!flushed) {
- this[AWAITDRAIN](() => this[ONDRAIN]());
- } else {
- this[ONDRAIN]();
- }
- }
- [AWAITDRAIN](cb) {
- this.once("drain", cb);
- }
- write(writeBuf) {
- if (this.blockRemain < writeBuf.length) {
- const er = new Error("writing more data than expected");
- er.path = this.absolute;
- return this.emit("error", er);
- }
- this.remain -= writeBuf.length;
- this.blockRemain -= writeBuf.length;
- this.pos += writeBuf.length;
- this.offset += writeBuf.length;
- return super.write(writeBuf);
- }
- [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.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[READ]();
- }
- });
- var WriteEntrySync = class extends WriteEntry {
- [LSTAT]() {
- this[ONLSTAT](fs8.lstatSync(this.absolute));
- }
- [SYMLINK]() {
- this[ONREADLINK](fs8.readlinkSync(this.absolute));
- }
- [OPENFILE]() {
- this[ONOPENFILE](fs8.openSync(this.absolute, "r"));
- }
- [READ]() {
- let threw = true;
- try {
- const { fd, buf, offset, length, pos } = this;
- const bytesRead = fs8.readSync(fd, buf, offset, length, pos);
- this[ONREAD](bytesRead);
- threw = false;
- } finally {
- if (threw) {
- try {
- this[CLOSE](() => {
- });
- } catch (er) {
- }
- }
- }
- }
- [AWAITDRAIN](cb) {
- cb();
- }
- [CLOSE](cb) {
- fs8.closeSync(this.fd);
- cb();
- }
- };
- var WriteEntryTar = warner(class WriteEntryTar extends Minipass {
- constructor(readEntry, opt) {
- opt = opt || {};
- super(opt);
- this.preservePaths = !!opt.preservePaths;
- this.portable = !!opt.portable;
- this.strict = !!opt.strict;
- this.noPax = !!opt.noPax;
- this.noMtime = !!opt.noMtime;
- this.readEntry = readEntry;
- this.type = readEntry.type;
- if (this.type === "Directory" && this.portable) {
- this.noMtime = true;
- }
- this.prefix = opt.prefix || null;
- this.path = normPath(readEntry.path);
- this.mode = this[MODE](readEntry.mode);
- this.uid = this.portable ? null : readEntry.uid;
- this.gid = this.portable ? null : readEntry.gid;
- this.uname = this.portable ? null : readEntry.uname;
- this.gname = this.portable ? null : readEntry.gname;
- this.size = readEntry.size;
- this.mtime = this.noMtime ? null : opt.mtime || readEntry.mtime;
- this.atime = this.portable ? null : readEntry.atime;
- this.ctime = this.portable ? null : readEntry.ctime;
- this.linkpath = normPath(readEntry.linkpath);
- if (typeof opt.onwarn === "function") {
- this.on("warn", opt.onwarn);
- }
- let pathWarn = false;
- if (!this.preservePaths) {
- const [root, stripped] = stripAbsolutePath(this.path);
- if (root) {
- this.path = stripped;
- pathWarn = root;
- }
- }
- this.remain = readEntry.size;
- this.blockRemain = readEntry.startBlockSize;
- this.header = new Header({
- path: this[PREFIX](this.path),
- linkpath: this.type === "Link" ? 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 ? null : this.uid,
- gid: this.portable ? null : this.gid,
- size: this.size,
- mtime: this.noMtime ? null : this.mtime,
- type: this.type,
- uname: this.portable ? null : this.uname,
- atime: this.portable ? null : this.atime,
- ctime: this.portable ? null : 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 ? null : this.atime,
- ctime: this.portable ? null : this.ctime,
- gid: this.portable ? null : this.gid,
- mtime: this.noMtime ? null : this.mtime,
- path: this[PREFIX](this.path),
- linkpath: this.type === "Link" ? this[PREFIX](this.linkpath) : this.linkpath,
- size: this.size,
- uid: this.portable ? null : this.uid,
- uname: this.portable ? null : this.uname,
- dev: this.portable ? null : this.readEntry.dev,
- ino: this.portable ? null : this.readEntry.ino,
- nlink: this.portable ? null : this.readEntry.nlink
- }).encode());
- }
- super.write(this.header.block);
- readEntry.pipe(this);
- }
- [PREFIX](path11) {
- return prefixPath(path11, this.prefix);
- }
- [MODE](mode) {
- return modeFix(mode, this.type === "Directory", this.portable);
- }
- write(data) {
- const writeLen = data.length;
- if (writeLen > this.blockRemain) {
- throw new Error("writing more to entry than is appropriate");
- }
- this.blockRemain -= writeLen;
- return super.write(data);
- }
- end() {
- if (this.blockRemain) {
- super.write(Buffer.alloc(this.blockRemain));
- }
- return super.end();
- }
- });
- WriteEntry.Sync = WriteEntrySync;
- WriteEntry.Tar = WriteEntryTar;
- var getType = (stat) => stat.isFile() ? "File" : stat.isDirectory() ? "Directory" : stat.isSymbolicLink() ? "SymbolicLink" : "Unsupported";
- module2.exports = WriteEntry;
- }
-});
-
-// .yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/pack.js
-var require_pack = __commonJS({
- ".yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/pack.js"(exports, module2) {
- "use strict";
- var PackJob = class {
- constructor(path11, absolute) {
- this.path = path11 || "./";
- this.absolute = absolute;
- this.entry = null;
- this.stat = null;
- this.readdir = null;
- this.pending = false;
- this.ignore = false;
- this.piped = false;
- }
- };
- var { Minipass } = require_minipass();
- var zlib = require_minizlib();
- var ReadEntry = require_read_entry();
- var WriteEntry = require_write_entry();
- var WriteEntrySync = WriteEntry.Sync;
- var WriteEntryTar = WriteEntry.Tar;
- var Yallist = require_yallist();
- var EOF = Buffer.alloc(1024);
- var ONSTAT = Symbol("onStat");
- var ENDED = Symbol("ended");
- var QUEUE = Symbol("queue");
- var CURRENT = Symbol("current");
- var PROCESS = Symbol("process");
- var PROCESSING = Symbol("processing");
- var PROCESSJOB = Symbol("processJob");
- var JOBS = Symbol("jobs");
- var JOBDONE = Symbol("jobDone");
- var ADDFSENTRY = Symbol("addFSEntry");
- var ADDTARENTRY = Symbol("addTarEntry");
- var STAT = Symbol("stat");
- var READDIR = Symbol("readdir");
- var ONREADDIR = Symbol("onreaddir");
- var PIPE = Symbol("pipe");
- var ENTRY = Symbol("entry");
- var ENTRYOPT = Symbol("entryOpt");
- var WRITEENTRYCLASS = Symbol("writeEntryClass");
- var WRITE = Symbol("write");
- var ONDRAIN = Symbol("ondrain");
- var fs8 = require("fs");
- var path10 = require("path");
- var warner = require_warn_mixin();
- var normPath = require_normalize_windows_path();
- var Pack = warner(class Pack extends Minipass {
- constructor(opt) {
- super(opt);
- opt = opt || /* @__PURE__ */ Object.create(null);
- 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 = normPath(opt.prefix || "");
- this.linkCache = opt.linkCache || /* @__PURE__ */ new Map();
- this.statCache = opt.statCache || /* @__PURE__ */ new Map();
- this.readdirCache = opt.readdirCache || /* @__PURE__ */ new Map();
- this[WRITEENTRYCLASS] = WriteEntry;
- if (typeof opt.onwarn === "function") {
- this.on("warn", opt.onwarn);
- }
- this.portable = !!opt.portable;
- this.zip = null;
- if (opt.gzip || opt.brotli) {
- if (opt.gzip && opt.brotli) {
- throw new TypeError("gzip and brotli are mutually exclusive");
- }
- if (opt.gzip) {
- if (typeof opt.gzip !== "object") {
- opt.gzip = {};
- }
- if (this.portable) {
- opt.gzip.portable = true;
- }
- this.zip = new zlib.Gzip(opt.gzip);
- }
- if (opt.brotli) {
- if (typeof opt.brotli !== "object") {
- opt.brotli = {};
- }
- this.zip = new zlib.BrotliCompress(opt.brotli);
- }
- this.zip.on("data", (chunk) => super.write(chunk));
- this.zip.on("end", (_) => super.end());
- this.zip.on("drain", (_) => this[ONDRAIN]());
- this.on("resume", (_) => this.zip.resume());
- } else {
- this.on("drain", this[ONDRAIN]);
- }
- this.noDirRecurse = !!opt.noDirRecurse;
- this.follow = !!opt.follow;
- this.noMtime = !!opt.noMtime;
- this.mtime = opt.mtime || null;
- this.filter = typeof opt.filter === "function" ? opt.filter : (_) => true;
- this[QUEUE] = new Yallist();
- this[JOBS] = 0;
- this.jobs = +opt.jobs || 4;
- this[PROCESSING] = false;
- this[ENDED] = false;
- }
- [WRITE](chunk) {
- return super.write(chunk);
- }
- add(path11) {
- this.write(path11);
- return this;
- }
- end(path11) {
- if (path11) {
- this.write(path11);
- }
- this[ENDED] = true;
- this[PROCESS]();
- return this;
- }
- write(path11) {
- if (this[ENDED]) {
- throw new Error("write after end");
- }
- if (path11 instanceof ReadEntry) {
- this[ADDTARENTRY](path11);
- } else {
- this[ADDFSENTRY](path11);
- }
- return this.flowing;
- }
- [ADDTARENTRY](p) {
- const absolute = normPath(path10.resolve(this.cwd, p.path));
- if (!this.filter(p.path, p)) {
- p.resume();
- } else {
- const job = new PackJob(p.path, absolute, false);
- job.entry = new WriteEntryTar(p, this[ENTRYOPT](job));
- job.entry.on("end", (_) => this[JOBDONE](job));
- this[JOBS] += 1;
- this[QUEUE].push(job);
- }
- this[PROCESS]();
- }
- [ADDFSENTRY](p) {
- const absolute = normPath(path10.resolve(this.cwd, p));
- this[QUEUE].push(new PackJob(p, absolute));
- this[PROCESS]();
- }
- [STAT](job) {
- job.pending = true;
- this[JOBS] += 1;
- const stat = this.follow ? "stat" : "lstat";
- fs8[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;
- }
- this[PROCESS]();
- }
- [READDIR](job) {
- job.pending = true;
- this[JOBS] += 1;
- fs8.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[PROCESS]();
- }
- [PROCESS]() {
- if (this[PROCESSING]) {
- return;
- }
- this[PROCESSING] = true;
- for (let w = this[QUEUE].head; w !== null && this[JOBS] < this.jobs; w = w.next) {
- this[PROCESSJOB](w.value);
- if (w.value.ignore) {
- const p = w.next;
- this[QUEUE].removeNode(w);
- w.next = p;
- }
- }
- this[PROCESSING] = false;
- if (this[ENDED] && !this[QUEUE].length && this[JOBS] === 0) {
- if (this.zip) {
- this.zip.end(EOF);
- } else {
- super.write(EOF);
- super.end();
- }
- }
- }
- get [CURRENT]() {
- return this[QUEUE] && this[QUEUE].head && this[QUEUE].head.value;
- }
- [JOBDONE](job) {
- this[QUEUE].shift();
- this[JOBS] -= 1;
- this[PROCESS]();
- }
- [PROCESSJOB](job) {
- if (job.pending) {
- return;
- }
- if (job.entry) {
- if (job === this[CURRENT] && !job.piped) {
- this[PIPE](job);
- }
- return;
- }
- if (!job.stat) {
- if (this.statCache.has(job.absolute)) {
- this[ONSTAT](job, this.statCache.get(job.absolute));
- } else {
- this[STAT](job);
- }
- }
- if (!job.stat) {
- return;
- }
- if (job.ignore) {
- return;
- }
- if (!this.noDirRecurse && job.stat.isDirectory() && !job.readdir) {
- if (this.readdirCache.has(job.absolute)) {
- this[ONREADDIR](job, this.readdirCache.get(job.absolute));
- } 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: (code, msg, data) => this.warn(code, 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
- };
- }
- [ENTRY](job) {
- this[JOBS] += 1;
- try {
- return new this[WRITEENTRYCLASS](job.path, this[ENTRYOPT](job)).on("end", () => this[JOBDONE](job)).on("error", (er) => this.emit("error", er));
- } catch (er) {
- this.emit("error", er);
- }
- }
- [ONDRAIN]() {
- 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 (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();
- }
- });
- var PackSync = class extends Pack {
- 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, fs8[stat](job.absolute));
- }
- [READDIR](job, stat) {
- this[ONREADDIR](job, fs8.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 (zip) {
- source.on("data", (chunk) => {
- zip.write(chunk);
- });
- } else {
- source.on("data", (chunk) => {
- super[WRITE](chunk);
- });
- }
- }
- };
- Pack.Sync = PackSync;
- module2.exports = Pack;
- }
-});
-
-// .yarn/cache/fs-minipass-npm-2.1.0-501ef87306-703d16522b.zip/node_modules/fs-minipass/index.js
-var require_fs_minipass = __commonJS({
- ".yarn/cache/fs-minipass-npm-2.1.0-501ef87306-703d16522b.zip/node_modules/fs-minipass/index.js"(exports) {
- "use strict";
- var MiniPass = require_minipass2();
- var EE = require("events").EventEmitter;
- var fs8 = require("fs");
- var writev = fs8.writev;
- if (!writev) {
- const binding = process.binding("fs");
- const FSReqWrap = binding.FSReqWrap || binding.FSReqCallback;
- writev = (fd, iovec, pos, cb) => {
- const done = (er, bw) => cb(er, bw, iovec);
- const req = new FSReqWrap();
- req.oncomplete = done;
- binding.writeBuffers(fd, iovec, pos, req);
- };
- }
- var _autoClose = Symbol("_autoClose");
- var _close = Symbol("_close");
- var _ended = Symbol("_ended");
- var _fd = Symbol("_fd");
- var _finished = Symbol("_finished");
- var _flags = Symbol("_flags");
- var _flush = Symbol("_flush");
- var _handleChunk = Symbol("_handleChunk");
- var _makeBuf = Symbol("_makeBuf");
- var _mode = Symbol("_mode");
- var _needDrain = Symbol("_needDrain");
- var _onerror = Symbol("_onerror");
- var _onopen = Symbol("_onopen");
- var _onread = Symbol("_onread");
- var _onwrite = Symbol("_onwrite");
- var _open = Symbol("_open");
- var _path = Symbol("_path");
- var _pos = Symbol("_pos");
- var _queue = Symbol("_queue");
- var _read = Symbol("_read");
- var _readSize = Symbol("_readSize");
- var _reading = Symbol("_reading");
- var _remain = Symbol("_remain");
- var _size = Symbol("_size");
- var _write = Symbol("_write");
- var _writing = Symbol("_writing");
- var _defaultFlag = Symbol("_defaultFlag");
- var _errored = Symbol("_errored");
- var ReadStream = class extends MiniPass {
- constructor(path10, opt) {
- opt = opt || {};
- super(opt);
- this.readable = true;
- this.writable = false;
- if (typeof path10 !== "string")
- throw new TypeError("path must be a string");
- this[_errored] = false;
- this[_fd] = typeof opt.fd === "number" ? opt.fd : null;
- this[_path] = path10;
- 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];
- }
- write() {
- throw new TypeError("this is a readable stream");
- }
- end() {
- throw new TypeError("this is a readable stream");
- }
- [_open]() {
- fs8.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));
- fs8.read(this[_fd], buf, 0, buf.length, null, (er, br, buf2) => this[_onread](er, br, buf2));
- }
- }
- [_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] = null;
- fs8.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.slice(0, br) : buf);
- if (br === 0 || this[_remain] <= 0) {
- ret = false;
- this[_close]();
- super.end();
- }
- return ret;
- }
- emit(ev, data) {
- switch (ev) {
- case "prefinish":
- case "finish":
- break;
- case "drain":
- if (typeof this[_fd] === "number")
- this[_read]();
- break;
- case "error":
- if (this[_errored])
- return;
- this[_errored] = true;
- return super.emit(ev, data);
- default:
- return super.emit(ev, data);
- }
- }
- };
- var ReadStreamSync = class extends ReadStream {
- [_open]() {
- let threw = true;
- try {
- this[_onopen](null, fs8.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 : fs8.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] = null;
- fs8.closeSync(fd);
- this.emit("close");
- }
- }
- };
- var WriteStream = class extends EE {
- constructor(path10, opt) {
- opt = opt || {};
- super(opt);
- this.readable = false;
- this.writable = true;
- this[_errored] = false;
- this[_writing] = false;
- this[_ended] = false;
- this[_needDrain] = false;
- this[_queue] = [];
- this[_path] = path10;
- this[_fd] = typeof opt.fd === "number" ? opt.fd : null;
- this[_mode] = opt.mode === void 0 ? 438 : opt.mode;
- this[_pos] = typeof opt.start === "number" ? opt.start : null;
- this[_autoClose] = typeof opt.autoClose === "boolean" ? opt.autoClose : true;
- const defaultFlag = this[_pos] !== null ? "r+" : "w";
- this[_defaultFlag] = opt.flags === void 0;
- this[_flags] = this[_defaultFlag] ? defaultFlag : opt.flags;
- if (this[_fd] === null)
- this[_open]();
- }
- emit(ev, data) {
- if (ev === "error") {
- if (this[_errored])
- return;
- this[_errored] = true;
- }
- return super.emit(ev, data);
- }
- get fd() {
- return this[_fd];
- }
- get path() {
- return this[_path];
- }
- [_onerror](er) {
- this[_close]();
- this[_writing] = true;
- this.emit("error", er);
- }
- [_open]() {
- fs8.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);
- 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] === null || this[_writing] || this[_queue].length) {
- this[_queue].push(buf);
- this[_needDrain] = true;
- return false;
- }
- this[_writing] = true;
- this[_write](buf);
- return true;
- }
- [_write](buf) {
- fs8.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] !== null)
- 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] = null;
- fs8.close(fd, (er) => er ? this.emit("error", er) : this.emit("close"));
- }
- }
- };
- var WriteStreamSync = class extends WriteStream {
- [_open]() {
- let fd;
- if (this[_defaultFlag] && this[_flags] === "r+") {
- try {
- fd = fs8.openSync(this[_path], this[_flags], this[_mode]);
- } catch (er) {
- if (er.code === "ENOENT") {
- this[_flags] = "w";
- return this[_open]();
- } else
- throw er;
- }
- } else
- fd = fs8.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] = null;
- fs8.closeSync(fd);
- this.emit("close");
- }
- }
- [_write](buf) {
- let threw = true;
- try {
- this[_onwrite](
- null,
- fs8.writeSync(this[_fd], buf, 0, buf.length, this[_pos])
- );
- threw = false;
- } finally {
- if (threw)
- try {
- this[_close]();
- } catch (_) {
- }
- }
- }
- };
- exports.ReadStream = ReadStream;
- exports.ReadStreamSync = ReadStreamSync;
- exports.WriteStream = WriteStream;
- exports.WriteStreamSync = WriteStreamSync;
- }
-});
-
-// .yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/parse.js
-var require_parse2 = __commonJS({
- ".yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/parse.js"(exports, module2) {
- "use strict";
- var warner = require_warn_mixin();
- var Header = require_header();
- var EE = require("events");
- var Yallist = require_yallist();
- var maxMetaEntrySize = 1024 * 1024;
- var Entry = require_read_entry();
- var Pax = require_pax();
- var zlib = require_minizlib();
- var { nextTick } = require("process");
- var gzipHeader = Buffer.from([31, 139]);
- var STATE = Symbol("state");
- var WRITEENTRY = Symbol("writeEntry");
- var READENTRY = Symbol("readEntry");
- var NEXTENTRY = Symbol("nextEntry");
- var PROCESSENTRY = Symbol("processEntry");
- var EX = Symbol("extendedHeader");
- var GEX = Symbol("globalExtendedHeader");
- var META = Symbol("meta");
- var EMITMETA = Symbol("emitMeta");
- var BUFFER = Symbol("buffer");
- var QUEUE = Symbol("queue");
- var ENDED = Symbol("ended");
- var EMITTEDEND = Symbol("emittedEnd");
- var EMIT = Symbol("emit");
- var UNZIP = Symbol("unzip");
- var CONSUMECHUNK = Symbol("consumeChunk");
- var CONSUMECHUNKSUB = Symbol("consumeChunkSub");
- var CONSUMEBODY = Symbol("consumeBody");
- var CONSUMEMETA = Symbol("consumeMeta");
- var CONSUMEHEADER = Symbol("consumeHeader");
- var CONSUMING = Symbol("consuming");
- var BUFFERCONCAT = Symbol("bufferConcat");
- var MAYBEEND = Symbol("maybeEnd");
- var WRITING = Symbol("writing");
- var ABORTED = Symbol("aborted");
- var DONE = Symbol("onDone");
- var SAW_VALID_ENTRY = Symbol("sawValidEntry");
- var SAW_NULL_BLOCK = Symbol("sawNullBlock");
- var SAW_EOF = Symbol("sawEOF");
- var CLOSESTREAM = Symbol("closeStream");
- var noop = (_) => true;
- module2.exports = warner(class Parser extends EE {
- constructor(opt) {
- opt = opt || {};
- super(opt);
- this.file = opt.file || "";
- this[SAW_VALID_ENTRY] = null;
- 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 : noop;
- const isTBR = opt.file && (opt.file.endsWith(".tar.br") || opt.file.endsWith(".tbr"));
- this.brotli = !opt.gzip && opt.brotli !== void 0 ? opt.brotli : isTBR ? void 0 : false;
- this.writable = true;
- this.readable = false;
- this[QUEUE] = new Yallist();
- this[BUFFER] = null;
- this[READENTRY] = null;
- this[WRITEENTRY] = null;
- this[STATE] = "begin";
- this[META] = "";
- this[EX] = null;
- this[GEX] = null;
- this[ENDED] = false;
- this[UNZIP] = null;
- this[ABORTED] = false;
- this[SAW_NULL_BLOCK] = false;
- this[SAW_EOF] = false;
- this.on("end", () => this[CLOSESTREAM]());
- if (typeof opt.onwarn === "function") {
- this.on("warn", opt.onwarn);
- }
- if (typeof opt.onentry === "function") {
- this.on("entry", opt.onentry);
- }
- }
- [CONSUMEHEADER](chunk, position) {
- if (this[SAW_VALID_ENTRY] === null) {
- 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) && header.linkpath) {
- this.warn("TAR_ENTRY_INVALID", "linkpath forbidden", { header });
- } else {
- const entry = this[WRITEENTRY] = new Entry(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] = null;
- 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]() {
- nextTick(() => this.emit("close"));
- }
- [PROCESSENTRY](entry) {
- let go = true;
- if (!entry) {
- this[READENTRY] = null;
- go = false;
- } else if (Array.isArray(entry)) {
- this.emit.apply(this, entry);
- } 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) {
- 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];
- const br = entry.blockRemain;
- const c = br >= chunk.length && position === 0 ? chunk : chunk.slice(position, position + br);
- entry.write(c);
- if (!entry.blockRemain) {
- this[STATE] = "header";
- this[WRITEENTRY] = null;
- entry.end();
- }
- return c.length;
- }
- [CONSUMEMETA](chunk, position) {
- const entry = this[WRITEENTRY];
- const ret = this[CONSUMEBODY](chunk, position);
- if (!this[WRITEENTRY]) {
- this[EMITMETA](entry);
- }
- return ret;
- }
- [EMIT](ev, data, extra) {
- if (!this[QUEUE].length && !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":
- this[EX] = this[EX] || /* @__PURE__ */ Object.create(null);
- this[EX].path = this[META].replace(/\0.*/, "");
- break;
- case "NextFileHasLongLinkpath":
- this[EX] = this[EX] || /* @__PURE__ */ Object.create(null);
- this[EX].linkpath = this[META].replace(/\0.*/, "");
- break;
- default:
- throw new Error("unknown meta: " + entry.type);
- }
- }
- abort(error) {
- this[ABORTED] = true;
- this.emit("abort", error);
- this.warn("TAR_ABORT", error, { recoverable: false });
- }
- write(chunk) {
- if (this[ABORTED]) {
- return;
- }
- const needSniff = this[UNZIP] === null || this.brotli === void 0 && this[UNZIP] === false;
- if (needSniff && chunk) {
- if (this[BUFFER]) {
- chunk = Buffer.concat([this[BUFFER], chunk]);
- this[BUFFER] = null;
- }
- if (chunk.length < gzipHeader.length) {
- this[BUFFER] = chunk;
- return true;
- }
- for (let i = 0; this[UNZIP] === null && i < gzipHeader.length; i++) {
- if (chunk[i] !== gzipHeader[i]) {
- this[UNZIP] = false;
- }
- }
- const maybeBrotli = this.brotli === void 0;
- if (this[UNZIP] === false && maybeBrotli) {
- if (chunk.length < 512) {
- if (this[ENDED]) {
- this.brotli = true;
- } else {
- this[BUFFER] = chunk;
- return true;
- }
- } else {
- try {
- new Header(chunk.slice(0, 512));
- this.brotli = false;
- } catch (_) {
- this.brotli = true;
- }
- }
- }
- if (this[UNZIP] === null || this[UNZIP] === false && this.brotli) {
- const ended = this[ENDED];
- this[ENDED] = false;
- this[UNZIP] = this[UNZIP] === null ? new zlib.Unzip() : new zlib.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;
- return ret2;
- }
- }
- this[WRITING] = true;
- if (this[UNZIP]) {
- this[UNZIP].write(chunk);
- } else {
- this[CONSUMECHUNK](chunk);
- }
- this[WRITING] = false;
- const ret = this[QUEUE].length ? false : this[READENTRY] ? this[READENTRY].flowing : true;
- if (!ret && !this[QUEUE].length) {
- this[READENTRY].once("drain", (_) => this.emit("drain"));
- }
- return ret;
- }
- [BUFFERCONCAT](c) {
- if (c && !this[ABORTED]) {
- this[BUFFER] = this[BUFFER] ? Buffer.concat([this[BUFFER], c]) : c;
- }
- }
- [MAYBEEND]() {
- if (this[ENDED] && !this[EMITTEDEND] && !this[ABORTED] && !this[CONSUMING]) {
- this[EMITTEDEND] = true;
- const entry = this[WRITEENTRY];
- if (entry && entry.blockRemain) {
- const have = this[BUFFER] ? this[BUFFER].length : 0;
- this.warn("TAR_BAD_ARCHIVE", `Truncated input (needed ${entry.blockRemain} more bytes, only ${have} available)`, { entry });
- if (this[BUFFER]) {
- entry.write(this[BUFFER]);
- }
- entry.end();
- }
- this[EMIT](DONE);
- }
- }
- [CONSUMECHUNK](chunk) {
- if (this[CONSUMING]) {
- this[BUFFERCONCAT](chunk);
- } else if (!chunk && !this[BUFFER]) {
- this[MAYBEEND]();
- } else {
- this[CONSUMING] = true;
- if (this[BUFFER]) {
- this[BUFFERCONCAT](chunk);
- const c = this[BUFFER];
- this[BUFFER] = null;
- this[CONSUMECHUNKSUB](c);
- } else {
- this[CONSUMECHUNKSUB](chunk);
- }
- while (this[BUFFER] && this[BUFFER].length >= 512 && !this[ABORTED] && !this[SAW_EOF]) {
- const c = this[BUFFER];
- this[BUFFER] = null;
- this[CONSUMECHUNKSUB](c);
- }
- this[CONSUMING] = false;
- }
- if (!this[BUFFER] || this[ENDED]) {
- this[MAYBEEND]();
- }
- }
- [CONSUMECHUNKSUB](chunk) {
- let position = 0;
- const length = chunk.length;
- while (position + 512 <= length && !this[ABORTED] && !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;
- default:
- throw new Error("invalid state: " + this[STATE]);
- }
- }
- if (position < length) {
- if (this[BUFFER]) {
- this[BUFFER] = Buffer.concat([chunk.slice(position), this[BUFFER]]);
- } else {
- this[BUFFER] = chunk.slice(position);
- }
- }
- }
- end(chunk) {
- if (!this[ABORTED]) {
- if (this[UNZIP]) {
- this[UNZIP].end(chunk);
- } else {
- this[ENDED] = true;
- if (this.brotli === void 0)
- chunk = chunk || Buffer.alloc(0);
- this.write(chunk);
- }
- }
- }
- });
+ });
}
});
@@ -37410,7 +17286,7 @@ var require_list = __commonJS({
"use strict";
var hlo = require_high_level_opt();
var Parser = require_parse2();
- var fs8 = require("fs");
+ var fs9 = require("fs");
var fsm = require_fs_minipass();
var path10 = require("path");
var stripSlash = require_strip_trailing_slashes();
@@ -37467,16 +17343,16 @@ var require_list = __commonJS({
let threw = true;
let fd;
try {
- const stat = fs8.statSync(file);
+ const stat = fs9.statSync(file);
const readSize = opt.maxReadSize || 16 * 1024 * 1024;
if (stat.size < readSize) {
- p.end(fs8.readFileSync(file));
+ p.end(fs9.readFileSync(file));
} else {
let pos = 0;
const buf = Buffer.allocUnsafe(readSize);
- fd = fs8.openSync(file, "r");
+ fd = fs9.openSync(file, "r");
while (pos < stat.size) {
- const bytesRead = fs8.readSync(fd, buf, 0, readSize, pos);
+ const bytesRead = fs9.readSync(fd, buf, 0, readSize, pos);
pos += bytesRead;
p.write(buf.slice(0, bytesRead));
}
@@ -37486,7 +17362,7 @@ var require_list = __commonJS({
} finally {
if (threw && fd) {
try {
- fs8.closeSync(fd);
+ fs9.closeSync(fd);
} catch (er) {
}
}
@@ -37499,7 +17375,7 @@ var require_list = __commonJS({
const p = new Promise((resolve, reject) => {
parse.on("error", reject);
parse.on("end", resolve);
- fs8.stat(file, (er, stat) => {
+ fs9.stat(file, (er, stat) => {
if (er) {
reject(er);
} else {
@@ -37618,7 +17494,7 @@ var require_replace = __commonJS({
"use strict";
var hlo = require_high_level_opt();
var Pack = require_pack();
- var fs8 = require("fs");
+ var fs9 = require("fs");
var fsm = require_fs_minipass();
var t = require_list();
var path10 = require("path");
@@ -37644,20 +17520,20 @@ var require_replace = __commonJS({
let position;
try {
try {
- fd = fs8.openSync(opt.file, "r+");
+ fd = fs9.openSync(opt.file, "r+");
} catch (er) {
if (er.code === "ENOENT") {
- fd = fs8.openSync(opt.file, "w+");
+ fd = fs9.openSync(opt.file, "w+");
} else {
throw er;
}
}
- const st = fs8.fstatSync(fd);
+ const st = fs9.fstatSync(fd);
const headBuf = Buffer.alloc(512);
POSITION:
for (position = 0; position < st.size; position += 512) {
for (let bufPos = 0, bytes = 0; bufPos < 512; bufPos += bytes) {
- bytes = fs8.readSync(
+ bytes = fs9.readSync(
fd,
headBuf,
bufPos,
@@ -37689,7 +17565,7 @@ var require_replace = __commonJS({
} finally {
if (threw) {
try {
- fs8.closeSync(fd);
+ fs9.closeSync(fd);
} catch (er) {
}
}
@@ -37709,7 +17585,7 @@ var require_replace = __commonJS({
const getPos = (fd, size, cb_) => {
const cb2 = (er, pos) => {
if (er) {
- fs8.close(fd, (_) => cb_(er));
+ fs9.close(fd, (_) => cb_(er));
} else {
cb_(null, pos);
}
@@ -37726,7 +17602,7 @@ var require_replace = __commonJS({
}
bufPos += bytes;
if (bufPos < 512 && bytes) {
- return fs8.read(
+ return fs9.read(
fd,
headBuf,
bufPos,
@@ -37757,9 +17633,9 @@ var require_replace = __commonJS({
opt.mtimeCache.set(h.path, h.mtime);
}
bufPos = 0;
- fs8.read(fd, headBuf, 0, 512, position, onread);
+ fs9.read(fd, headBuf, 0, 512, position, onread);
};
- fs8.read(fd, headBuf, 0, 512, position, onread);
+ fs9.read(fd, headBuf, 0, 512, position, onread);
};
const promise = new Promise((resolve, reject) => {
p.on("error", reject);
@@ -37767,14 +17643,14 @@ var require_replace = __commonJS({
const onopen = (er, fd) => {
if (er && er.code === "ENOENT" && flag === "r+") {
flag = "w+";
- return fs8.open(opt.file, flag, onopen);
+ return fs9.open(opt.file, flag, onopen);
}
if (er) {
return reject(er);
}
- fs8.fstat(fd, (er2, st) => {
+ fs9.fstat(fd, (er2, st) => {
if (er2) {
- return fs8.close(fd, () => reject(er2));
+ return fs9.close(fd, () => reject(er2));
}
getPos(fd, st.size, (er3, position) => {
if (er3) {
@@ -37791,7 +17667,7 @@ var require_replace = __commonJS({
});
});
};
- fs8.open(opt.file, flag, onopen);
+ fs9.open(opt.file, flag, onopen);
});
return cb ? promise.then(cb, cb) : promise;
};
@@ -37863,24 +17739,24 @@ var require_update = __commonJS({
var require_opts_arg = __commonJS({
".yarn/cache/mkdirp-npm-1.0.4-37f6ef56b9-46ea0f3ffa.zip/node_modules/mkdirp/lib/opts-arg.js"(exports, module2) {
var { promisify } = require("util");
- var fs8 = require("fs");
+ var fs9 = require("fs");
var optsArg = (opts) => {
if (!opts)
- opts = { mode: 511, fs: fs8 };
+ opts = { mode: 511, fs: fs9 };
else if (typeof opts === "object")
- opts = { mode: 511, fs: fs8, ...opts };
+ opts = { mode: 511, fs: fs9, ...opts };
else if (typeof opts === "number")
- opts = { mode: opts, fs: fs8 };
+ opts = { mode: opts, fs: fs9 };
else if (typeof opts === "string")
- opts = { mode: parseInt(opts, 8), fs: fs8 };
+ opts = { mode: parseInt(opts, 8), fs: fs9 };
else
throw new TypeError("invalid options argument");
- opts.mkdir = opts.mkdir || opts.fs.mkdir || fs8.mkdir;
+ opts.mkdir = opts.mkdir || opts.fs.mkdir || fs9.mkdir;
opts.mkdirAsync = promisify(opts.mkdir);
- opts.stat = opts.stat || opts.fs.stat || fs8.stat;
+ opts.stat = opts.stat || opts.fs.stat || fs9.stat;
opts.statAsync = promisify(opts.stat);
- opts.statSync = opts.statSync || opts.fs.statSync || fs8.statSync;
- opts.mkdirSync = opts.mkdirSync || opts.fs.mkdirSync || fs8.mkdirSync;
+ opts.statSync = opts.statSync || opts.fs.statSync || fs9.statSync;
+ opts.mkdirSync = opts.mkdirSync || opts.fs.mkdirSync || fs9.mkdirSync;
return opts;
};
module2.exports = optsArg;
@@ -38047,12 +17923,12 @@ var require_mkdirp_native = __commonJS({
// .yarn/cache/mkdirp-npm-1.0.4-37f6ef56b9-46ea0f3ffa.zip/node_modules/mkdirp/lib/use-native.js
var require_use_native = __commonJS({
".yarn/cache/mkdirp-npm-1.0.4-37f6ef56b9-46ea0f3ffa.zip/node_modules/mkdirp/lib/use-native.js"(exports, module2) {
- var fs8 = require("fs");
+ var fs9 = require("fs");
var version2 = process.env.__TESTING_MKDIRP_NODE_VERSION__ || process.version;
var versArr = version2.replace(/^v/, "").split(".");
var hasNative = +versArr[0] > 10 || +versArr[0] === 10 && +versArr[1] >= 12;
- var useNative = !hasNative ? () => false : (opts) => opts.mkdir === fs8.mkdir;
- var useNativeSync = !hasNative ? () => false : (opts) => opts.mkdirSync === fs8.mkdirSync;
+ var useNative = !hasNative ? () => false : (opts) => opts.mkdir === fs9.mkdir;
+ var useNativeSync = !hasNative ? () => false : (opts) => opts.mkdirSync === fs9.mkdirSync;
module2.exports = { useNative, useNativeSync };
}
});
@@ -38088,14 +17964,14 @@ var require_mkdirp = __commonJS({
var require_chownr = __commonJS({
".yarn/cache/chownr-npm-2.0.0-638f1c9c61-594754e130.zip/node_modules/chownr/chownr.js"(exports, module2) {
"use strict";
- var fs8 = require("fs");
+ var fs9 = require("fs");
var path10 = require("path");
- var LCHOWN = fs8.lchown ? "lchown" : "chown";
- var LCHOWNSYNC = fs8.lchownSync ? "lchownSync" : "chownSync";
- var needEISDIRHandled = fs8.lchown && !process.version.match(/v1[1-9]+\./) && !process.version.match(/v10\.[6-9]/);
+ var LCHOWN = fs9.lchown ? "lchown" : "chown";
+ var LCHOWNSYNC = fs9.lchownSync ? "lchownSync" : "chownSync";
+ var needEISDIRHandled = fs9.lchown && !process.version.match(/v1[1-9]+\./) && !process.version.match(/v10\.[6-9]/);
var lchownSync = (path11, uid, gid) => {
try {
- return fs8[LCHOWNSYNC](path11, uid, gid);
+ return fs9[LCHOWNSYNC](path11, uid, gid);
} catch (er) {
if (er.code !== "ENOENT")
throw er;
@@ -38103,7 +17979,7 @@ var require_chownr = __commonJS({
};
var chownSync = (path11, uid, gid) => {
try {
- return fs8.chownSync(path11, uid, gid);
+ return fs9.chownSync(path11, uid, gid);
} catch (er) {
if (er.code !== "ENOENT")
throw er;
@@ -38113,7 +17989,7 @@ var require_chownr = __commonJS({
if (!er || er.code !== "EISDIR")
cb(er);
else
- fs8.chown(path11, uid, gid, cb);
+ fs9.chown(path11, uid, gid, cb);
} : (_, __, ___, cb) => cb;
var handleEISDirSync = needEISDIRHandled ? (path11, uid, gid) => {
try {
@@ -38125,18 +18001,18 @@ var require_chownr = __commonJS({
}
} : (path11, uid, gid) => lchownSync(path11, uid, gid);
var nodeVersion = process.version;
- var readdir = (path11, options, cb) => fs8.readdir(path11, options, cb);
- var readdirSync = (path11, options) => fs8.readdirSync(path11, options);
+ var readdir = (path11, options, cb) => fs9.readdir(path11, options, cb);
+ var readdirSync = (path11, options) => fs9.readdirSync(path11, options);
if (/^v4\./.test(nodeVersion))
- readdir = (path11, options, cb) => fs8.readdir(path11, cb);
+ readdir = (path11, options, cb) => fs9.readdir(path11, cb);
var chown = (cpath, uid, gid, cb) => {
- fs8[LCHOWN](cpath, uid, gid, handleEISDIR(cpath, uid, gid, (er) => {
+ fs9[LCHOWN](cpath, uid, gid, handleEISDIR(cpath, uid, gid, (er) => {
cb(er && er.code !== "ENOENT" ? er : null);
}));
};
var chownrKid = (p, child, uid, gid, cb) => {
if (typeof child === "string")
- return fs8.lstat(path10.resolve(p, child), (er, stats) => {
+ return fs9.lstat(path10.resolve(p, child), (er, stats) => {
if (er)
return cb(er.code !== "ENOENT" ? er : null);
stats.name = child;
@@ -38180,7 +18056,7 @@ var require_chownr = __commonJS({
var chownrKidSync = (p, child, uid, gid) => {
if (typeof child === "string") {
try {
- const stats = fs8.lstatSync(path10.resolve(p, child));
+ const stats = fs9.lstatSync(path10.resolve(p, child));
stats.name = child;
child = stats;
} catch (er) {
@@ -38220,7 +18096,7 @@ var require_mkdir = __commonJS({
".yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/mkdir.js"(exports, module2) {
"use strict";
var mkdirp = require_mkdirp();
- var fs8 = require("fs");
+ var fs9 = require("fs");
var path10 = require("path");
var chownr = require_chownr();
var normPath = require_normalize_windows_path();
@@ -38247,7 +18123,7 @@ var require_mkdir = __commonJS({
var cGet = (cache, key) => cache.get(normPath(key));
var cSet = (cache, key, val) => cache.set(normPath(key), val);
var checkCwd = (dir, cb) => {
- fs8.stat(dir, (er, st) => {
+ fs9.stat(dir, (er, st) => {
if (er || !st.isDirectory()) {
er = new CwdError(dir, er && er.code || "ENOTDIR");
}
@@ -38274,7 +18150,7 @@ var require_mkdir = __commonJS({
if (created && doChown) {
chownr(created, uid, gid, (er2) => done(er2));
} else if (needChmod) {
- fs8.chmod(dir, mode, cb);
+ fs9.chmod(dir, mode, cb);
} else {
cb();
}
@@ -38302,22 +18178,22 @@ var require_mkdir = __commonJS({
if (cGet(cache, part)) {
return mkdir_(part, parts, mode, cache, unlink, cwd, created, cb);
}
- fs8.mkdir(part, mode, onmkdir(part, parts, mode, cache, unlink, cwd, created, cb));
+ fs9.mkdir(part, mode, onmkdir(part, parts, mode, cache, unlink, cwd, created, cb));
};
var onmkdir = (part, parts, mode, cache, unlink, cwd, created, cb) => (er) => {
if (er) {
- fs8.lstat(part, (statEr, st) => {
+ fs9.lstat(part, (statEr, st) => {
if (statEr) {
statEr.path = statEr.path && normPath(statEr.path);
cb(statEr);
} else if (st.isDirectory()) {
mkdir_(part, parts, mode, cache, unlink, cwd, created, cb);
} else if (unlink) {
- fs8.unlink(part, (er2) => {
+ fs9.unlink(part, (er2) => {
if (er2) {
return cb(er2);
}
- fs8.mkdir(part, mode, onmkdir(part, parts, mode, cache, unlink, cwd, created, cb));
+ fs9.mkdir(part, mode, onmkdir(part, parts, mode, cache, unlink, cwd, created, cb));
});
} else if (st.isSymbolicLink()) {
return cb(new SymlinkError(part, part + "/" + parts.join("/")));
@@ -38334,7 +18210,7 @@ var require_mkdir = __commonJS({
let ok = false;
let code = "ENOTDIR";
try {
- ok = fs8.statSync(dir).isDirectory();
+ ok = fs9.statSync(dir).isDirectory();
} catch (er) {
code = er.code;
} finally {
@@ -38361,7 +18237,7 @@ var require_mkdir = __commonJS({
chownr.sync(created2, uid, gid);
}
if (needChmod) {
- fs8.chmodSync(dir, mode);
+ fs9.chmodSync(dir, mode);
}
};
if (cache && cGet(cache, dir) === true) {
@@ -38383,17 +18259,17 @@ var require_mkdir = __commonJS({
continue;
}
try {
- fs8.mkdirSync(part, mode);
+ fs9.mkdirSync(part, mode);
created = created || part;
cSet(cache, part, true);
} catch (er) {
- const st = fs8.lstatSync(part);
+ const st = fs9.lstatSync(part);
if (st.isDirectory()) {
cSet(cache, part, true);
continue;
} else if (unlink) {
- fs8.unlinkSync(part);
- fs8.mkdirSync(part, mode);
+ fs9.unlinkSync(part);
+ fs9.mkdirSync(part, mode);
created = created || part;
cSet(cache, part, true);
continue;
@@ -38424,7 +18300,7 @@ var require_normalize_unicode = __commonJS({
// .yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/path-reservations.js
var require_path_reservations = __commonJS({
".yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/path-reservations.js"(exports, module2) {
- var assert2 = require("assert");
+ var assert3 = require("assert");
var normalize = require_normalize_unicode();
var stripSlashes = require_strip_trailing_slashes();
var { join: join2 } = require("path");
@@ -38474,7 +18350,7 @@ var require_path_reservations = __commonJS({
const next = /* @__PURE__ */ new Set();
paths.forEach((path10) => {
const q = queues.get(path10);
- assert2.equal(q[0], fn2);
+ assert3.equal(q[0], fn2);
if (q.length === 1) {
queues.delete(path10);
} else {
@@ -38488,7 +18364,7 @@ var require_path_reservations = __commonJS({
});
dirs.forEach((dir) => {
const q = queues.get(dir);
- assert2(q[0] instanceof Set);
+ assert3(q[0] instanceof Set);
if (q[0].size === 1 && q.length === 1) {
queues.delete(dir);
} else if (q[0].size === 1) {
@@ -38540,8 +18416,8 @@ var require_get_write_flag = __commonJS({
".yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/get-write-flag.js"(exports, module2) {
var platform = process.env.__FAKE_PLATFORM__ || process.platform;
var isWindows = platform === "win32";
- var fs8 = global.__FAKE_TESTING_FS__ || require("fs");
- var { O_CREAT, O_TRUNC, O_WRONLY, UV_FS_O_FILEMAP = 0 } = fs8.constants;
+ var fs9 = global.__FAKE_TESTING_FS__ || require("fs");
+ var { O_CREAT, O_TRUNC, O_WRONLY, UV_FS_O_FILEMAP = 0 } = fs9.constants;
var fMapEnabled = isWindows && !!UV_FS_O_FILEMAP;
var fMapLimit = 512 * 1024;
var fMapFlag = UV_FS_O_FILEMAP | O_TRUNC | O_CREAT | O_WRONLY;
@@ -38553,9 +18429,9 @@ var require_get_write_flag = __commonJS({
var require_unpack = __commonJS({
".yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/unpack.js"(exports, module2) {
"use strict";
- var assert2 = require("assert");
+ var assert3 = require("assert");
var Parser = require_parse2();
- var fs8 = require("fs");
+ var fs9 = require("fs");
var fsm = require_fs_minipass();
var path10 = require("path");
var mkdir4 = require_mkdir();
@@ -38596,23 +18472,23 @@ var require_unpack = __commonJS({
var isWindows = platform === "win32";
var unlinkFile = (path11, cb) => {
if (!isWindows) {
- return fs8.unlink(path11, cb);
+ return fs9.unlink(path11, cb);
}
const name = path11 + ".DELETE." + crypto.randomBytes(16).toString("hex");
- fs8.rename(path11, name, (er) => {
+ fs9.rename(path11, name, (er) => {
if (er) {
return cb(er);
}
- fs8.unlink(name, cb);
+ fs9.unlink(name, cb);
});
};
var unlinkFileSync = (path11) => {
if (!isWindows) {
- return fs8.unlinkSync(path11);
+ return fs9.unlinkSync(path11);
}
const name = path11 + ".DELETE." + crypto.randomBytes(16).toString("hex");
- fs8.renameSync(path11, name);
- fs8.unlinkSync(name);
+ fs9.renameSync(path11, name);
+ fs9.unlinkSync(name);
};
var uint32 = (a, b, c) => a === a >>> 0 ? a : b === b >>> 0 ? b : c;
var cacheKeyNormalize = (path11) => stripSlash(normPath(normalize(path11))).toLowerCase();
@@ -38767,7 +18643,7 @@ var require_unpack = __commonJS({
if (!this[CHECKPATH](entry)) {
return entry.resume();
}
- assert2.equal(typeof entry.absolute, "string");
+ assert3.equal(typeof entry.absolute, "string");
switch (entry.type) {
case "Directory":
case "GNUDumpDir":
@@ -38829,7 +18705,7 @@ var require_unpack = __commonJS({
});
stream.on("error", (er) => {
if (stream.fd) {
- fs8.close(stream.fd, () => {
+ fs9.close(stream.fd, () => {
});
}
stream.write = () => true;
@@ -38840,7 +18716,7 @@ var require_unpack = __commonJS({
const done = (er) => {
if (er) {
if (stream.fd) {
- fs8.close(stream.fd, () => {
+ fs9.close(stream.fd, () => {
});
}
this[ONERROR](er, entry);
@@ -38848,7 +18724,7 @@ var require_unpack = __commonJS({
return;
}
if (--actions === 0) {
- fs8.close(stream.fd, (er2) => {
+ fs9.close(stream.fd, (er2) => {
if (er2) {
this[ONERROR](er2, entry);
} else {
@@ -38865,13 +18741,13 @@ var require_unpack = __commonJS({
actions++;
const atime = entry.atime || /* @__PURE__ */ new Date();
const mtime = entry.mtime;
- fs8.futimes(fd, atime, mtime, (er) => er ? fs8.utimes(abs, atime, mtime, (er2) => done(er2 && er)) : done());
+ fs9.futimes(fd, atime, mtime, (er) => er ? fs9.utimes(abs, atime, mtime, (er2) => done(er2 && er)) : done());
}
if (this[DOCHOWN](entry)) {
actions++;
const uid = this[UID](entry);
const gid = this[GID](entry);
- fs8.fchown(fd, uid, gid, (er) => er ? fs8.chown(abs, uid, gid, (er2) => done(er2 && er)) : done());
+ fs9.fchown(fd, uid, gid, (er) => er ? fs9.chown(abs, uid, gid, (er2) => done(er2 && er)) : done());
}
done();
});
@@ -38903,11 +18779,11 @@ var require_unpack = __commonJS({
};
if (entry.mtime && !this.noMtime) {
actions++;
- fs8.utimes(entry.absolute, entry.atime || /* @__PURE__ */ new Date(), entry.mtime, done);
+ fs9.utimes(entry.absolute, entry.atime || /* @__PURE__ */ new Date(), entry.mtime, done);
}
if (this[DOCHOWN](entry)) {
actions++;
- fs8.chown(entry.absolute, this[UID](entry), this[GID](entry), done);
+ fs9.chown(entry.absolute, this[UID](entry), this[GID](entry), done);
}
done();
});
@@ -38995,7 +18871,7 @@ var require_unpack = __commonJS({
afterMakeParent();
};
const afterMakeParent = () => {
- fs8.lstat(entry.absolute, (lstatEr, st) => {
+ fs9.lstat(entry.absolute, (lstatEr, st) => {
if (st && (this.keep || this.newer && st.mtime > entry.mtime)) {
this[SKIP](entry);
done();
@@ -39011,10 +18887,10 @@ var require_unpack = __commonJS({
if (!needChmod) {
return afterChmod();
}
- return fs8.chmod(entry.absolute, entry.mode, afterChmod);
+ return fs9.chmod(entry.absolute, entry.mode, afterChmod);
}
if (entry.absolute !== this.cwd) {
- return fs8.rmdir(entry.absolute, (er) => this[MAKEFS](er, entry, done));
+ return fs9.rmdir(entry.absolute, (er) => this[MAKEFS](er, entry, done));
}
}
if (entry.absolute === this.cwd) {
@@ -39049,861 +18925,1669 @@ var require_unpack = __commonJS({
return this[DIRECTORY](entry, done);
}
}
- [LINK](entry, linkpath, link, done) {
- fs8[link](linkpath, entry.absolute, (er) => {
+ [LINK](entry, linkpath, link, done) {
+ fs9[link](linkpath, entry.absolute, (er) => {
+ if (er) {
+ this[ONERROR](er, entry);
+ } else {
+ this[UNPEND]();
+ entry.resume();
+ }
+ done();
+ });
+ }
+ };
+ var callSync = (fn2) => {
+ try {
+ return [null, fn2()];
+ } catch (er) {
+ return [er, null];
+ }
+ };
+ var UnpackSync = class extends Unpack {
+ [MAKEFS](er, entry) {
+ return super[MAKEFS](er, entry, () => {
+ });
+ }
+ [CHECKFS](entry) {
+ this[PRUNECACHE](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 = normPath(path10.dirname(entry.absolute));
+ if (parent !== this.cwd) {
+ const mkParent = this[MKDIR](parent, this.dmode);
+ if (mkParent) {
+ return this[ONERROR](mkParent, entry);
+ }
+ }
+ }
+ const [lstatEr, st] = callSync(() => fs9.lstatSync(entry.absolute));
+ if (st && (this.keep || this.newer && st.mtime > entry.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.noChmod && entry.mode && (st.mode & 4095) !== entry.mode;
+ const [er3] = needChmod ? callSync(() => {
+ fs9.chmodSync(entry.absolute, entry.mode);
+ }) : [];
+ return this[MAKEFS](er3, entry);
+ }
+ const [er2] = callSync(() => fs9.rmdirSync(entry.absolute));
+ this[MAKEFS](er2, entry);
+ }
+ const [er] = entry.absolute === this.cwd ? [] : callSync(() => unlinkFileSync(entry.absolute));
+ this[MAKEFS](er, entry);
+ }
+ [FILE](entry, done) {
+ const mode = entry.mode & 4095 || this.fmode;
+ const oner = (er) => {
+ let closeError;
+ try {
+ fs9.closeSync(fd);
+ } catch (e) {
+ closeError = e;
+ }
+ if (er || closeError) {
+ this[ONERROR](er || closeError, entry);
+ }
+ done();
+ };
+ let fd;
+ try {
+ fd = fs9.openSync(entry.absolute, getFlag(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 {
+ fs9.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 {
+ fs9.futimesSync(fd, atime, mtime);
+ } catch (futimeser) {
+ try {
+ fs9.utimesSync(entry.absolute, atime, mtime);
+ } catch (utimeser) {
+ er = futimeser;
+ }
+ }
+ }
+ if (this[DOCHOWN](entry)) {
+ const uid = this[UID](entry);
+ const gid = this[GID](entry);
+ try {
+ fs9.fchownSync(fd, uid, gid);
+ } catch (fchowner) {
+ try {
+ fs9.chownSync(entry.absolute, uid, gid);
+ } catch (chowner) {
+ er = er || fchowner;
+ }
+ }
+ }
+ oner(er);
+ });
+ }
+ [DIRECTORY](entry, done) {
+ const mode = entry.mode & 4095 || this.dmode;
+ const er = this[MKDIR](entry.absolute, mode);
+ if (er) {
+ this[ONERROR](er, entry);
+ done();
+ return;
+ }
+ if (entry.mtime && !this.noMtime) {
+ try {
+ fs9.utimesSync(entry.absolute, entry.atime || /* @__PURE__ */ new Date(), entry.mtime);
+ } catch (er2) {
+ }
+ }
+ if (this[DOCHOWN](entry)) {
+ try {
+ fs9.chownSync(entry.absolute, this[UID](entry), this[GID](entry));
+ } catch (er2) {
+ }
+ }
+ done();
+ entry.resume();
+ }
+ [MKDIR](dir, mode) {
+ try {
+ return mkdir4.sync(normPath(dir), {
+ uid: this.uid,
+ gid: this.gid,
+ processUid: this.processUid,
+ processGid: this.processGid,
+ umask: this.processUmask,
+ preserve: this.preservePaths,
+ unlink: this.unlink,
+ cache: this.dirCache,
+ cwd: this.cwd,
+ mode
+ });
+ } catch (er) {
+ return er;
+ }
+ }
+ [LINK](entry, linkpath, link, done) {
+ try {
+ fs9[link + "Sync"](linkpath, entry.absolute);
+ done();
+ entry.resume();
+ } catch (er) {
+ return this[ONERROR](er, entry);
+ }
+ }
+ };
+ Unpack.Sync = UnpackSync;
+ module2.exports = Unpack;
+ }
+});
+
+// .yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/extract.js
+var require_extract = __commonJS({
+ ".yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/extract.js"(exports, module2) {
+ "use strict";
+ var hlo = require_high_level_opt();
+ var Unpack = require_unpack();
+ var fs9 = require("fs");
+ var fsm = require_fs_minipass();
+ var path10 = require("path");
+ var stripSlash = require_strip_trailing_slashes();
+ module2.exports = (opt_, files, cb) => {
+ if (typeof opt_ === "function") {
+ cb = opt_, files = null, opt_ = {};
+ } else if (Array.isArray(opt_)) {
+ files = opt_, opt_ = {};
+ }
+ if (typeof files === "function") {
+ cb = files, files = null;
+ }
+ if (!files) {
+ files = [];
+ } else {
+ files = Array.from(files);
+ }
+ const opt = hlo(opt_);
+ if (opt.sync && typeof cb === "function") {
+ throw new TypeError("callback not supported for sync tar functions");
+ }
+ if (!opt.file && typeof cb === "function") {
+ throw new TypeError("callback only supported with file option");
+ }
+ if (files.length) {
+ filesFilter(opt, files);
+ }
+ return opt.file && opt.sync ? extractFileSync(opt) : opt.file ? extractFile(opt, cb) : opt.sync ? extractSync(opt) : extract(opt);
+ };
+ var filesFilter = (opt, files) => {
+ const map = new Map(files.map((f) => [stripSlash(f), true]));
+ const filter = opt.filter;
+ const mapHas = (file, r) => {
+ const root = r || path10.parse(file).root || ".";
+ const ret = file === root ? false : map.has(file) ? map.get(file) : mapHas(path10.dirname(file), root);
+ map.set(file, ret);
+ return ret;
+ };
+ opt.filter = filter ? (file, entry) => filter(file, entry) && mapHas(stripSlash(file)) : (file) => mapHas(stripSlash(file));
+ };
+ var extractFileSync = (opt) => {
+ const u = new Unpack.Sync(opt);
+ const file = opt.file;
+ const stat = fs9.statSync(file);
+ const readSize = opt.maxReadSize || 16 * 1024 * 1024;
+ const stream = new fsm.ReadStreamSync(file, {
+ readSize,
+ size: stat.size
+ });
+ stream.pipe(u);
+ };
+ var extractFile = (opt, cb) => {
+ 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);
+ fs9.stat(file, (er, stat) => {
if (er) {
- this[ONERROR](er, entry);
+ reject(er);
} else {
- this[UNPEND]();
- entry.resume();
+ const stream = new fsm.ReadStream(file, {
+ readSize,
+ size: stat.size
+ });
+ stream.on("error", reject);
+ stream.pipe(u);
}
- done();
});
- }
+ });
+ return cb ? p.then(cb, cb) : p;
};
- var callSync = (fn2) => {
- try {
- return [null, fn2()];
- } catch (er) {
- return [er, null];
+ var extractSync = (opt) => new Unpack.Sync(opt);
+ var extract = (opt) => new Unpack(opt);
+ }
+});
+
+// .yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/index.js
+var require_tar = __commonJS({
+ ".yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/index.js"(exports) {
+ "use strict";
+ exports.c = exports.create = require_create();
+ exports.r = exports.replace = require_replace();
+ exports.t = exports.list = require_list();
+ exports.u = exports.update = require_update();
+ exports.x = exports.extract = require_extract();
+ exports.Pack = require_pack();
+ exports.Unpack = require_unpack();
+ exports.Parse = require_parse2();
+ exports.ReadEntry = require_read_entry();
+ exports.WriteEntry = require_write_entry();
+ exports.Header = require_header();
+ exports.Pax = require_pax();
+ exports.types = require_types();
+ }
+});
+
+// .yarn/cache/v8-compile-cache-npm-2.4.0-5979f8e405-3878511925.zip/node_modules/v8-compile-cache/v8-compile-cache.js
+var require_v8_compile_cache = __commonJS({
+ ".yarn/cache/v8-compile-cache-npm-2.4.0-5979f8e405-3878511925.zip/node_modules/v8-compile-cache/v8-compile-cache.js"(exports, module2) {
+ "use strict";
+ var Module2 = require("module");
+ var crypto = require("crypto");
+ var fs9 = require("fs");
+ var path10 = require("path");
+ var vm = require("vm");
+ var os3 = require("os");
+ var hasOwnProperty = Object.prototype.hasOwnProperty;
+ var FileSystemBlobStore = class {
+ constructor(directory, prefix) {
+ const name = prefix ? slashEscape(prefix + ".") : "";
+ this._blobFilename = path10.join(directory, name + "BLOB");
+ this._mapFilename = path10.join(directory, name + "MAP");
+ this._lockFilename = path10.join(directory, name + "LOCK");
+ this._directory = directory;
+ this._load();
}
- };
- var UnpackSync = class extends Unpack {
- [MAKEFS](er, entry) {
- return super[MAKEFS](er, entry, () => {
- });
+ 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;
}
- [CHECKFS](entry) {
- this[PRUNECACHE](entry);
- if (!this[CHECKED_CWD]) {
- const er2 = this[MKDIR](this.cwd, this.dmode);
- if (er2) {
- return this[ONERROR](er2, entry);
+ get(key, invalidationKey) {
+ if (hasOwnProperty.call(this._memoryBlobs, key)) {
+ if (this._invalidationKeys[key] === invalidationKey) {
+ return this._memoryBlobs[key];
}
- this[CHECKED_CWD] = true;
- }
- if (entry.absolute !== this.cwd) {
- const parent = normPath(path10.dirname(entry.absolute));
- if (parent !== this.cwd) {
- const mkParent = this[MKDIR](parent, this.dmode);
- if (mkParent) {
- return this[ONERROR](mkParent, entry);
- }
+ } else if (hasOwnProperty.call(this._storedMap, key)) {
+ const mapping = this._storedMap[key];
+ if (mapping[0] === invalidationKey) {
+ return this._storedBlob.slice(mapping[1], mapping[2]);
}
}
- const [lstatEr, st] = callSync(() => fs8.lstatSync(entry.absolute));
- if (st && (this.keep || this.newer && st.mtime > entry.mtime)) {
- return this[SKIP](entry);
+ }
+ 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 (lstatEr || this[ISREUSABLE](entry, st)) {
- return this[MAKEFS](null, entry);
+ if (hasOwnProperty.call(this._invalidationKeys, key)) {
+ this._dirty = true;
+ delete this._invalidationKeys[key];
}
- if (st.isDirectory()) {
- if (entry.type === "Directory") {
- const needChmod = !this.noChmod && entry.mode && (st.mode & 4095) !== entry.mode;
- const [er3] = needChmod ? callSync(() => {
- fs8.chmodSync(entry.absolute, entry.mode);
- }) : [];
- return this[MAKEFS](er3, entry);
- }
- const [er2] = callSync(() => fs8.rmdirSync(entry.absolute));
- this[MAKEFS](er2, entry);
+ if (hasOwnProperty.call(this._storedMap, key)) {
+ this._dirty = true;
+ delete this._storedMap[key];
}
- const [er] = entry.absolute === this.cwd ? [] : callSync(() => unlinkFileSync(entry.absolute));
- this[MAKEFS](er, entry);
}
- [FILE](entry, done) {
- const mode = entry.mode & 4095 || this.fmode;
- const oner = (er) => {
- let closeError;
- try {
- fs8.closeSync(fd);
- } catch (e) {
- closeError = e;
- }
- if (er || closeError) {
- this[ONERROR](er || closeError, entry);
- }
- done();
- };
- let fd;
+ isDirty() {
+ return this._dirty;
+ }
+ save() {
+ const dump = this._getDump();
+ const blobToStore = Buffer.concat(dump[0]);
+ const mapToStore = JSON.stringify(dump[1]);
try {
- fd = fs8.openSync(entry.absolute, getFlag(entry.size), mode);
- } catch (er) {
- return oner(er);
+ mkdirpSync(this._directory);
+ fs9.writeFileSync(this._lockFilename, "LOCK", { flag: "wx" });
+ } catch (error) {
+ return false;
}
- const tx = this.transform ? this.transform(entry) || entry : entry;
- if (tx !== entry) {
- tx.on("error", (er) => this[ONERROR](er, entry));
- entry.pipe(tx);
+ try {
+ fs9.writeFileSync(this._blobFilename, blobToStore);
+ fs9.writeFileSync(this._mapFilename, mapToStore);
+ } finally {
+ fs9.unlinkSync(this._lockFilename);
}
- tx.on("data", (chunk) => {
- try {
- fs8.writeSync(fd, chunk, 0, chunk.length);
- } catch (er) {
- oner(er);
+ return true;
+ }
+ _load() {
+ try {
+ this._storedBlob = fs9.readFileSync(this._blobFilename);
+ this._storedMap = JSON.parse(fs9.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 push(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];
+ push(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]);
+ push(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);
}
- });
- tx.on("end", (_) => {
- let er = null;
- if (entry.mtime && !this.noMtime) {
- const atime = entry.atime || /* @__PURE__ */ new Date();
- const mtime = entry.mtime;
- try {
- fs8.futimesSync(fd, atime, mtime);
- } catch (futimeser) {
- try {
- fs8.utimesSync(entry.absolute, atime, mtime);
- } catch (utimeser) {
- er = futimeser;
- }
- }
+ function resolve(request, options) {
+ return Module2._resolveFilename(request, mod, false, options);
}
- if (this[DOCHOWN](entry)) {
- const uid = this[UID](entry);
- const gid = this[GID](entry);
- try {
- fs8.fchownSync(fd, uid, gid);
- } catch (fchowner) {
- try {
- fs8.chownSync(entry.absolute, uid, gid);
- } catch (chowner) {
- er = er || fchowner;
+ 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 dirname = path10.dirname(filename);
+ const compiledWrapper = self2._moduleCompile(filename, content);
+ const args = [mod.exports, require2, mod, filename, dirname, 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 code = content.charCodeAt(i);
+ if (code === 10 || code === 13)
+ break;
+ }
+ if (i === contLen) {
+ content = "";
+ } else {
+ content = content.slice(i);
}
}
}
- oner(er);
+ }
+ 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
});
- }
- [DIRECTORY](entry, done) {
- const mode = entry.mode & 4095 || this.dmode;
- const er = this[MKDIR](entry.absolute, mode);
- if (er) {
- this[ONERROR](er, entry);
- done();
- return;
+ if (script.cachedDataProduced) {
+ this._cacheStore.set(filename, invalidationKey, script.cachedData);
+ } else if (script.cachedDataRejected) {
+ this._cacheStore.delete(filename);
}
- if (entry.mtime && !this.noMtime) {
+ var compiledWrapper = script.runInThisContext({
+ filename,
+ lineOffset: 0,
+ columnOffset: 0,
+ displayErrors: true
+ });
+ return compiledWrapper;
+ }
+ };
+ function mkdirpSync(p_) {
+ _mkdirpSync(path10.resolve(p_), 511);
+ }
+ function _mkdirpSync(p, mode) {
+ try {
+ fs9.mkdirSync(p, mode);
+ } catch (err0) {
+ if (err0.code === "ENOENT") {
+ _mkdirpSync(path10.dirname(p));
+ _mkdirpSync(p);
+ } else {
try {
- fs8.utimesSync(entry.absolute, entry.atime || /* @__PURE__ */ new Date(), entry.mtime);
- } catch (er2) {
+ const stat = fs9.statSync(p);
+ if (!stat.isDirectory()) {
+ throw err0;
+ }
+ } catch (err1) {
+ throw err0;
}
}
- if (this[DOCHOWN](entry)) {
- try {
- fs8.chownSync(entry.absolute, this[UID](entry), this[GID](entry));
- } catch (er2) {
- }
+ }
+ }
+ 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 dirname = 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 = path10.join(os3.tmpdir(), dirname, 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();
}
- done();
- entry.resume();
+ nativeCompileCache.uninstall();
+ });
+ }
+ module2.exports.__TEST__ = {
+ FileSystemBlobStore,
+ NativeCompileCache,
+ mkdirpSync,
+ slashEscape,
+ supportsCachedData,
+ getCacheDir,
+ getMainName
+ };
+ }
+});
+
+// .yarn/cache/isexe-npm-3.1.1-9c0061eead-9ec2576540.zip/node_modules/isexe/dist/cjs/posix.js
+var require_posix = __commonJS({
+ ".yarn/cache/isexe-npm-3.1.1-9c0061eead-9ec2576540.zip/node_modules/isexe/dist/cjs/posix.js"(exports) {
+ "use strict";
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.sync = exports.isexe = void 0;
+ var fs_1 = require("fs");
+ var promises_1 = require("fs/promises");
+ var isexe = async (path10, options = {}) => {
+ const { ignoreErrors = false } = options;
+ try {
+ return checkStat(await (0, promises_1.stat)(path10), options);
+ } catch (e) {
+ const er = e;
+ if (ignoreErrors || er.code === "EACCES")
+ return false;
+ throw er;
+ }
+ };
+ exports.isexe = isexe;
+ var sync = (path10, options = {}) => {
+ const { ignoreErrors = false } = options;
+ try {
+ return checkStat((0, fs_1.statSync)(path10), options);
+ } catch (e) {
+ const er = e;
+ if (ignoreErrors || er.code === "EACCES")
+ return false;
+ throw er;
+ }
+ };
+ exports.sync = sync;
+ var checkStat = (stat, options) => stat.isFile() && checkMode(stat, options);
+ var checkMode = (stat, options) => {
+ const myUid = options.uid ?? process.getuid?.();
+ const myGroups = options.groups ?? process.getgroups?.() ?? [];
+ const myGid = options.gid ?? process.getgid?.() ?? myGroups[0];
+ if (myUid === void 0 || myGid === void 0) {
+ throw new Error("cannot get uid or gid");
+ }
+ const groups = /* @__PURE__ */ new Set([myGid, ...myGroups]);
+ const mod = stat.mode;
+ const uid = stat.uid;
+ const gid = stat.gid;
+ const u = parseInt("100", 8);
+ const g = parseInt("010", 8);
+ const o = parseInt("001", 8);
+ const ug = u | g;
+ return !!(mod & o || mod & g && groups.has(gid) || mod & u && uid === myUid || mod & ug && myUid === 0);
+ };
+ }
+});
+
+// .yarn/cache/isexe-npm-3.1.1-9c0061eead-9ec2576540.zip/node_modules/isexe/dist/cjs/win32.js
+var require_win32 = __commonJS({
+ ".yarn/cache/isexe-npm-3.1.1-9c0061eead-9ec2576540.zip/node_modules/isexe/dist/cjs/win32.js"(exports) {
+ "use strict";
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.sync = exports.isexe = void 0;
+ var fs_1 = require("fs");
+ var promises_1 = require("fs/promises");
+ var isexe = async (path10, options = {}) => {
+ const { ignoreErrors = false } = options;
+ try {
+ return checkStat(await (0, promises_1.stat)(path10), path10, options);
+ } catch (e) {
+ const er = e;
+ if (ignoreErrors || er.code === "EACCES")
+ return false;
+ throw er;
+ }
+ };
+ exports.isexe = isexe;
+ var sync = (path10, options = {}) => {
+ const { ignoreErrors = false } = options;
+ try {
+ return checkStat((0, fs_1.statSync)(path10), path10, options);
+ } catch (e) {
+ const er = e;
+ if (ignoreErrors || er.code === "EACCES")
+ return false;
+ throw er;
}
- [MKDIR](dir, mode) {
- try {
- return mkdir4.sync(normPath(dir), {
- uid: this.uid,
- gid: this.gid,
- processUid: this.processUid,
- processGid: this.processGid,
- umask: this.processUmask,
- preserve: this.preservePaths,
- unlink: this.unlink,
- cache: this.dirCache,
- cwd: this.cwd,
- mode
- });
- } catch (er) {
- return er;
- }
+ };
+ exports.sync = sync;
+ var checkPathExt = (path10, options) => {
+ const { pathExt = process.env.PATHEXT || "" } = options;
+ const peSplit = pathExt.split(";");
+ if (peSplit.indexOf("") !== -1) {
+ return true;
}
- [LINK](entry, linkpath, link, done) {
- try {
- fs8[link + "Sync"](linkpath, entry.absolute);
- done();
- entry.resume();
- } catch (er) {
- return this[ONERROR](er, entry);
+ for (let i = 0; i < peSplit.length; i++) {
+ const p = peSplit[i].toLowerCase();
+ const ext = path10.substring(path10.length - p.length).toLowerCase();
+ if (p && ext === p) {
+ return true;
}
}
+ return false;
};
- Unpack.Sync = UnpackSync;
- module2.exports = Unpack;
+ var checkStat = (stat, path10, options) => stat.isFile() && checkPathExt(path10, options);
}
});
-// .yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/extract.js
-var require_extract = __commonJS({
- ".yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/lib/extract.js"(exports, module2) {
+// .yarn/cache/isexe-npm-3.1.1-9c0061eead-9ec2576540.zip/node_modules/isexe/dist/cjs/options.js
+var require_options = __commonJS({
+ ".yarn/cache/isexe-npm-3.1.1-9c0061eead-9ec2576540.zip/node_modules/isexe/dist/cjs/options.js"(exports) {
"use strict";
- var hlo = require_high_level_opt();
- var Unpack = require_unpack();
- var fs8 = require("fs");
- var fsm = require_fs_minipass();
- var path10 = require("path");
- var stripSlash = require_strip_trailing_slashes();
- module2.exports = (opt_, files, cb) => {
- if (typeof opt_ === "function") {
- cb = opt_, files = null, opt_ = {};
- } else if (Array.isArray(opt_)) {
- files = opt_, opt_ = {};
+ Object.defineProperty(exports, "__esModule", { value: true });
+ }
+});
+
+// .yarn/cache/isexe-npm-3.1.1-9c0061eead-9ec2576540.zip/node_modules/isexe/dist/cjs/index.js
+var require_cjs = __commonJS({
+ ".yarn/cache/isexe-npm-3.1.1-9c0061eead-9ec2576540.zip/node_modules/isexe/dist/cjs/index.js"(exports) {
+ "use strict";
+ var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) {
+ if (k2 === void 0)
+ k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() {
+ return m[k];
+ } };
}
- if (typeof files === "function") {
- cb = files, files = null;
+ Object.defineProperty(o, k2, desc);
+ } : function(o, m, k, k2) {
+ if (k2 === void 0)
+ k2 = k;
+ o[k2] = m[k];
+ });
+ var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+ } : function(o, v) {
+ o["default"] = v;
+ });
+ var __importStar = exports && exports.__importStar || function(mod) {
+ if (mod && mod.__esModule)
+ return mod;
+ var result = {};
+ if (mod != null) {
+ for (var k in mod)
+ if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k))
+ __createBinding(result, mod, k);
}
- if (!files) {
- files = [];
- } else {
- files = Array.from(files);
+ __setModuleDefault(result, mod);
+ return result;
+ };
+ var __exportStar = exports && exports.__exportStar || function(m, exports2) {
+ for (var p in m)
+ if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports2, p))
+ __createBinding(exports2, m, p);
+ };
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.sync = exports.isexe = exports.posix = exports.win32 = void 0;
+ var posix = __importStar(require_posix());
+ exports.posix = posix;
+ var win32 = __importStar(require_win32());
+ exports.win32 = win32;
+ __exportStar(require_options(), exports);
+ var platform = process.env._ISEXE_TEST_PLATFORM_ || process.platform;
+ var impl = platform === "win32" ? win32 : posix;
+ exports.isexe = impl.isexe;
+ exports.sync = impl.sync;
+ }
+});
+
+// .yarn/cache/which-npm-4.0.0-dd31cd4928-449fa5c44e.zip/node_modules/which/lib/index.js
+var require_lib = __commonJS({
+ ".yarn/cache/which-npm-4.0.0-dd31cd4928-449fa5c44e.zip/node_modules/which/lib/index.js"(exports, module2) {
+ var { isexe, sync: isexeSync } = require_cjs();
+ var { join: join2, delimiter, sep, posix } = require("path");
+ var isWindows = 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
+ ...isWindows ? [process.cwd()] : [],
+ ...(optPath || /* istanbul ignore next: very unusual */
+ "").split(optDelimiter)
+ ];
+ if (isWindows) {
+ 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 };
}
- const opt = hlo(opt_);
- if (opt.sync && typeof cb === "function") {
- throw new TypeError("callback not supported for sync tar functions");
+ return { pathEnv, pathExt: [""] };
+ };
+ var getPathPart = (raw, cmd) => {
+ const pathPart = /^".*"$/.test(raw) ? raw.slice(1, -1) : raw;
+ const prefix = !pathPart && rRel.test(cmd) ? cmd.slice(0, 2) : "";
+ return prefix + join2(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.file && typeof cb === "function") {
- throw new TypeError("callback only supported with file option");
+ if (opt.all && found.length) {
+ return found;
}
- if (files.length) {
- filesFilter(opt, files);
+ if (opt.nothrow) {
+ return null;
}
- return opt.file && opt.sync ? extractFileSync(opt) : opt.file ? extractFile(opt, cb) : opt.sync ? extractSync(opt) : extract(opt);
- };
- var filesFilter = (opt, files) => {
- const map = new Map(files.map((f) => [stripSlash(f), true]));
- const filter = opt.filter;
- const mapHas = (file, r) => {
- const root = r || path10.parse(file).root || ".";
- const ret = file === root ? false : map.has(file) ? map.get(file) : mapHas(path10.dirname(file), root);
- map.set(file, ret);
- return ret;
- };
- opt.filter = filter ? (file, entry) => filter(file, entry) && mapHas(stripSlash(file)) : (file) => mapHas(stripSlash(file));
- };
- var extractFileSync = (opt) => {
- const u = new Unpack.Sync(opt);
- const file = opt.file;
- const stat = fs8.statSync(file);
- const readSize = opt.maxReadSize || 16 * 1024 * 1024;
- const stream = new fsm.ReadStreamSync(file, {
- readSize,
- size: stat.size
- });
- stream.pipe(u);
+ throw getNotFoundError(cmd);
};
- var extractFile = (opt, cb) => {
- 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);
- fs8.stat(file, (er, stat) => {
- if (er) {
- reject(er);
- } else {
- const stream = new fsm.ReadStream(file, {
- readSize,
- size: stat.size
- });
- stream.on("error", reject);
- stream.pipe(u);
+ 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);
}
- });
- });
- return cb ? p.then(cb, cb) : p;
+ }
+ }
+ if (opt.all && found.length) {
+ return found;
+ }
+ if (opt.nothrow) {
+ return null;
+ }
+ throw getNotFoundError(cmd);
};
- var extractSync = (opt) => new Unpack.Sync(opt);
- var extract = (opt) => new Unpack(opt);
+ module2.exports = which3;
+ which3.sync = whichSync;
+ }
+});
+
+// .yarn/cache/is-windows-npm-1.0.2-898cd6f3d7-b32f418ab3.zip/node_modules/is-windows/index.js
+var require_is_windows = __commonJS({
+ ".yarn/cache/is-windows-npm-1.0.2-898cd6f3d7-b32f418ab3.zip/node_modules/is-windows/index.js"(exports, module2) {
+ (function(factory) {
+ if (exports && typeof exports === "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 isWindows() {
+ return process && (process.platform === "win32" || /^(msys|cygwin)$/.test(process.env.OSTYPE));
+ };
+ });
}
});
-// .yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/index.js
-var require_tar = __commonJS({
- ".yarn/cache/tar-npm-6.2.0-3eb25205a7-02ca064a1a.zip/node_modules/tar/index.js"(exports) {
+// .yarn/cache/cmd-extension-npm-1.0.2-11aa204c4b-acdb425d51.zip/node_modules/cmd-extension/index.js
+var require_cmd_extension = __commonJS({
+ ".yarn/cache/cmd-extension-npm-1.0.2-11aa204c4b-acdb425d51.zip/node_modules/cmd-extension/index.js"(exports, module2) {
"use strict";
- exports.c = exports.create = require_create();
- exports.r = exports.replace = require_replace();
- exports.t = exports.list = require_list();
- exports.u = exports.update = require_update();
- exports.x = exports.extract = require_extract();
- exports.Pack = require_pack();
- exports.Unpack = require_unpack();
- exports.Parse = require_parse2();
- exports.ReadEntry = require_read_entry();
- exports.WriteEntry = require_write_entry();
- exports.Header = require_header();
- exports.Pax = require_pax();
- exports.types = require_types3();
+ var path10 = require("path");
+ var cmdExtension;
+ if (process.env.PATHEXT) {
+ cmdExtension = process.env.PATHEXT.split(path10.delimiter).find((ext) => ext.toUpperCase() === ".CMD");
+ }
+ module2.exports = cmdExtension || ".cmd";
}
});
-// .yarn/cache/v8-compile-cache-npm-2.4.0-5979f8e405-3878511925.zip/node_modules/v8-compile-cache/v8-compile-cache.js
-var require_v8_compile_cache = __commonJS({
- ".yarn/cache/v8-compile-cache-npm-2.4.0-5979f8e405-3878511925.zip/node_modules/v8-compile-cache/v8-compile-cache.js"(exports, module2) {
- "use strict";
- var Module2 = require("module");
- var crypto = require("crypto");
- var fs8 = require("fs");
- var path10 = require("path");
- var vm = require("vm");
- var os3 = require("os");
- var hasOwnProperty = Object.prototype.hasOwnProperty;
- var FileSystemBlobStore = class {
- constructor(directory, prefix) {
- const name = prefix ? slashEscape(prefix + ".") : "";
- this._blobFilename = path10.join(directory, name + "BLOB");
- this._mapFilename = path10.join(directory, name + "MAP");
- this._lockFilename = path10.join(directory, name + "LOCK");
- this._directory = directory;
- this._load();
+// .yarn/cache/graceful-fs-npm-4.2.11-24bb648a68-386d011a55.zip/node_modules/graceful-fs/polyfills.js
+var require_polyfills = __commonJS({
+ ".yarn/cache/graceful-fs-npm-4.2.11-24bb648a68-386d011a55.zip/node_modules/graceful-fs/polyfills.js"(exports, module2) {
+ var constants = require("constants");
+ var origCwd = process.cwd;
+ var cwd = null;
+ var platform = 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(fs9) {
+ if (constants.hasOwnProperty("O_SYMLINK") && process.version.match(/^v0\.6\.[0-2]|^v0\.5\./)) {
+ patchLchmod(fs9);
+ }
+ if (!fs9.lutimes) {
+ patchLutimes(fs9);
+ }
+ fs9.chown = chownFix(fs9.chown);
+ fs9.fchown = chownFix(fs9.fchown);
+ fs9.lchown = chownFix(fs9.lchown);
+ fs9.chmod = chmodFix(fs9.chmod);
+ fs9.fchmod = chmodFix(fs9.fchmod);
+ fs9.lchmod = chmodFix(fs9.lchmod);
+ fs9.chownSync = chownFixSync(fs9.chownSync);
+ fs9.fchownSync = chownFixSync(fs9.fchownSync);
+ fs9.lchownSync = chownFixSync(fs9.lchownSync);
+ fs9.chmodSync = chmodFixSync(fs9.chmodSync);
+ fs9.fchmodSync = chmodFixSync(fs9.fchmodSync);
+ fs9.lchmodSync = chmodFixSync(fs9.lchmodSync);
+ fs9.stat = statFix(fs9.stat);
+ fs9.fstat = statFix(fs9.fstat);
+ fs9.lstat = statFix(fs9.lstat);
+ fs9.statSync = statFixSync(fs9.statSync);
+ fs9.fstatSync = statFixSync(fs9.fstatSync);
+ fs9.lstatSync = statFixSync(fs9.lstatSync);
+ if (fs9.chmod && !fs9.lchmod) {
+ fs9.lchmod = function(path10, mode, cb) {
+ if (cb)
+ process.nextTick(cb);
+ };
+ fs9.lchmodSync = function() {
+ };
}
- 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;
+ if (fs9.chown && !fs9.lchown) {
+ fs9.lchown = function(path10, uid, gid, cb) {
+ if (cb)
+ process.nextTick(cb);
+ };
+ fs9.lchownSync = function() {
+ };
}
- 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]);
+ if (platform === "win32") {
+ fs9.rename = typeof fs9.rename !== "function" ? fs9.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() {
+ fs9.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);
+ });
}
- }
- }
- 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);
- fs8.writeFileSync(this._lockFilename, "LOCK", { flag: "wx" });
- } catch (error) {
- return false;
- }
- try {
- fs8.writeFileSync(this._blobFilename, blobToStore);
- fs8.writeFileSync(this._mapFilename, mapToStore);
- } finally {
- fs8.unlinkSync(this._lockFilename);
- }
- return true;
+ if (Object.setPrototypeOf)
+ Object.setPrototypeOf(rename, fs$rename);
+ return rename;
+ }(fs9.rename);
}
- _load() {
- try {
- this._storedBlob = fs8.readFileSync(this._blobFilename);
- this._storedMap = JSON.parse(fs8.readFileSync(this._mapFilename));
- } catch (e) {
- this._storedBlob = Buffer.alloc(0);
- this._storedMap = {};
+ fs9.read = typeof fs9.read !== "function" ? fs9.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(fs9, fd, buffer, offset, length, position, callback);
+ }
+ callback_.apply(this, arguments);
+ };
+ }
+ return fs$read.call(fs9, fd, buffer, offset, length, position, callback);
}
- this._dirty = false;
- this._memoryBlobs = {};
- this._invalidationKeys = {};
+ if (Object.setPrototypeOf)
+ Object.setPrototypeOf(read, fs$read);
+ return read;
+ }(fs9.read);
+ fs9.readSync = typeof fs9.readSync !== "function" ? fs9.readSync : function(fs$readSync) {
+ return function(fd, buffer, offset, length, position) {
+ var eagCounter = 0;
+ while (true) {
+ try {
+ return fs$readSync.call(fs9, fd, buffer, offset, length, position);
+ } catch (er) {
+ if (er.code === "EAGAIN" && eagCounter < 10) {
+ eagCounter++;
+ continue;
+ }
+ throw er;
+ }
+ }
+ };
+ }(fs9.readSync);
+ function patchLchmod(fs10) {
+ fs10.lchmod = function(path10, mode, callback) {
+ fs10.open(
+ path10,
+ constants.O_WRONLY | constants.O_SYMLINK,
+ mode,
+ function(err, fd) {
+ if (err) {
+ if (callback)
+ callback(err);
+ return;
+ }
+ fs10.fchmod(fd, mode, function(err2) {
+ fs10.close(fd, function(err22) {
+ if (callback)
+ callback(err2 || err22);
+ });
+ });
+ }
+ );
+ };
+ fs10.lchmodSync = function(path10, mode) {
+ var fd = fs10.openSync(path10, constants.O_WRONLY | constants.O_SYMLINK, mode);
+ var threw = true;
+ var ret;
+ try {
+ ret = fs10.fchmodSync(fd, mode);
+ threw = false;
+ } finally {
+ if (threw) {
+ try {
+ fs10.closeSync(fd);
+ } catch (er) {
+ }
+ } else {
+ fs10.closeSync(fd);
+ }
+ }
+ return ret;
+ };
}
- _getDump() {
- const buffers = [];
- const newMap = {};
- let offset = 0;
- function push(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];
- push(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]);
- push(key, mapping[0], buffer);
+ function patchLutimes(fs10) {
+ if (constants.hasOwnProperty("O_SYMLINK") && fs10.futimes) {
+ fs10.lutimes = function(path10, at, mt, cb) {
+ fs10.open(path10, constants.O_SYMLINK, function(er, fd) {
+ if (er) {
+ if (cb)
+ cb(er);
+ return;
+ }
+ fs10.futimes(fd, at, mt, function(er2) {
+ fs10.close(fd, function(er22) {
+ if (cb)
+ cb(er2 || er22);
+ });
+ });
+ });
+ };
+ fs10.lutimesSync = function(path10, at, mt) {
+ var fd = fs10.openSync(path10, constants.O_SYMLINK);
+ var ret;
+ var threw = true;
+ try {
+ ret = fs10.futimesSync(fd, at, mt);
+ threw = false;
+ } finally {
+ if (threw) {
+ try {
+ fs10.closeSync(fd);
+ } catch (er) {
+ }
+ } else {
+ fs10.closeSync(fd);
+ }
+ }
+ return ret;
+ };
+ } else if (fs10.futimes) {
+ fs10.lutimes = function(_a, _b, _c, cb) {
+ if (cb)
+ process.nextTick(cb);
+ };
+ fs10.lutimesSync = function() {
+ };
}
- return [buffers, newMap];
}
- };
- var NativeCompileCache = class {
- constructor() {
- this._cacheStore = null;
- this._previousModuleCompile = null;
+ function chmodFix(orig) {
+ if (!orig)
+ return orig;
+ return function(target, mode, cb) {
+ return orig.call(fs9, target, mode, function(er) {
+ if (chownErOk(er))
+ er = null;
+ if (cb)
+ cb.apply(this, arguments);
+ });
+ };
}
- setCacheStore(cacheStore) {
- this._cacheStore = cacheStore;
+ function chmodFixSync(orig) {
+ if (!orig)
+ return orig;
+ return function(target, mode) {
+ try {
+ return orig.call(fs9, target, mode);
+ } catch (er) {
+ if (!chownErOk(er))
+ throw er;
+ }
+ };
}
- 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 chownFix(orig) {
+ if (!orig)
+ return orig;
+ return function(target, uid, gid, cb) {
+ return orig.call(fs9, 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(fs9, target, uid, gid);
+ } catch (er) {
+ if (!chownErOk(er))
+ throw er;
}
- function resolve(request, options) {
- return Module2._resolveFilename(request, mod, false, options);
+ };
+ }
+ function statFix(orig) {
+ if (!orig)
+ return orig;
+ return function(target, options, cb) {
+ if (typeof options === "function") {
+ cb = options;
+ options = null;
}
- require2.resolve = resolve;
- if (hasRequireResolvePaths) {
- resolve.paths = function paths(request) {
- return Module2._resolveLookupPaths(request, mod, true);
- };
+ 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);
}
- require2.main = process.mainModule;
- require2.extensions = Module2._extensions;
- require2.cache = Module2._cache;
- const dirname = path10.dirname(filename);
- const compiledWrapper = self2._moduleCompile(filename, content);
- const args = [mod.exports, require2, mod, filename, dirname, process, global, Buffer];
- return compiledWrapper.apply(mod.exports, args);
+ return options ? orig.call(fs9, target, options, callback) : orig.call(fs9, target, callback);
};
}
- uninstall() {
- Module2.prototype._compile = this._previousModuleCompile;
+ function statFixSync(orig) {
+ if (!orig)
+ return orig;
+ return function(target, options) {
+ var stats = options ? orig.call(fs9, target, options) : orig.call(fs9, target);
+ if (stats) {
+ if (stats.uid < 0)
+ stats.uid += 4294967296;
+ if (stats.gid < 0)
+ stats.gid += 4294967296;
+ }
+ return stats;
+ };
}
- _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 code = content.charCodeAt(i);
- if (code === 10 || code === 13)
- break;
- }
- if (i === contLen) {
- content = "";
- } else {
- content = content.slice(i);
- }
- }
+ 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;
+ }
+ }
+ }
+});
+
+// .yarn/cache/graceful-fs-npm-4.2.11-24bb648a68-386d011a55.zip/node_modules/graceful-fs/legacy-streams.js
+var require_legacy_streams = __commonJS({
+ ".yarn/cache/graceful-fs-npm-4.2.11-24bb648a68-386d011a55.zip/node_modules/graceful-fs/legacy-streams.js"(exports, module2) {
+ var Stream = require("stream").Stream;
+ module2.exports = legacy;
+ function legacy(fs9) {
+ return {
+ ReadStream,
+ WriteStream
+ };
+ function ReadStream(path10, options) {
+ if (!(this instanceof ReadStream))
+ return new ReadStream(path10, options);
+ Stream.call(this);
+ var self2 = this;
+ this.path = path10;
+ 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;
}
- 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);
+ if (this.fd !== null) {
+ process.nextTick(function() {
+ self2._read();
+ });
+ return;
}
- var compiledWrapper = script.runInThisContext({
- filename,
- lineOffset: 0,
- columnOffset: 0,
- displayErrors: true
+ fs9.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();
});
- return compiledWrapper;
}
- };
- function mkdirpSync(p_) {
- _mkdirpSync(path10.resolve(p_), 511);
- }
- function _mkdirpSync(p, mode) {
- try {
- fs8.mkdirSync(p, mode);
- } catch (err0) {
- if (err0.code === "ENOENT") {
- _mkdirpSync(path10.dirname(p));
- _mkdirpSync(p);
- } else {
- try {
- const stat = fs8.statSync(p);
- if (!stat.isDirectory()) {
- throw err0;
- }
- } catch (err1) {
- throw err0;
+ function WriteStream(path10, options) {
+ if (!(this instanceof WriteStream))
+ return new WriteStream(path10, options);
+ Stream.call(this);
+ this.path = path10;
+ 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;
}
- }
- }
- 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 dirname = 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 = path10.join(os3.tmpdir(), dirname, 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();
+ this.busy = false;
+ this._queue = [];
+ if (this.fd === null) {
+ this._open = fs9.open;
+ this._queue.push([this._open, this.path, this.flags, this.mode, void 0]);
+ this.flush();
}
- nativeCompileCache.uninstall();
- });
+ }
}
- module2.exports.__TEST__ = {
- FileSystemBlobStore,
- NativeCompileCache,
- mkdirpSync,
- slashEscape,
- supportsCachedData,
- getCacheDir,
- getMainName
- };
}
});
-// .yarn/cache/isexe-npm-3.1.1-9c0061eead-9ec2576540.zip/node_modules/isexe/dist/cjs/posix.js
-var require_posix = __commonJS({
- ".yarn/cache/isexe-npm-3.1.1-9c0061eead-9ec2576540.zip/node_modules/isexe/dist/cjs/posix.js"(exports) {
+// .yarn/cache/graceful-fs-npm-4.2.11-24bb648a68-386d011a55.zip/node_modules/graceful-fs/clone.js
+var require_clone = __commonJS({
+ ".yarn/cache/graceful-fs-npm-4.2.11-24bb648a68-386d011a55.zip/node_modules/graceful-fs/clone.js"(exports, module2) {
"use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.sync = exports.isexe = void 0;
- var fs_1 = require("fs");
- var promises_1 = require("fs/promises");
- var isexe = async (path10, options = {}) => {
- const { ignoreErrors = false } = options;
- try {
- return checkStat(await (0, promises_1.stat)(path10), options);
- } catch (e) {
- const er = e;
- if (ignoreErrors || er.code === "EACCES")
- return false;
- throw er;
- }
- };
- exports.isexe = isexe;
- var sync = (path10, options = {}) => {
- const { ignoreErrors = false } = options;
- try {
- return checkStat((0, fs_1.statSync)(path10), options);
- } catch (e) {
- const er = e;
- if (ignoreErrors || er.code === "EACCES")
- return false;
- throw er;
- }
- };
- exports.sync = sync;
- var checkStat = (stat, options) => stat.isFile() && checkMode(stat, options);
- var checkMode = (stat, options) => {
- const myUid = options.uid ?? process.getuid?.();
- const myGroups = options.groups ?? process.getgroups?.() ?? [];
- const myGid = options.gid ?? process.getgid?.() ?? myGroups[0];
- if (myUid === void 0 || myGid === void 0) {
- throw new Error("cannot get uid or gid");
- }
- const groups = /* @__PURE__ */ new Set([myGid, ...myGroups]);
- const mod = stat.mode;
- const uid = stat.uid;
- const gid = stat.gid;
- const u = parseInt("100", 8);
- const g = parseInt("010", 8);
- const o = parseInt("001", 8);
- const ug = u | g;
- return !!(mod & o || mod & g && groups.has(gid) || mod & u && uid === myUid || mod & ug && myUid === 0);
+ 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;
+ }
}
});
-// .yarn/cache/isexe-npm-3.1.1-9c0061eead-9ec2576540.zip/node_modules/isexe/dist/cjs/win32.js
-var require_win322 = __commonJS({
- ".yarn/cache/isexe-npm-3.1.1-9c0061eead-9ec2576540.zip/node_modules/isexe/dist/cjs/win32.js"(exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.sync = exports.isexe = void 0;
- var fs_1 = require("fs");
- var promises_1 = require("fs/promises");
- var isexe = async (path10, options = {}) => {
- const { ignoreErrors = false } = options;
- try {
- return checkStat(await (0, promises_1.stat)(path10), path10, options);
- } catch (e) {
- const er = e;
- if (ignoreErrors || er.code === "EACCES")
- return false;
- throw er;
+// .yarn/cache/graceful-fs-npm-4.2.11-24bb648a68-386d011a55.zip/node_modules/graceful-fs/graceful-fs.js
+var require_graceful_fs = __commonJS({
+ ".yarn/cache/graceful-fs-npm-4.2.11-24bb648a68-386d011a55.zip/node_modules/graceful-fs/graceful-fs.js"(exports, module2) {
+ var fs9 = 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 = Symbol.for("graceful-fs.queue");
+ previousSymbol = Symbol.for("graceful-fs.previous");
+ } else {
+ gracefulQueue = "___graceful-fs.queue";
+ previousSymbol = "___graceful-fs.previous";
+ }
+ function noop() {
+ }
+ function publishQueue(context, queue2) {
+ Object.defineProperty(context, gracefulQueue, {
+ get: function() {
+ return queue2;
+ }
+ });
+ }
+ var debug2 = noop;
+ if (util.debuglog)
+ debug2 = util.debuglog("gfs4");
+ else if (/\bgfs4\b/i.test(process.env.NODE_DEBUG || ""))
+ debug2 = function() {
+ var m = util.format.apply(util, arguments);
+ m = "GFS4: " + m.split(/\n/).join("\nGFS4: ");
+ console.error(m);
+ };
+ if (!fs9[gracefulQueue]) {
+ queue = global[gracefulQueue] || [];
+ publishQueue(fs9, queue);
+ fs9.close = function(fs$close) {
+ function close(fd, cb) {
+ return fs$close.call(fs9, fd, function(err) {
+ if (!err) {
+ resetQueue();
+ }
+ if (typeof cb === "function")
+ cb.apply(this, arguments);
+ });
+ }
+ Object.defineProperty(close, previousSymbol, {
+ value: fs$close
+ });
+ return close;
+ }(fs9.close);
+ fs9.closeSync = function(fs$closeSync) {
+ function closeSync(fd) {
+ fs$closeSync.apply(fs9, arguments);
+ resetQueue();
+ }
+ Object.defineProperty(closeSync, previousSymbol, {
+ value: fs$closeSync
+ });
+ return closeSync;
+ }(fs9.closeSync);
+ if (/\bgfs4\b/i.test(process.env.NODE_DEBUG || "")) {
+ process.on("exit", function() {
+ debug2(fs9[gracefulQueue]);
+ require("assert").equal(fs9[gracefulQueue].length, 0);
+ });
}
- };
- exports.isexe = isexe;
- var sync = (path10, options = {}) => {
- const { ignoreErrors = false } = options;
- try {
- return checkStat((0, fs_1.statSync)(path10), path10, options);
- } catch (e) {
- const er = e;
- if (ignoreErrors || er.code === "EACCES")
- return false;
- throw er;
+ }
+ var queue;
+ if (!global[gracefulQueue]) {
+ publishQueue(global, fs9[gracefulQueue]);
+ }
+ module2.exports = patch(clone(fs9));
+ if (process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH && !fs9.__patched) {
+ module2.exports = patch(fs9);
+ fs9.__patched = true;
+ }
+ function patch(fs10) {
+ polyfills(fs10);
+ fs10.gracefulify = patch;
+ fs10.createReadStream = createReadStream;
+ fs10.createWriteStream = createWriteStream;
+ var fs$readFile = fs10.readFile;
+ fs10.readFile = readFile;
+ function readFile(path10, options, cb) {
+ if (typeof options === "function")
+ cb = options, options = null;
+ return go$readFile(path10, options, cb);
+ function go$readFile(path11, options2, cb2, startTime) {
+ return fs$readFile(path11, options2, function(err) {
+ if (err && (err.code === "EMFILE" || err.code === "ENFILE"))
+ enqueue([go$readFile, [path11, options2, cb2], err, startTime || Date.now(), Date.now()]);
+ else {
+ if (typeof cb2 === "function")
+ cb2.apply(this, arguments);
+ }
+ });
+ }
+ }
+ var fs$writeFile = fs10.writeFile;
+ fs10.writeFile = writeFile;
+ function writeFile(path10, data, options, cb) {
+ if (typeof options === "function")
+ cb = options, options = null;
+ return go$writeFile(path10, data, options, cb);
+ function go$writeFile(path11, data2, options2, cb2, startTime) {
+ return fs$writeFile(path11, data2, options2, function(err) {
+ if (err && (err.code === "EMFILE" || err.code === "ENFILE"))
+ enqueue([go$writeFile, [path11, data2, options2, cb2], err, startTime || Date.now(), Date.now()]);
+ else {
+ if (typeof cb2 === "function")
+ cb2.apply(this, arguments);
+ }
+ });
+ }
+ }
+ var fs$appendFile = fs10.appendFile;
+ if (fs$appendFile)
+ fs10.appendFile = appendFile;
+ function appendFile(path10, data, options, cb) {
+ if (typeof options === "function")
+ cb = options, options = null;
+ return go$appendFile(path10, data, options, cb);
+ function go$appendFile(path11, data2, options2, cb2, startTime) {
+ return fs$appendFile(path11, data2, options2, function(err) {
+ if (err && (err.code === "EMFILE" || err.code === "ENFILE"))
+ enqueue([go$appendFile, [path11, data2, options2, cb2], err, startTime || Date.now(), Date.now()]);
+ else {
+ if (typeof cb2 === "function")
+ cb2.apply(this, arguments);
+ }
+ });
+ }
}
- };
- exports.sync = sync;
- var checkPathExt = (path10, options) => {
- const { pathExt = process.env.PATHEXT || "" } = options;
- const peSplit = pathExt.split(";");
- if (peSplit.indexOf("") !== -1) {
- return true;
+ var fs$copyFile = fs10.copyFile;
+ if (fs$copyFile)
+ fs10.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);
+ }
+ });
+ }
}
- for (let i = 0; i < peSplit.length; i++) {
- const p = peSplit[i].toLowerCase();
- const ext = path10.substring(path10.length - p.length).toLowerCase();
- if (p && ext === p) {
- return true;
+ var fs$readdir = fs10.readdir;
+ fs10.readdir = readdir;
+ var noReaddirOptionVersions = /^v[0-5]\./;
+ function readdir(path10, options, cb) {
+ if (typeof options === "function")
+ cb = options, options = null;
+ var go$readdir = noReaddirOptionVersions.test(process.version) ? function go$readdir2(path11, options2, cb2, startTime) {
+ return fs$readdir(path11, fs$readdirCallback(
+ path11,
+ options2,
+ cb2,
+ startTime
+ ));
+ } : function go$readdir2(path11, options2, cb2, startTime) {
+ return fs$readdir(path11, options2, fs$readdirCallback(
+ path11,
+ options2,
+ cb2,
+ startTime
+ ));
+ };
+ return go$readdir(path10, options, cb);
+ function fs$readdirCallback(path11, options2, cb2, startTime) {
+ return function(err, files) {
+ if (err && (err.code === "EMFILE" || err.code === "ENFILE"))
+ enqueue([
+ go$readdir,
+ [path11, options2, cb2],
+ err,
+ startTime || Date.now(),
+ Date.now()
+ ]);
+ else {
+ if (files && files.sort)
+ files.sort();
+ if (typeof cb2 === "function")
+ cb2.call(this, err, files);
+ }
+ };
}
}
- return false;
- };
- var checkStat = (stat, path10, options) => stat.isFile() && checkPathExt(path10, options);
- }
-});
-
-// .yarn/cache/isexe-npm-3.1.1-9c0061eead-9ec2576540.zip/node_modules/isexe/dist/cjs/options.js
-var require_options = __commonJS({
- ".yarn/cache/isexe-npm-3.1.1-9c0061eead-9ec2576540.zip/node_modules/isexe/dist/cjs/options.js"(exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- }
-});
-
-// .yarn/cache/isexe-npm-3.1.1-9c0061eead-9ec2576540.zip/node_modules/isexe/dist/cjs/index.js
-var require_cjs = __commonJS({
- ".yarn/cache/isexe-npm-3.1.1-9c0061eead-9ec2576540.zip/node_modules/isexe/dist/cjs/index.js"(exports) {
- "use strict";
- var __createBinding2 = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) {
- if (k2 === void 0)
- k2 = k;
- var desc = Object.getOwnPropertyDescriptor(m, k);
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
- desc = { enumerable: true, get: function() {
- return m[k];
- } };
+ if (process.version.substr(0, 4) === "v0.8") {
+ var legStreams = legacy(fs10);
+ ReadStream = legStreams.ReadStream;
+ WriteStream = legStreams.WriteStream;
}
- Object.defineProperty(o, k2, desc);
- } : function(o, m, k, k2) {
- if (k2 === void 0)
- k2 = k;
- o[k2] = m[k];
- });
- var __setModuleDefault2 = exports && exports.__setModuleDefault || (Object.create ? function(o, v) {
- Object.defineProperty(o, "default", { enumerable: true, value: v });
- } : function(o, v) {
- o["default"] = v;
- });
- var __importStar2 = exports && exports.__importStar || function(mod) {
- if (mod && mod.__esModule)
- return mod;
- var result = {};
- if (mod != null) {
- for (var k in mod)
- if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k))
- __createBinding2(result, mod, k);
+ var fs$ReadStream = fs10.ReadStream;
+ if (fs$ReadStream) {
+ ReadStream.prototype = Object.create(fs$ReadStream.prototype);
+ ReadStream.prototype.open = ReadStream$open;
}
- __setModuleDefault2(result, mod);
- return result;
- };
- var __exportStar2 = exports && exports.__exportStar || function(m, exports2) {
- for (var p in m)
- if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports2, p))
- __createBinding2(exports2, m, p);
- };
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.sync = exports.isexe = exports.posix = exports.win32 = void 0;
- var posix = __importStar2(require_posix());
- exports.posix = posix;
- var win32 = __importStar2(require_win322());
- exports.win32 = win32;
- __exportStar2(require_options(), exports);
- var platform = process.env._ISEXE_TEST_PLATFORM_ || process.platform;
- var impl = platform === "win32" ? win32 : posix;
- exports.isexe = impl.isexe;
- exports.sync = impl.sync;
- }
-});
-
-// .yarn/cache/which-npm-4.0.0-dd31cd4928-449fa5c44e.zip/node_modules/which/lib/index.js
-var require_lib2 = __commonJS({
- ".yarn/cache/which-npm-4.0.0-dd31cd4928-449fa5c44e.zip/node_modules/which/lib/index.js"(exports, module2) {
- var { isexe, sync: isexeSync } = require_cjs();
- var { join: join2, delimiter, sep, posix } = require("path");
- var isWindows = 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
- ...isWindows ? [process.cwd()] : [],
- ...(optPath || /* istanbul ignore next: very unusual */
- "").split(optDelimiter)
- ];
- if (isWindows) {
- 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 };
+ var fs$WriteStream = fs10.WriteStream;
+ if (fs$WriteStream) {
+ WriteStream.prototype = Object.create(fs$WriteStream.prototype);
+ WriteStream.prototype.open = WriteStream$open;
}
- return { pathEnv, pathExt: [""] };
- };
- var getPathPart = (raw, cmd) => {
- const pathPart = /^".*"$/.test(raw) ? raw.slice(1, -1) : raw;
- const prefix = !pathPart && rRel.test(cmd) ? cmd.slice(0, 2) : "";
- return prefix + join2(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);
+ Object.defineProperty(fs10, "ReadStream", {
+ get: function() {
+ return ReadStream;
+ },
+ set: function(val) {
+ ReadStream = val;
+ },
+ enumerable: true,
+ configurable: true
+ });
+ Object.defineProperty(fs10, "WriteStream", {
+ get: function() {
+ return WriteStream;
+ },
+ set: function(val) {
+ WriteStream = val;
+ },
+ enumerable: true,
+ configurable: true
+ });
+ var FileReadStream = ReadStream;
+ Object.defineProperty(fs10, "FileReadStream", {
+ get: function() {
+ return FileReadStream;
+ },
+ set: function(val) {
+ FileReadStream = val;
+ },
+ enumerable: true,
+ configurable: true
+ });
+ var FileWriteStream = WriteStream;
+ Object.defineProperty(fs10, "FileWriteStream", {
+ get: function() {
+ return FileWriteStream;
+ },
+ set: function(val) {
+ FileWriteStream = val;
+ },
+ enumerable: true,
+ configurable: true
+ });
+ function ReadStream(path10, options) {
+ if (this instanceof ReadStream)
+ return fs$ReadStream.apply(this, arguments), this;
+ else
+ return ReadStream.apply(Object.create(ReadStream.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 WriteStream(path10, options) {
+ if (this instanceof WriteStream)
+ return fs$WriteStream.apply(this, arguments), this;
+ else
+ return WriteStream.apply(Object.create(WriteStream.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);
}
- }
+ });
}
- if (opt.all && found.length) {
- return found;
+ function createReadStream(path10, options) {
+ return new fs10.ReadStream(path10, options);
}
- if (opt.nothrow) {
- return null;
+ function createWriteStream(path10, options) {
+ return new fs10.WriteStream(path10, options);
}
- 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;
+ var fs$open = fs10.open;
+ fs10.open = open;
+ function open(path10, flags, mode, cb) {
+ if (typeof mode === "function")
+ cb = mode, mode = null;
+ return go$open(path10, flags, mode, cb);
+ function go$open(path11, flags2, mode2, cb2, startTime) {
+ return fs$open(path11, flags2, mode2, function(err, fd) {
+ if (err && (err.code === "EMFILE" || err.code === "ENFILE"))
+ enqueue([go$open, [path11, flags2, mode2, cb2], err, startTime || Date.now(), Date.now()]);
+ else {
+ if (typeof cb2 === "function")
+ cb2.apply(this, arguments);
}
- found.push(withExt);
- }
+ });
}
}
- if (opt.all && found.length) {
- return found;
- }
- if (opt.nothrow) {
- return null;
+ return fs10;
+ }
+ function enqueue(elem) {
+ debug2("ENQUEUE", elem[0].name, elem[1]);
+ fs9[gracefulQueue].push(elem);
+ retry();
+ }
+ var retryTimer;
+ function resetQueue() {
+ var now = Date.now();
+ for (var i = 0; i < fs9[gracefulQueue].length; ++i) {
+ if (fs9[gracefulQueue][i].length > 2) {
+ fs9[gracefulQueue][i][3] = now;
+ fs9[gracefulQueue][i][4] = now;
+ }
}
- throw getNotFoundError(cmd);
- };
- module2.exports = which3;
- which3.sync = whichSync;
- }
-});
-
-// .yarn/cache/is-windows-npm-1.0.2-898cd6f3d7-b32f418ab3.zip/node_modules/is-windows/index.js
-var require_is_windows = __commonJS({
- ".yarn/cache/is-windows-npm-1.0.2-898cd6f3d7-b32f418ab3.zip/node_modules/is-windows/index.js"(exports, module2) {
- (function(factory) {
- if (exports && typeof exports === "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();
+ retry();
+ }
+ function retry() {
+ clearTimeout(retryTimer);
+ retryTimer = void 0;
+ if (fs9[gracefulQueue].length === 0)
+ return;
+ var elem = fs9[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) {
+ debug2("RETRY", fn2.name, args);
+ fn2.apply(null, args);
+ } else if (Date.now() - startTime >= 6e4) {
+ debug2("TIMEOUT", fn2.name, args);
+ var cb = args.pop();
+ if (typeof cb === "function")
+ cb.call(null, err);
} else {
- this.isWindows = factory();
+ var sinceAttempt = Date.now() - lastTime;
+ var sinceStart = Math.max(lastTime - startTime, 1);
+ var desiredDelay = Math.min(sinceStart * 1.2, 100);
+ if (sinceAttempt >= desiredDelay) {
+ debug2("RETRY", fn2.name, args);
+ fn2.apply(null, args.concat([startTime]));
+ } else {
+ fs9[gracefulQueue].push(elem);
+ }
+ }
+ if (retryTimer === void 0) {
+ retryTimer = setTimeout(retry, 0);
}
- })(function() {
- "use strict";
- return function isWindows() {
- return process && (process.platform === "win32" || /^(msys|cygwin)$/.test(process.env.OSTYPE));
- };
- });
- }
-});
-
-// .yarn/cache/cmd-extension-npm-1.0.2-11aa204c4b-acdb425d51.zip/node_modules/cmd-extension/index.js
-var require_cmd_extension = __commonJS({
- ".yarn/cache/cmd-extension-npm-1.0.2-11aa204c4b-acdb425d51.zip/node_modules/cmd-extension/index.js"(exports, module2) {
- "use strict";
- var path10 = require("path");
- var cmdExtension;
- if (process.env.PATHEXT) {
- cmdExtension = process.env.PATHEXT.split(path10.delimiter).find((ext) => ext.toUpperCase() === ".CMD");
}
- module2.exports = cmdExtension || ".cmd";
}
});
@@ -39934,15 +20618,15 @@ var require_cmd_shim = __commonJS({
]);
function ingestOptions(opts) {
const opts_ = { ...DEFAULT_OPTIONS, ...opts };
- const fs8 = opts_.fs;
+ const fs9 = opts_.fs;
opts_.fs_ = {
- chmod: fs8.chmod ? (0, util_1.promisify)(fs8.chmod) : async () => {
+ chmod: fs9.chmod ? (0, util_1.promisify)(fs9.chmod) : async () => {
},
- mkdir: (0, util_1.promisify)(fs8.mkdir),
- readFile: (0, util_1.promisify)(fs8.readFile),
- stat: (0, util_1.promisify)(fs8.stat),
- unlink: (0, util_1.promisify)(fs8.unlink),
- writeFile: (0, util_1.promisify)(fs8.writeFile)
+ mkdir: (0, util_1.promisify)(fs9.mkdir),
+ readFile: (0, util_1.promisify)(fs9.readFile),
+ stat: (0, util_1.promisify)(fs9.stat),
+ unlink: (0, util_1.promisify)(fs9.unlink),
+ writeFile: (0, util_1.promisify)(fs9.writeFile)
};
return opts_;
}
@@ -41952,19 +22636,19 @@ function String2(descriptor, ...args) {
}
// package.json
-var version = "0.24.1";
+var version = "0.25.2";
// sources/Engine.ts
var import_fs3 = __toESM(require("fs"));
var import_path3 = __toESM(require("path"));
-var import_process2 = __toESM(require("process"));
+var import_process3 = __toESM(require("process"));
var import_semver3 = __toESM(require_semver2());
// config.json
var config_default = {
definitions: {
npm: {
- default: "10.3.0+sha1.554e1f13e4c09d581ad27cdc4a92f085ab74ce1a",
+ default: "10.4.0+sha1.904025b4d932cfaed8799e644a1c5ae7f02729fc",
fetchLatestFrom: {
type: "npm",
package: "npm"
@@ -42001,7 +22685,7 @@ var config_default = {
}
},
pnpm: {
- default: "8.14.1+sha1.d039b38e0b20ad012ed548e44267b8d4c88b447a",
+ default: "8.15.3+sha1.64838798f519c18029c1e8a1310e16101fc2eda0",
fetchLatestFrom: {
type: "npm",
package: "pnpm"
@@ -42065,7 +22749,7 @@ var config_default = {
package: "yarn"
},
transparent: {
- default: "4.0.2+sha224.4b7a50dfc3384e203b885efe2c3ff5e04e3a9c682c0a2f0df25c5e34",
+ default: "4.1.0+sha224.bc24d7f5afc738464f3d4e95f4e6e7829a35cee54a0fd527ea5baa83",
commands: [
[
"yarn",
@@ -42124,7 +22808,7 @@ var config_default = {
// sources/corepackUtils.ts
var import_crypto = require("crypto");
-var import_events = require("events");
+var import_events2 = require("events");
var import_fs2 = __toESM(require("fs"));
var import_module = __toESM(require("module"));
var import_path2 = __toESM(require("path"));
@@ -42139,27 +22823,19 @@ var import_fs = require("fs");
var import_os = require("os");
var import_path = require("path");
var import_process = __toESM(require("process"));
-function getInstallFolder() {
- if (import_process.default.env.COREPACK_HOME == null) {
- const oldCorepackDefaultHome = (0, import_path.join)((0, import_os.homedir)(), `.node`, `corepack`);
- const newCorepackDefaultHome = (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`
- );
- if ((0, import_fs.existsSync)(oldCorepackDefaultHome) && !(0, import_fs.existsSync)(newCorepackDefaultHome)) {
- (0, import_fs.mkdirSync)(newCorepackDefaultHome, { recursive: true });
- (0, import_fs.renameSync)(oldCorepackDefaultHome, newCorepackDefaultHome);
- }
- return newCorepackDefaultHome;
- }
+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) {
@@ -42188,53 +22864,66 @@ async function rimraf(path10) {
}
// sources/httpUtils.ts
-async function fetchUrlStream(url, options = {}) {
+var import_assert = __toESM(require("assert"));
+var import_events = require("events");
+var import_process2 = require("process");
+var import_stream = require("stream");
+async function fetch(input, init) {
if (process.env.COREPACK_ENABLE_NETWORK === `0`)
- throw new UsageError(`Network access disabled by the environment; can't reach ${url}`);
- const { default: https } = await import("https");
- const { ProxyAgent } = await Promise.resolve().then(() => __toESM(require_dist12()));
- const proxyAgent = new ProxyAgent();
- return new Promise((resolve, reject) => {
- const createRequest = (url2) => {
- const request = https.get(url2, { ...options, agent: proxyAgent }, (response) => {
- const statusCode = response.statusCode;
- if ([301, 302, 307, 308].includes(statusCode) && response.headers.location)
- return createRequest(response.headers.location);
- if (statusCode != null && statusCode >= 200 && statusCode < 300)
- return resolve(response);
- return reject(new Error(`Server answered with HTTP ${statusCode} when performing the request to ${url2}; for troubleshooting help, see https://github.com/nodejs/corepack#troubleshooting`));
- });
- request.on(`error`, (err) => {
- reject(new Error(`Error when performing the request to ${url2}; for troubleshooting help, see https://github.com/nodejs/corepack#troubleshooting`));
- });
- };
- createRequest(url);
- });
-}
-async function fetchAsBuffer(url, options) {
- const response = await fetchUrlStream(url, options);
- return new Promise((resolve, reject) => {
- const chunks = [];
- response.on(`data`, (chunk) => {
- chunks.push(chunk);
- });
- response.on(`error`, (error) => {
- reject(error);
- });
- response.on(`end`, () => {
- resolve(Buffer.concat(chunks));
- });
- });
-}
-async function fetchAsJson(url, options) {
- const buffer = await fetchAsBuffer(url, options);
- const asText = buffer.toString();
+ throw new UsageError(`Network access disabled by the environment; can't reach ${input}`);
+ const agent = await getProxyAgent(input);
+ let response;
try {
- return JSON.parse(asText);
+ response = await globalThis.fetch(input, {
+ ...init,
+ dispatcher: agent
+ });
} catch (error) {
- const truncated = asText.length > 30 ? `${asText.slice(0, 30)}...` : asText;
- throw new Error(`Couldn't parse JSON data: ${JSON.stringify(truncated)}`);
+ 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 || // n
+ chars[0][0] === 78) {
+ throw new UsageError(`Aborted by the user`);
+ }
+ }
+ }
+ 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;
+}
+async function getProxyAgent(input) {
+ const { getProxyForUrl } = await Promise.resolve().then(() => __toESM(require_proxy_from_env()));
+ const proxy = getProxyForUrl(input);
+ if (!proxy)
+ return void 0;
+ const { default: ProxyAgent } = await Promise.resolve().then(() => __toESM(require_proxy_agent()));
+ return new ProxyAgent(proxy);
}
// sources/npmRegistryUtils.ts
@@ -42344,25 +23033,52 @@ async function findInstalledVersion(installTarget, descriptor) {
}
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: [] };
+}
async function installVersion(installTarget, locator, { spec }) {
- const { default: tar } = await Promise.resolve().then(() => __toESM(require_tar()));
- const { version: version2, build } = import_semver.default.parse(locator.reference);
+ const locatorIsASupportedPackageManager = isSupportedPackageManagerLocator(locator);
+ const locatorReference = locatorIsASupportedPackageManager ? import_semver.default.parse(locator.reference) : parseURLReference(locator);
+ const { version: version2, build } = locatorReference;
const installFolder = import_path2.default.join(installTarget, locator.name, version2);
- const corepackFile = import_path2.default.join(installFolder, `.corepack`);
- if (import_fs2.default.existsSync(corepackFile)) {
+ try {
+ const corepackFile = import_path2.default.join(installFolder, `.corepack`);
const corepackContent = await import_fs2.default.promises.readFile(corepackFile, `utf8`);
const corepackData = JSON.parse(corepackContent);
log(`Reusing ${locator.name}@${locator.reference}`);
return {
hash: corepackData.hash,
- location: installFolder
+ location: installFolder,
+ bin: corepackData.bin
};
+ } catch (err) {
+ if (err?.code !== `ENOENT`) {
+ throw err;
+ }
+ }
+ let url;
+ if (locatorIsASupportedPackageManager) {
+ const defaultNpmRegistryURL = spec.url.replace(`{}`, version2);
+ url = process.env.COREPACK_NPM_REGISTRY ? defaultNpmRegistryURL.replace(
+ DEFAULT_NPM_REGISTRY_URL,
+ () => process.env.COREPACK_NPM_REGISTRY
+ ) : defaultNpmRegistryURL;
+ } else {
+ url = decodeURIComponent(version2);
}
- const defaultNpmRegistryURL = spec.url.replace(`{}`, version2);
- const url = process.env.COREPACK_NPM_REGISTRY ? defaultNpmRegistryURL.replace(
- DEFAULT_NPM_REGISTRY_URL,
- () => process.env.COREPACK_NPM_REGISTRY
- ) : defaultNpmRegistryURL;
const tmpFolder = getTemporaryFolder(installTarget);
log(`Installing ${locator.name}@${version2} from ${url} to ${tmpFolder}`);
const stream = await fetchUrlStream(url);
@@ -42371,6 +23087,7 @@ async function installVersion(installTarget, locator, { spec }) {
let outputFile = null;
let sendTo;
if (ext === `.tgz`) {
+ const { default: tar } = await Promise.resolve().then(() => __toESM(require_tar()));
sendTo = tar.x({ strip: 1, cwd: tmpFolder });
} else if (ext === `.js`) {
outputFile = import_path2.default.join(tmpFolder, import_path2.default.posix.basename(parsedUrl.pathname));
@@ -42379,19 +23096,24 @@ async function installVersion(installTarget, locator, { spec }) {
stream.pipe(sendTo);
const algo = build[0] ?? `sha256`;
const hash = stream.pipe((0, import_crypto.createHash)(algo));
- await (0, import_events.once)(sendTo, `finish`);
+ await (0, import_events2.once)(sendTo, `finish`);
+ let bin;
+ if (!locatorIsASupportedPackageManager) {
+ if (ext === `.tgz`) {
+ bin = require(import_path2.default.join(tmpFolder, `package.json`)).bin;
+ } else if (ext === `.js`) {
+ bin = [locator.name];
+ }
+ }
const actualHash = hash.digest(`hex`);
if (build[1] && actualHash !== build[1])
throw new Error(`Mismatch hashes. Expected ${build[1]}, got ${actualHash}`);
const serializedHash = `${algo}.${actualHash}`;
await import_fs2.default.promises.writeFile(import_path2.default.join(tmpFolder, `.corepack`), JSON.stringify({
locator,
+ bin,
hash: serializedHash
}));
- await import_fs2.default.promises.rm(installFolder, {
- recursive: true,
- force: true
- });
await import_fs2.default.promises.mkdir(import_path2.default.dirname(installFolder), { recursive: true });
try {
await import_fs2.default.promises.rename(tmpFolder, installFolder);
@@ -42404,9 +23126,31 @@ async function installVersion(installTarget, locator, { spec }) {
throw err;
}
}
+ if (locatorIsASupportedPackageManager && process.env.COREPACK_DEFAULT_TO_LATEST !== `0`) {
+ let lastKnownGoodFile;
+ try {
+ lastKnownGoodFile = await getLastKnownGoodFile(`r+`);
+ const lastKnownGood = await getJSONFileContent(lastKnownGoodFile);
+ const defaultVersion = getLastKnownGoodFromFileContent(lastKnownGood, locator.name);
+ if (defaultVersion) {
+ const currentDefault = import_semver.default.parse(defaultVersion);
+ const downloadedVersion = locatorReference;
+ if (currentDefault.major === downloadedVersion.major && import_semver.default.lt(currentDefault, downloadedVersion)) {
+ await activatePackageManagerFromFileHandle(lastKnownGoodFile, lastKnownGood, locator);
+ }
+ }
+ } catch (err) {
+ if (err?.code !== `ENOENT`) {
+ throw err;
+ }
+ } finally {
+ await lastKnownGoodFile?.close();
+ }
+ }
log(`Install finished`);
return {
location: installFolder,
+ bin,
hash: serializedHash
};
}
@@ -42492,6 +23236,43 @@ function isSupportedPackageManager(value) {
}
// sources/Engine.ts
+function getLastKnownGoodFile(flag = `r`) {
+ return import_fs3.default.promises.open(import_path3.default.join(getCorepackHomeFolder(), `lastKnownGood.json`), flag);
+}
+async function createLastKnownGoodFile() {
+ await import_fs3.default.promises.mkdir(getCorepackHomeFolder(), { recursive: true });
+ return getLastKnownGoodFile(`w`);
+}
+async function getJSONFileContent(fh) {
+ let lastKnownGood;
+ try {
+ lastKnownGood = JSON.parse(await fh.readFile(`utf8`));
+ } catch {
+ return void 0;
+ }
+ return lastKnownGood;
+}
+async function overwriteJSONFileContent(fh, content) {
+ await fh.truncate(0);
+ await fh.write(`${JSON.stringify(content, null, 2)}
+`, 0);
+}
+function getLastKnownGoodFromFileContent(lastKnownGood, packageManager) {
+ if (typeof lastKnownGood === `object` && lastKnownGood !== null && Object.hasOwn(lastKnownGood, packageManager)) {
+ const override = lastKnownGood[packageManager];
+ if (typeof override === `string`) {
+ return override;
+ }
+ }
+ return void 0;
+}
+async function activatePackageManagerFromFileHandle(lastKnownGoodFile, lastKnownGood, locator) {
+ if (typeof lastKnownGood !== `object` || lastKnownGood === null)
+ lastKnownGood = {};
+ lastKnownGood[locator.name] = locator.reference;
+ log(`Setting ${locator.name}@${locator.reference} as Last Known Good version`);
+ await overwriteJSONFileContent(lastKnownGoodFile, lastKnownGood);
+}
var Engine = class {
constructor(config = config_default) {
this.config = config;
@@ -42508,6 +23289,22 @@ var Engine = class {
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 UsageError(`This package manager (${locator.name}) isn't supported by this corepack build`);
@@ -42537,45 +23334,53 @@ var Engine = class {
const definition = this.config.definitions[packageManager];
if (typeof definition === `undefined`)
throw new UsageError(`This package manager (${packageManager}) isn't supported by this corepack build`);
- let lastKnownGood;
+ let lastKnownGoodFile = await getLastKnownGoodFile(`r+`).catch((err) => {
+ if (err?.code !== `ENOENT`) {
+ throw err;
+ }
+ });
try {
- lastKnownGood = JSON.parse(await import_fs3.default.promises.readFile(this.getLastKnownGoodFile(), `utf8`));
- } catch {
- }
- if (typeof lastKnownGood === `object` && lastKnownGood !== null && Object.hasOwn(lastKnownGood, packageManager)) {
- const override = lastKnownGood[packageManager];
- if (typeof override === `string`) {
- return override;
+ const lastKnownGood = lastKnownGoodFile == null || await getJSONFileContent(lastKnownGoodFile);
+ const lastKnownGoodForThisPackageManager = getLastKnownGoodFromFileContent(lastKnownGood, packageManager);
+ if (lastKnownGoodForThisPackageManager)
+ return lastKnownGoodForThisPackageManager;
+ if (import_process3.default.env.COREPACK_DEFAULT_TO_LATEST === `0`)
+ return definition.default;
+ const reference = await fetchLatestStableVersion2(definition.fetchLatestFrom);
+ try {
+ lastKnownGoodFile ??= await createLastKnownGoodFile();
+ await activatePackageManagerFromFileHandle(lastKnownGoodFile, lastKnownGood, {
+ name: packageManager,
+ reference
+ });
+ } catch {
}
+ return reference;
+ } finally {
+ await lastKnownGoodFile?.close();
}
- if (import_process2.default.env.COREPACK_DEFAULT_TO_LATEST === `0`)
- return definition.default;
- const reference = await fetchLatestStableVersion2(definition.fetchLatestFrom);
- await this.activatePackageManager({
- name: packageManager,
- reference
- });
- return reference;
}
async activatePackageManager(locator) {
- const lastKnownGoodFile = this.getLastKnownGoodFile();
- let lastKnownGood;
+ let emptyFile = false;
+ const lastKnownGoodFile = await getLastKnownGoodFile(`r+`).catch((err) => {
+ if (err?.code === `ENOENT`) {
+ emptyFile = true;
+ return getLastKnownGoodFile(`w`);
+ }
+ throw err;
+ });
try {
- lastKnownGood = JSON.parse(await import_fs3.default.promises.readFile(lastKnownGoodFile, `utf8`));
- } catch {
+ await activatePackageManagerFromFileHandle(lastKnownGoodFile, emptyFile || await getJSONFileContent(lastKnownGoodFile), locator);
+ } finally {
+ await lastKnownGoodFile.close();
}
- if (typeof lastKnownGood !== `object` || lastKnownGood === null)
- lastKnownGood = {};
- lastKnownGood[locator.name] = locator.reference;
- await import_fs3.default.promises.mkdir(import_path3.default.dirname(lastKnownGoodFile), { recursive: true });
- await import_fs3.default.promises.writeFile(lastKnownGoodFile, `${JSON.stringify(lastKnownGood, null, 2)}
-`);
}
async ensurePackageManager(locator) {
const spec = this.getPackageManagerSpecFor(locator);
const packageManagerInfo = await installVersion(getInstallFolder(), locator, {
spec
});
+ spec.bin ??= packageManagerInfo.bin;
return {
...packageManagerInfo,
locator,
@@ -42585,6 +23390,14 @@ var Engine = class {
async fetchAvailableVersions() {
}
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 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 UsageError(`This package manager (${descriptor.name}) isn't supported by this corepack build`);
@@ -42620,15 +23433,30 @@ var Engine = class {
return null;
return { name: finalDescriptor.name, reference: highestVersion[0] };
}
- getLastKnownGoodFile() {
- return import_path3.default.join(getInstallFolder(), `lastKnownGood.json`);
+};
+
+// sources/commands/Cache.ts
+var import_fs4 = __toESM(require("fs"));
+var CacheCommand = class extends Command {
+ static paths = [
+ [`cache`, `clean`],
+ [`cache`, `clear`]
+ ];
+ static usage = Command.Usage({
+ description: `Cleans Corepack cache`,
+ details: `
+ Removes Corepack cache directory from your local disk.
+ `
+ });
+ async execute() {
+ await import_fs4.default.promises.rm(getInstallFolder(), { recursive: true, force: true });
}
};
// sources/commands/Disable.ts
-var import_fs4 = __toESM(require("fs"));
+var import_fs5 = __toESM(require("fs"));
var import_path4 = __toESM(require("path"));
-var import_which = __toESM(require_lib2());
+var import_which = __toESM(require_lib());
var DisableCommand = class extends Command {
static paths = [
[`disable`]
@@ -42675,7 +23503,7 @@ var DisableCommand = class extends Command {
async removePosixLink(installDirectory, binName) {
const file = import_path4.default.join(installDirectory, binName);
try {
- await import_fs4.default.promises.unlink(file);
+ await import_fs5.default.promises.unlink(file);
} catch (err) {
if (err.code !== `ENOENT`) {
throw err;
@@ -42686,7 +23514,7 @@ var DisableCommand = class extends Command {
for (const ext of [``, `.ps1`, `.cmd`]) {
const file = import_path4.default.join(installDirectory, `${binName}${ext}`);
try {
- await import_fs4.default.promises.unlink(file);
+ await import_fs5.default.promises.unlink(file);
} catch (err) {
if (err.code !== `ENOENT`) {
throw err;
@@ -42698,9 +23526,9 @@ var DisableCommand = class extends Command {
// sources/commands/Enable.ts
var import_cmd_shim = __toESM(require_cmd_shim());
-var import_fs5 = __toESM(require("fs"));
+var import_fs6 = __toESM(require("fs"));
var import_path5 = __toESM(require("path"));
-var import_which2 = __toESM(require_lib2());
+var import_which2 = __toESM(require_lib());
var EnableCommand = class extends Command {
static paths = [
[`enable`]
@@ -42731,10 +23559,10 @@ var EnableCommand = class extends Command {
let installDirectory = this.installDirectory;
if (typeof installDirectory === `undefined`)
installDirectory = import_path5.default.dirname(await (0, import_which2.default)(`corepack`));
- installDirectory = import_fs5.default.realpathSync(installDirectory);
+ installDirectory = import_fs6.default.realpathSync(installDirectory);
const manifestPath = require.resolve("corepack/package.json");
const distFolder = import_path5.default.join(import_path5.default.dirname(manifestPath), `dist`);
- if (!import_fs5.default.existsSync(distFolder))
+ if (!import_fs6.default.existsSync(distFolder))
throw new Error(`Assertion failed: The stub folder doesn't exist`);
const names = this.names.length === 0 ? SupportedPackageManagerSetWithoutNpm : this.names;
for (const name of new Set(names)) {
@@ -42752,15 +23580,15 @@ var EnableCommand = class extends Command {
async generatePosixLink(installDirectory, distFolder, binName) {
const file = import_path5.default.join(installDirectory, binName);
const symlink = import_path5.default.relative(installDirectory, import_path5.default.join(distFolder, `${binName}.js`));
- if (import_fs5.default.existsSync(file)) {
- const currentSymlink = await import_fs5.default.promises.readlink(file);
+ if (import_fs6.default.existsSync(file)) {
+ const currentSymlink = await import_fs6.default.promises.readlink(file);
if (currentSymlink !== symlink) {
- await import_fs5.default.promises.unlink(file);
+ await import_fs6.default.promises.unlink(file);
} else {
return;
}
}
- await import_fs5.default.promises.symlink(symlink, file);
+ await import_fs6.default.promises.symlink(symlink, file);
}
async generateWin32Link(installDirectory, distFolder, binName) {
const file = import_path5.default.join(installDirectory, binName);
@@ -42771,29 +23599,48 @@ var EnableCommand = class extends Command {
};
// sources/commands/InstallGlobal.ts
-var import_fs8 = __toESM(require("fs"));
+var import_fs9 = __toESM(require("fs"));
var import_path7 = __toESM(require("path"));
// sources/specUtils.ts
-var import_fs6 = __toESM(require("fs"));
+var import_fs7 = __toESM(require("fs"));
var import_path6 = __toESM(require("path"));
var import_semver4 = __toESM(require_semver2());
var nodeModulesRegExp = /[\\/]node_modules[\\/](@[^\\/]*[\\/])?([^@\\/][^\\/]*)$/;
function parseSpec(raw, source, { enforceExactVersion = true } = {}) {
if (typeof raw !== `string`)
throw new UsageError(`Invalid package manager specification in ${source}; expected a string`);
- const match = raw.match(/^(?!_)([^@]+)(?:@(.+))?$/);
- if (match === null || enforceExactVersion && (!match[2] || !import_semver4.default.valid(match[2])))
- throw new UsageError(`Invalid package manager specification in ${source} (${raw}); expected a semver version${enforceExactVersion ? `` : `, range, or tag`}`);
- if (!isSupportedPackageManager(match[1]))
- throw new UsageError(`Unsupported package manager specification (${match})`);
+ const atIndex = raw.indexOf(`@`);
+ if (atIndex === -1 || atIndex === raw.length - 1) {
+ if (enforceExactVersion)
+ throw new UsageError(`No version specified for ${raw} in "packageManager" of ${source}`);
+ const name2 = atIndex === -1 ? raw : raw.slice(0, -1);
+ if (!isSupportedPackageManager(name2))
+ throw new UsageError(`Unsupported package manager specification (${name2})`);
+ return {
+ name: name2,
+ range: `*`
+ };
+ }
+ const name = raw.slice(0, atIndex);
+ const range = raw.slice(atIndex + 1);
+ const isURL = URL.canParse(range);
+ if (!isURL) {
+ if (enforceExactVersion && !import_semver4.default.valid(range))
+ throw new UsageError(`Invalid package manager specification in ${source} (${raw}); expected a semver version${enforceExactVersion ? `` : `, range, or tag`}`);
+ if (!isSupportedPackageManager(name)) {
+ throw new UsageError(`Unsupported package manager specification (${raw})`);
+ }
+ } else if (isSupportedPackageManager(name) && process.env.COREPACK_ENABLE_UNSAFE_CUSTOM_URLS !== `1`) {
+ throw new 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 (${raw})`);
+ }
return {
- name: match[1],
- range: match[2] ?? `*`
+ name,
+ range
};
}
async function findProjectSpec(initialCwd, locator, { transparent = false } = {}) {
- const fallbackLocator = { name: locator.name, range: locator.reference };
+ const fallbackLocator = { name: locator.name, range: `${locator.reference}` };
if (process.env.COREPACK_ENABLE_PROJECT_SPEC === `0`)
return fallbackLocator;
if (process.env.COREPACK_ENABLE_STRICT === `0`)
@@ -42831,7 +23678,7 @@ async function loadSpec(initialCwd) {
const manifestPath = import_path6.default.join(currCwd, `package.json`);
let content;
try {
- content = await import_fs6.default.promises.readFile(manifestPath, `utf8`);
+ content = await import_fs7.default.promises.readFile(manifestPath, `utf8`);
} catch (err) {
if (err?.code === `ENOENT`)
continue;
@@ -42859,7 +23706,7 @@ async function loadSpec(initialCwd) {
}
// sources/commands/Base.ts
-var import_fs7 = __toESM(require("fs"));
+var import_fs8 = __toESM(require("fs"));
// sources/nodeUtils.ts
var import_os2 = __toESM(require("os"));
@@ -42901,10 +23748,8 @@ function readPackageJson(content) {
// sources/commands/Base.ts
var BaseCommand = class extends Command {
- async resolvePatternsToDescriptors({ all, patterns }) {
- if (all && patterns.length > 0)
- throw new UsageError(`The --all option cannot be used along with an explicit package manager specification`);
- const resolvedSpecs = all ? await this.context.engine.getDefaultDescriptors() : patterns.map((pattern) => parseSpec(pattern, `CLI arguments`, { enforceExactVersion: false }));
+ 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) {
@@ -42921,13 +23766,13 @@ var BaseCommand = class extends Command {
}
async setLocalPackageManager(info) {
const lookup = await loadSpec(this.context.cwd);
- const content = lookup.type !== `NoProject` ? await import_fs7.default.promises.readFile(lookup.target, `utf8`) : ``;
+ const content = lookup.type !== `NoProject` ? await import_fs8.default.promises.readFile(lookup.target, `utf8`) : ``;
const { data, indent } = readPackageJson(content);
const previousPackageManager = data.packageManager ?? `unknown`;
data.packageManager = `${info.locator.name}@${info.locator.reference}+${info.hash}`;
const newContent = normalizeLineEndings(content, `${JSON.stringify(data, null, indent)}
`);
- await import_fs7.default.promises.writeFile(lookup.target, newContent, `utf8`);
+ await import_fs8.default.promises.writeFile(lookup.target, newContent, `utf8`);
const command = this.context.engine.getPackageManagerSpecFor(info.locator).commands?.use ?? null;
if (command === null)
return 0;
@@ -42955,34 +23800,25 @@ var InstallGlobalCommand = class extends BaseCommand {
`Install the latest version of Yarn 1.x and make it globally available`,
`corepack install -g yarn@^1`
], [
- `Install the latest version of all available package managers, and make them globally available`,
- `corepack install -g --all`
+ `Install the latest version of pnpm, and make it globally available`,
+ `corepack install -g pnpm`
]]
});
global = options_exports.Boolean(`-g,--global`, {
required: true
});
- all = options_exports.Boolean(`--all`, false, {
- description: `If true, all available default package managers will be installed`
- });
cacheOnly = options_exports.Boolean(`--cache-only`, false, {
description: `If true, the package managers will only be cached, not set as new defaults`
});
args = options_exports.Rest();
async execute() {
- if (this.args.length === 0 && !this.all)
- throw new UsageError(`No package managers specified; use --all to install all available package managers, or specify one or more package managers to proceed`);
- if (!this.all) {
- for (const arg of this.args) {
- if (arg.endsWith(`.tgz`)) {
- await this.installFromTarball(import_path7.default.resolve(this.context.cwd, arg));
- } else {
- await this.installFromDescriptor(parseSpec(arg, `CLI arguments`, { enforceExactVersion: false }));
- }
- }
- } else {
- for (const descriptor of await this.context.engine.getDefaultDescriptors()) {
- await this.installFromDescriptor(descriptor);
+ if (this.args.length === 0)
+ throw new UsageError(`No package managers specified`);
+ for (const arg of this.args) {
+ if (arg.endsWith(`.tgz`)) {
+ await this.installFromTarball(import_path7.default.resolve(this.context.cwd, arg));
+ } else {
+ await this.installFromDescriptor(parseSpec(arg, `CLI arguments`, { enforceExactVersion: false }));
}
}
}
@@ -43030,7 +23866,7 @@ var InstallGlobalCommand = class extends BaseCommand {
if (!isSupportedPackageManager(name))
throw new UsageError(`Unsupported package manager '${name}'`);
this.log({ name, reference });
- await import_fs8.default.promises.mkdir(installFolder, { recursive: true });
+ await import_fs9.default.promises.mkdir(installFolder, { recursive: true });
await tar.x({ file: p, cwd: installFolder }, [`${name}/${reference}`]);
if (!this.cacheOnly) {
await this.context.engine.activatePackageManager({ name, reference });
@@ -43057,7 +23893,6 @@ var InstallLocalCommand = class extends BaseCommand {
});
async execute() {
const [descriptor] = await this.resolvePatternsToDescriptors({
- all: false,
patterns: []
});
const resolved = await this.context.engine.resolveDescriptor(descriptor, { allowTags: true });
@@ -43087,14 +23922,8 @@ var PackCommand = class extends BaseCommand {
], [
`Pack the latest version of Yarn 1.x inside a file named corepack.tgz`,
`corepack pack yarn@^1`
- ], [
- `Pack the latest versions of all supported package managers inside a file named everything.tgz`,
- `corepack pack --all -o everything.tgz`
]]
});
- all = options_exports.Boolean(`--all`, false, {
- description: `If true, all available default package managers will be installed`
- });
json = options_exports.Boolean(`--json`, false, {
description: `If true, the path to the generated tarball will be printed on stdout`
});
@@ -43104,7 +23933,6 @@ var PackCommand = class extends BaseCommand {
patterns = options_exports.Rest();
async execute() {
const descriptors = await this.resolvePatternsToDescriptors({
- all: this.all,
patterns: this.patterns
});
const installLocations = [];
@@ -43166,7 +23994,6 @@ var UpCommand = class extends BaseCommand {
});
async execute() {
const [descriptor] = await this.resolvePatternsToDescriptors({
- all: false,
patterns: []
});
if (!import_semver5.default.valid(descriptor.range) && !import_semver5.default.validRange(descriptor.range))
@@ -43174,7 +24001,7 @@ var UpCommand = class extends BaseCommand {
const resolved = await this.context.engine.resolveDescriptor(descriptor, { useCache: false });
if (!resolved)
throw new UsageError(`Failed to successfully resolve '${descriptor.range}' to a valid ${descriptor.name} release`);
- const majorVersion = import_semver5.default.major(resolved?.reference);
+ const majorVersion = import_semver5.default.major(resolved.reference);
const majorDescriptor = { name: descriptor.name, range: `^${majorVersion}.0.0` };
const highestVersion = await this.context.engine.resolveDescriptor(majorDescriptor, { useCache: false });
if (!highestVersion)
@@ -43206,7 +24033,6 @@ var UseCommand = class extends BaseCommand {
pattern = options_exports.String();
async execute() {
const [descriptor] = await this.resolvePatternsToDescriptors({
- all: false,
patterns: [this.pattern]
});
const resolved = await this.context.engine.resolveDescriptor(descriptor, { allowTags: true, useCache: false });
@@ -43281,9 +24107,6 @@ var PrepareCommand = class extends Command {
activate = options_exports.Boolean(`--activate`, false, {
description: `If true, this release will become the default one for this package manager`
});
- all = options_exports.Boolean(`--all`, false, {
- description: `If true, all available default package managers will be installed`
- });
json = options_exports.Boolean(`--json`, false, {
description: `If true, the output will be the path of the generated tarball`
});
@@ -43293,9 +24116,7 @@ var PrepareCommand = class extends Command {
});
specs = options_exports.Rest();
async execute() {
- if (this.all && this.specs.length > 0)
- throw new UsageError(`The --all option cannot be used along with an explicit package manager specification`);
- const specs = this.all ? await this.context.engine.getDefaultDescriptors() : this.specs;
+ const specs = this.specs;
const installLocations = [];
if (specs.length === 0) {
const lookup = await loadSpec(this.context.cwd);
@@ -43368,7 +24189,7 @@ function getPackageManagerRequestFromCli(parameter, context) {
return null;
const [, binaryName, binaryVersion] = match;
const packageManager = context.engine.getPackageManagerFor(binaryName);
- if (!packageManager)
+ if (packageManager == null && binaryVersion == null)
return null;
return {
packageManager,
@@ -43377,20 +24198,26 @@ function getPackageManagerRequestFromCli(parameter, context) {
};
}
async function executePackageManagerRequest({ packageManager, binaryName, binaryVersion }, args, context) {
- const defaultVersion = await context.engine.getDefaultVersion(packageManager);
- const definition = context.engine.config.definitions[packageManager];
+ let fallbackLocator = {
+ name: binaryName,
+ reference: void 0
+ };
let isTransparentCommand = false;
- for (const transparentPath of definition.transparent.commands) {
- if (transparentPath[0] === binaryName && transparentPath.slice(1).every((segment, index) => segment === args[index])) {
- isTransparentCommand = true;
- break;
+ if (packageManager != null) {
+ const defaultVersion = await context.engine.getDefaultVersion(packageManager);
+ const definition = context.engine.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 fallbackReference = isTransparentCommand ? definition.transparent.default ?? defaultVersion : defaultVersion;
- const fallbackLocator = {
- name: packageManager,
- reference: fallbackReference
- };
let descriptor;
try {
descriptor = await findProjectSpec(context.cwd, fallbackLocator, { transparent: isTransparentCommand });
@@ -43426,6 +24253,7 @@ async function runMain(argv) {
});
cli.register(builtins_exports.HelpCommand);
cli.register(builtins_exports.VersionCommand);
+ cli.register(CacheCommand);
cli.register(DisableCommand);
cli.register(EnableCommand);
cli.register(InstallGlobalCommand);
@@ -43460,6 +24288,9 @@ async function runMain(argv) {
});
/*! Bundled license information:
+undici/lib/fetch/body.js:
+ (*! formdata-polyfill. MIT License. Jimmy Wärting *)
+
is-windows/index.js:
(*!
* is-windows
diff --git a/deps/corepack/dist/npm.js b/deps/corepack/dist/npm.js
index 64b10d8f2a68f4..7d10ba5bdf36b2 100755
--- a/deps/corepack/dist/npm.js
+++ b/deps/corepack/dist/npm.js
@@ -1,2 +1,3 @@
#!/usr/bin/env node
+process.env.COREPACK_ENABLE_DOWNLOAD_PROMPT??='1'
require('./lib/corepack.cjs').runMain(['npm', ...process.argv.slice(2)]);
\ No newline at end of file
diff --git a/deps/corepack/dist/npx.js b/deps/corepack/dist/npx.js
index ba00ed82e281c1..a8bd3e69014313 100755
--- a/deps/corepack/dist/npx.js
+++ b/deps/corepack/dist/npx.js
@@ -1,2 +1,3 @@
#!/usr/bin/env node
+process.env.COREPACK_ENABLE_DOWNLOAD_PROMPT??='1'
require('./lib/corepack.cjs').runMain(['npx', ...process.argv.slice(2)]);
\ No newline at end of file
diff --git a/deps/corepack/dist/pnpm.js b/deps/corepack/dist/pnpm.js
index 0e0297f2d26f79..a0a87263435562 100755
--- a/deps/corepack/dist/pnpm.js
+++ b/deps/corepack/dist/pnpm.js
@@ -1,2 +1,3 @@
#!/usr/bin/env node
+process.env.COREPACK_ENABLE_DOWNLOAD_PROMPT??='1'
require('./lib/corepack.cjs').runMain(['pnpm', ...process.argv.slice(2)]);
\ No newline at end of file
diff --git a/deps/corepack/dist/pnpx.js b/deps/corepack/dist/pnpx.js
index 11cc7b89b71fa9..57ad4842631cd7 100755
--- a/deps/corepack/dist/pnpx.js
+++ b/deps/corepack/dist/pnpx.js
@@ -1,2 +1,3 @@
#!/usr/bin/env node
+process.env.COREPACK_ENABLE_DOWNLOAD_PROMPT??='1'
require('./lib/corepack.cjs').runMain(['pnpx', ...process.argv.slice(2)]);
\ No newline at end of file
diff --git a/deps/corepack/dist/yarn.js b/deps/corepack/dist/yarn.js
index f8d38757d35e64..eaed8596eabaa3 100755
--- a/deps/corepack/dist/yarn.js
+++ b/deps/corepack/dist/yarn.js
@@ -1,2 +1,3 @@
#!/usr/bin/env node
+process.env.COREPACK_ENABLE_DOWNLOAD_PROMPT??='1'
require('./lib/corepack.cjs').runMain(['yarn', ...process.argv.slice(2)]);
\ No newline at end of file
diff --git a/deps/corepack/dist/yarnpkg.js b/deps/corepack/dist/yarnpkg.js
index 8d3eef0295c8be..aada6032fa67ff 100755
--- a/deps/corepack/dist/yarnpkg.js
+++ b/deps/corepack/dist/yarnpkg.js
@@ -1,2 +1,3 @@
#!/usr/bin/env node
+process.env.COREPACK_ENABLE_DOWNLOAD_PROMPT??='1'
require('./lib/corepack.cjs').runMain(['yarnpkg', ...process.argv.slice(2)]);
\ No newline at end of file
diff --git a/deps/corepack/package.json b/deps/corepack/package.json
index 3078dad70f0997..391eb749c82d65 100644
--- a/deps/corepack/package.json
+++ b/deps/corepack/package.json
@@ -1,6 +1,6 @@
{
"name": "corepack",
- "version": "0.24.1",
+ "version": "0.25.2",
"homepage": "https://github.com/nodejs/corepack#readme",
"bugs": {
"url": "https://github.com/nodejs/corepack/issues"
@@ -10,13 +10,13 @@
"url": "https://github.com/nodejs/corepack.git"
},
"engines": {
- "node": ">=18.17.1"
+ "node": "^18.17.1 || >=20.10.0"
},
"exports": {
"./package.json": "./package.json"
},
"license": "MIT",
- "packageManager": "yarn@4.0.2+sha256.825003a0f561ad09a3b1ac4a3b3ea6207af2796d54f62a9420520915721f5186",
+ "packageManager": "yarn@4.1.0+sha224.bc24d7f5afc738464f3d4e95f4e6e7829a35cee54a0fd527ea5baa83",
"devDependencies": {
"@babel/core": "^7.14.3",
"@babel/plugin-transform-modules-commonjs": "^7.14.0",
@@ -25,6 +25,7 @@
"@types/debug": "^4.1.5",
"@types/jest": "^29.0.0",
"@types/node": "^20.4.6",
+ "@types/proxy-from-env": "^1",
"@types/semver": "^7.1.0",
"@types/tar": "^6.0.0",
"@types/which": "^3.0.0",
@@ -40,13 +41,13 @@
"eslint": "^8.0.0",
"eslint-plugin-arca": "^0.16.0",
"jest": "^29.0.0",
- "nock": "^13.0.4",
- "proxy-agent": "^6.2.2",
+ "proxy-from-env": "^1.1.0",
"semver": "^7.5.2",
"supports-color": "^9.0.0",
"tar": "^6.0.1",
"ts-node": "^10.0.0",
"typescript": "^5.0.4",
+ "undici": "^6.6.1",
"v8-compile-cache": "^2.3.0",
"which": "^4.0.0"
},
@@ -95,9 +96,6 @@
"./shims/yarnpkg.ps1"
]
},
- "resolutions": {
- "vm2": "portal:./vm2"
- },
"bin": {
"corepack": "./dist/corepack.js",
"pnpm": "./dist/pnpm.js",
diff --git a/deps/ngtcp2/ngtcp2/lib/includes/ngtcp2/version.h b/deps/ngtcp2/ngtcp2/lib/includes/ngtcp2/version.h
index b102eae8f9ec77..801c6cb2681386 100644
--- a/deps/ngtcp2/ngtcp2/lib/includes/ngtcp2/version.h
+++ b/deps/ngtcp2/ngtcp2/lib/includes/ngtcp2/version.h
@@ -36,7 +36,7 @@
*
* Version number of the ngtcp2 library release.
*/
-#define NGTCP2_VERSION "1.2.0"
+#define NGTCP2_VERSION "1.3.0"
/**
* @macro
@@ -46,6 +46,6 @@
* number, 8 bits for minor and 8 bits for patch. Version 1.2.3
* becomes 0x010203.
*/
-#define NGTCP2_VERSION_NUM 0x010200
+#define NGTCP2_VERSION_NUM 0x010300
#endif /* VERSION_H */
diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_buf.h b/deps/ngtcp2/ngtcp2/lib/ngtcp2_buf.h
index 107d413382da20..85b5f4ddf0464a 100644
--- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_buf.h
+++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_buf.h
@@ -36,7 +36,7 @@ typedef struct ngtcp2_buf {
uint8_t *begin;
/* end points to the one beyond of the last byte of the buffer */
uint8_t *end;
- /* pos pointers to the start of data. Typically, this points to the
+ /* pos points to the start of data. Typically, this points to the
point that next data should be read. Initially, it points to
|begin|. */
uint8_t *pos;
diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_cc.c b/deps/ngtcp2/ngtcp2/lib/ngtcp2_cc.c
index ef311ff93c0feb..9ad37fbdb6395a 100644
--- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_cc.c
+++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_cc.c
@@ -27,10 +27,6 @@
#include
#include
-#if defined(_MSC_VER)
-# include
-#endif
-
#include "ngtcp2_log.h"
#include "ngtcp2_macro.h"
#include "ngtcp2_mem.h"
@@ -235,39 +231,27 @@ void ngtcp2_cc_cubic_init(ngtcp2_cc_cubic *cubic, ngtcp2_log *log) {
}
uint64_t ngtcp2_cbrt(uint64_t n) {
- int d;
- uint64_t a;
-
- if (n == 0) {
- return 0;
- }
-
-#if defined(_MSC_VER)
- {
- unsigned long index;
-# if defined(_WIN64)
- if (_BitScanReverse64(&index, n)) {
- d = 61 - index;
- } else {
- ngtcp2_unreachable();
- }
-# else /* !defined(_WIN64) */
- if (_BitScanReverse(&index, (unsigned int)(n >> 32))) {
- d = 31 - index;
- } else {
- d = 32 + 31 - _BitScanReverse(&index, (unsigned int)n);
+ size_t s;
+ uint64_t y = 0;
+ uint64_t b;
+
+ for (s = 63; s > 0; s -= 3) {
+ y <<= 1;
+ b = 3 * y * (y + 1) + 1;
+ if ((n >> s) >= b) {
+ n -= b << s;
+ y++;
}
-# endif /* !defined(_WIN64) */
}
-#else /* !defined(_MSC_VER) */
- d = __builtin_clzll(n);
-#endif /* !defined(_MSC_VER) */
- a = 1ULL << ((64 - d) / 3 + 1);
- for (; a * a * a > n;) {
- a = (2 * a + n / a / a) / 3;
+ y <<= 1;
+ b = 3 * y * (y + 1) + 1;
+ if (n >= b) {
+ n -= b;
+ y++;
}
- return a;
+
+ return y;
}
/* HyStart++ constants */
diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_conn.c b/deps/ngtcp2/ngtcp2/lib/ngtcp2_conn.c
index a4873eb20c4b86..c8caf47ea76232 100644
--- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_conn.c
+++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_conn.c
@@ -3441,12 +3441,22 @@ static ngtcp2_ssize conn_write_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi,
}
switch ((*pfrc)->fr.type) {
+ case NGTCP2_FRAME_RESET_STREAM:
+ strm =
+ ngtcp2_conn_find_stream(conn, (*pfrc)->fr.reset_stream.stream_id);
+ if (strm == NULL ||
+ !ngtcp2_strm_require_retransmit_reset_stream(strm)) {
+ frc = *pfrc;
+ *pfrc = (*pfrc)->next;
+ ngtcp2_frame_chain_objalloc_del(frc, &conn->frc_objalloc, conn->mem);
+ continue;
+ }
+ break;
case NGTCP2_FRAME_STOP_SENDING:
strm =
ngtcp2_conn_find_stream(conn, (*pfrc)->fr.stop_sending.stream_id);
if (strm == NULL ||
- ((strm->flags & NGTCP2_STRM_FLAG_SHUT_RD) &&
- ngtcp2_strm_rx_offset(strm) == strm->rx.last_offset)) {
+ !ngtcp2_strm_require_retransmit_stop_sending(strm)) {
frc = *pfrc;
*pfrc = (*pfrc)->next;
ngtcp2_frame_chain_objalloc_del(frc, &conn->frc_objalloc, conn->mem);
@@ -3476,10 +3486,8 @@ static ngtcp2_ssize conn_write_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi,
case NGTCP2_FRAME_MAX_STREAM_DATA:
strm = ngtcp2_conn_find_stream(conn,
(*pfrc)->fr.max_stream_data.stream_id);
- if (strm == NULL ||
- (strm->flags &
- (NGTCP2_STRM_FLAG_SHUT_RD | NGTCP2_STRM_FLAG_STOP_SENDING)) ||
- (*pfrc)->fr.max_stream_data.max_stream_data < strm->rx.max_offset) {
+ if (strm == NULL || !ngtcp2_strm_require_retransmit_max_stream_data(
+ strm, &(*pfrc)->fr.max_stream_data)) {
frc = *pfrc;
*pfrc = (*pfrc)->next;
ngtcp2_frame_chain_objalloc_del(frc, &conn->frc_objalloc, conn->mem);
@@ -3497,8 +3505,8 @@ static ngtcp2_ssize conn_write_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi,
case NGTCP2_FRAME_STREAM_DATA_BLOCKED:
strm = ngtcp2_conn_find_stream(
conn, (*pfrc)->fr.stream_data_blocked.stream_id);
- if (strm == NULL || (strm->flags & NGTCP2_STRM_FLAG_SHUT_WR) ||
- (*pfrc)->fr.stream_data_blocked.offset != strm->tx.max_offset) {
+ if (strm == NULL || !ngtcp2_strm_require_retransmit_stream_data_blocked(
+ strm, &(*pfrc)->fr.stream_data_blocked)) {
frc = *pfrc;
*pfrc = (*pfrc)->next;
ngtcp2_frame_chain_objalloc_del(frc, &conn->frc_objalloc, conn->mem);
@@ -7145,7 +7153,7 @@ static int conn_recv_stream(ngtcp2_conn *conn, const ngtcp2_stream *fr) {
return rv;
}
}
- } else if (fr->datacnt) {
+ } else if (fr->datacnt && !(strm->flags & NGTCP2_STRM_FLAG_STOP_SENDING)) {
rv = ngtcp2_strm_recv_reordering(strm, fr->data[0].base, fr->data[0].len,
fr->offset);
if (rv != 0) {
@@ -7304,27 +7312,20 @@ static int conn_recv_reset_stream(ngtcp2_conn *conn,
}
/* Stream is reset before we create ngtcp2_strm object. */
- conn->rx.offset += fr->final_size;
- ngtcp2_conn_extend_max_offset(conn, fr->final_size);
-
- rv = conn_call_stream_reset(conn, fr->stream_id, fr->final_size,
- fr->app_error_code, NULL);
+ strm = ngtcp2_objalloc_strm_get(&conn->strm_objalloc);
+ if (strm == NULL) {
+ return NGTCP2_ERR_NOMEM;
+ }
+ rv = ngtcp2_conn_init_stream(conn, strm, fr->stream_id, NULL);
if (rv != 0) {
+ ngtcp2_objalloc_strm_release(&conn->strm_objalloc, strm);
return rv;
}
- /* There will be no activity in this stream because we got
- RESET_STREAM and don't write stream data any further. This
- effectively allows another new stream for peer. */
- if (bidi) {
- handle_max_remote_streams_extension(&conn->remote.bidi.unsent_max_streams,
- 1);
- } else {
- handle_max_remote_streams_extension(&conn->remote.uni.unsent_max_streams,
- 1);
+ rv = conn_call_stream_open(conn, strm);
+ if (rv != 0) {
+ return rv;
}
-
- return 0;
}
if ((strm->flags & NGTCP2_STRM_FLAG_SHUT_RD)) {
@@ -7461,15 +7462,16 @@ static int conn_recv_stop_sending(ngtcp2_conn *conn,
been acknowledged. */
if (!ngtcp2_strm_is_all_tx_data_fin_acked(strm) &&
!(strm->flags & NGTCP2_STRM_FLAG_RESET_STREAM)) {
+ strm->flags |= NGTCP2_STRM_FLAG_RESET_STREAM;
+
rv = conn_reset_stream(conn, strm, fr->app_error_code);
if (rv != 0) {
return rv;
}
}
- strm->flags |= NGTCP2_STRM_FLAG_SHUT_WR |
- NGTCP2_STRM_FLAG_STOP_SENDING_RECVED |
- NGTCP2_STRM_FLAG_RESET_STREAM;
+ strm->flags |=
+ NGTCP2_STRM_FLAG_SHUT_WR | NGTCP2_STRM_FLAG_STOP_SENDING_RECVED;
ngtcp2_strm_streamfrq_clear(strm);
@@ -12533,14 +12535,15 @@ static int conn_shutdown_stream_read(ngtcp2_conn *conn, ngtcp2_strm *strm,
/* Extend connection flow control window for the amount of data
which are not passed to application. */
- if (!(strm->flags & (NGTCP2_STRM_FLAG_STOP_SENDING |
- NGTCP2_STRM_FLAG_RESET_STREAM_RECVED))) {
+ if (!(strm->flags & NGTCP2_STRM_FLAG_RESET_STREAM_RECVED)) {
ngtcp2_conn_extend_max_offset(conn, strm->rx.last_offset -
ngtcp2_strm_rx_offset(strm));
}
strm->flags |= NGTCP2_STRM_FLAG_STOP_SENDING;
+ ngtcp2_strm_discard_reordered_data(strm);
+
return conn_stop_sending(conn, strm, app_error_code);
}
diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_crypto.c b/deps/ngtcp2/ngtcp2/lib/ngtcp2_crypto.c
index 2c00af5ea53d99..0a3ecf6a2440cb 100644
--- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_crypto.c
+++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_crypto.c
@@ -123,6 +123,25 @@ static uint8_t *write_varint_param(uint8_t *p, ngtcp2_transport_param_id id,
return ngtcp2_put_uvarint(p, value);
}
+/*
+ * zero_paramlen returns the length of a single transport parameter
+ * which has zero length value in its parameter.
+ */
+static size_t zero_paramlen(ngtcp2_transport_param_id id) {
+ return ngtcp2_put_uvarintlen(id) + 1;
+}
+
+/*
+ * write_zero_param writes parameter |id| that has zero length value.
+ * It returns p + the number of bytes written.
+ */
+static uint8_t *write_zero_param(uint8_t *p, ngtcp2_transport_param_id id) {
+ p = ngtcp2_put_uvarint(p, id);
+ *p++ = 0;
+
+ return p;
+}
+
/*
* cid_paramlen returns the length of a single transport parameter
* which has |cid| as value.
@@ -235,9 +254,7 @@ ngtcp2_ssize ngtcp2_transport_params_encode_versioned(
params->ack_delay_exponent);
}
if (params->disable_active_migration) {
- len +=
- ngtcp2_put_uvarintlen(NGTCP2_TRANSPORT_PARAM_DISABLE_ACTIVE_MIGRATION) +
- ngtcp2_put_uvarintlen(0);
+ len += zero_paramlen(NGTCP2_TRANSPORT_PARAM_DISABLE_ACTIVE_MIGRATION);
}
if (params->max_ack_delay != NGTCP2_DEFAULT_MAX_ACK_DELAY) {
len += varint_paramlen(NGTCP2_TRANSPORT_PARAM_MAX_ACK_DELAY,
@@ -258,8 +275,7 @@ ngtcp2_ssize ngtcp2_transport_params_encode_versioned(
params->max_datagram_frame_size);
}
if (params->grease_quic_bit) {
- len += ngtcp2_put_uvarintlen(NGTCP2_TRANSPORT_PARAM_GREASE_QUIC_BIT) +
- ngtcp2_put_uvarintlen(0);
+ len += zero_paramlen(NGTCP2_TRANSPORT_PARAM_GREASE_QUIC_BIT);
}
if (params->version_info_present) {
version_infolen =
@@ -377,8 +393,7 @@ ngtcp2_ssize ngtcp2_transport_params_encode_versioned(
}
if (params->disable_active_migration) {
- p = ngtcp2_put_uvarint(p, NGTCP2_TRANSPORT_PARAM_DISABLE_ACTIVE_MIGRATION);
- p = ngtcp2_put_uvarint(p, 0);
+ p = write_zero_param(p, NGTCP2_TRANSPORT_PARAM_DISABLE_ACTIVE_MIGRATION);
}
if (params->max_ack_delay != NGTCP2_DEFAULT_MAX_ACK_DELAY) {
@@ -404,8 +419,7 @@ ngtcp2_ssize ngtcp2_transport_params_encode_versioned(
}
if (params->grease_quic_bit) {
- p = ngtcp2_put_uvarint(p, NGTCP2_TRANSPORT_PARAM_GREASE_QUIC_BIT);
- p = ngtcp2_put_uvarint(p, 0);
+ p = write_zero_param(p, NGTCP2_TRANSPORT_PARAM_GREASE_QUIC_BIT);
}
if (params->version_info_present) {
@@ -482,6 +496,22 @@ static int decode_varint_param(uint64_t *pdest, const uint8_t **pp,
return 0;
}
+/*
+ * decode_zero_param decodes zero length value from the buffer pointed
+ * by |*pp| of length |end - *pp|. The length is encoded in varint
+ * form. If it decodes zero length value successfully, it increments
+ * |*pp| by 1, and returns 0. Otherwise it returns -1.
+ */
+static int decode_zero_param(const uint8_t **pp, const uint8_t *end) {
+ if (*pp == end || **pp != 0) {
+ return -1;
+ }
+
+ ++*pp;
+
+ return 0;
+}
+
/*
* decode_cid_param decodes length prefixed ngtcp2_cid from the buffer
* pointed by |*pp| of length |end - *pp|. The length is encoded in
@@ -701,10 +731,7 @@ int ngtcp2_transport_params_decode_versioned(int transport_params_version,
params->preferred_addr_present = 1;
break;
case NGTCP2_TRANSPORT_PARAM_DISABLE_ACTIVE_MIGRATION:
- if (decode_varint(&valuelen, &p, end) != 0) {
- return NGTCP2_ERR_MALFORMED_TRANSPORT_PARAM;
- }
- if (valuelen != 0) {
+ if (decode_zero_param(&p, end) != 0) {
return NGTCP2_ERR_MALFORMED_TRANSPORT_PARAM;
}
params->disable_active_migration = 1;
@@ -751,10 +778,7 @@ int ngtcp2_transport_params_decode_versioned(int transport_params_version,
}
break;
case NGTCP2_TRANSPORT_PARAM_GREASE_QUIC_BIT:
- if (decode_varint(&valuelen, &p, end) != 0) {
- return NGTCP2_ERR_MALFORMED_TRANSPORT_PARAM;
- }
- if (valuelen != 0) {
+ if (decode_zero_param(&p, end) != 0) {
return NGTCP2_ERR_MALFORMED_TRANSPORT_PARAM;
}
params->grease_quic_bit = 1;
diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_rtb.c b/deps/ngtcp2/ngtcp2/lib/ngtcp2_rtb.c
index 6308261369c382..5ebdce7d0e2715 100644
--- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_rtb.c
+++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_rtb.c
@@ -237,7 +237,7 @@ static ngtcp2_ssize rtb_reclaim_frame(ngtcp2_rtb *rtb, uint8_t flags,
switch (frc->fr.type) {
case NGTCP2_FRAME_STREAM:
strm = ngtcp2_conn_find_stream(conn, fr->stream.stream_id);
- if (strm == NULL) {
+ if (strm == NULL || (strm->flags & NGTCP2_STRM_FLAG_RESET_STREAM)) {
continue;
}
@@ -339,26 +339,60 @@ static ngtcp2_ssize rtb_reclaim_frame(ngtcp2_rtb *rtb, uint8_t flags,
return rv;
}
- break;
+ ++num_reclaimed;
+
+ nfrc->next = *pfrc;
+ *pfrc = nfrc;
+ pfrc = &nfrc->next;
+
+ continue;
case NGTCP2_FRAME_DATAGRAM:
case NGTCP2_FRAME_DATAGRAM_LEN:
continue;
- default:
- rv = ngtcp2_frame_chain_objalloc_new(&nfrc, rtb->frc_objalloc);
- if (rv != 0) {
- return rv;
+ case NGTCP2_FRAME_RESET_STREAM:
+ strm = ngtcp2_conn_find_stream(conn, fr->reset_stream.stream_id);
+ if (strm == NULL || !ngtcp2_strm_require_retransmit_reset_stream(strm)) {
+ continue;
}
- nfrc->fr = *fr;
+ break;
+ case NGTCP2_FRAME_STOP_SENDING:
+ strm = ngtcp2_conn_find_stream(conn, fr->stop_sending.stream_id);
+ if (strm == NULL || !ngtcp2_strm_require_retransmit_stop_sending(strm)) {
+ continue;
+ }
- rv = ngtcp2_bind_frame_chains(frc, nfrc, rtb->mem);
- if (rv != 0) {
- return rv;
+ break;
+ case NGTCP2_FRAME_MAX_STREAM_DATA:
+ strm = ngtcp2_conn_find_stream(conn, fr->max_stream_data.stream_id);
+ if (strm == NULL || !ngtcp2_strm_require_retransmit_max_stream_data(
+ strm, &fr->max_stream_data)) {
+ continue;
+ }
+
+ break;
+ case NGTCP2_FRAME_STREAM_DATA_BLOCKED:
+ strm = ngtcp2_conn_find_stream(conn, fr->stream_data_blocked.stream_id);
+ if (strm == NULL || !ngtcp2_strm_require_retransmit_stream_data_blocked(
+ strm, &fr->stream_data_blocked)) {
+ continue;
}
break;
}
+ rv = ngtcp2_frame_chain_objalloc_new(&nfrc, rtb->frc_objalloc);
+ if (rv != 0) {
+ return rv;
+ }
+
+ nfrc->fr = *fr;
+
+ rv = ngtcp2_bind_frame_chains(frc, nfrc, rtb->mem);
+ if (rv != 0) {
+ return rv;
+ }
+
++num_reclaimed;
nfrc->next = *pfrc;
diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_strm.c b/deps/ngtcp2/ngtcp2/lib/ngtcp2_strm.c
index 6bbeb8f9f81fc2..c00e86fa8c1afa 100644
--- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_strm.c
+++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_strm.c
@@ -158,6 +158,18 @@ void ngtcp2_strm_update_rx_offset(ngtcp2_strm *strm, uint64_t offset) {
ngtcp2_rob_remove_prefix(strm->rx.rob, offset);
}
+void ngtcp2_strm_discard_reordered_data(ngtcp2_strm *strm) {
+ if (strm->rx.rob == NULL) {
+ return;
+ }
+
+ strm->rx.cont_offset = ngtcp2_strm_rx_offset(strm);
+
+ ngtcp2_rob_free(strm->rx.rob);
+ ngtcp2_mem_free(strm->mem, strm->rx.rob);
+ strm->rx.rob = NULL;
+}
+
void ngtcp2_strm_shutdown(ngtcp2_strm *strm, uint32_t flags) {
strm->flags |= flags & NGTCP2_STRM_FLAG_SHUT_RDWR;
}
@@ -696,3 +708,25 @@ void ngtcp2_strm_set_app_error_code(ngtcp2_strm *strm,
strm->flags |= NGTCP2_STRM_FLAG_APP_ERROR_CODE_SET;
strm->app_error_code = app_error_code;
}
+
+int ngtcp2_strm_require_retransmit_reset_stream(ngtcp2_strm *strm) {
+ return !ngtcp2_strm_is_all_tx_data_fin_acked(strm);
+}
+
+int ngtcp2_strm_require_retransmit_stop_sending(ngtcp2_strm *strm) {
+ return !(strm->flags & NGTCP2_STRM_FLAG_SHUT_RD) ||
+ ngtcp2_strm_rx_offset(strm) != strm->rx.last_offset;
+}
+
+int ngtcp2_strm_require_retransmit_max_stream_data(ngtcp2_strm *strm,
+ ngtcp2_max_stream_data *fr) {
+ return fr->max_stream_data == strm->rx.max_offset &&
+ !(strm->flags &
+ (NGTCP2_STRM_FLAG_SHUT_RD | NGTCP2_STRM_FLAG_STOP_SENDING));
+}
+
+int ngtcp2_strm_require_retransmit_stream_data_blocked(
+ ngtcp2_strm *strm, ngtcp2_stream_data_blocked *fr) {
+ return fr->offset == strm->tx.max_offset &&
+ !(strm->flags & NGTCP2_STRM_FLAG_SHUT_WR);
+}
diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_strm.h b/deps/ngtcp2/ngtcp2/lib/ngtcp2_strm.h
index 223e38fc646b38..385302a5eafa9f 100644
--- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_strm.h
+++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_strm.h
@@ -36,6 +36,7 @@
#include "ngtcp2_gaptr.h"
#include "ngtcp2_ksl.h"
#include "ngtcp2_pq.h"
+#include "ngtcp2_pkt.h"
typedef struct ngtcp2_frame_chain ngtcp2_frame_chain;
@@ -219,6 +220,12 @@ int ngtcp2_strm_recv_reordering(ngtcp2_strm *strm, const uint8_t *data,
*/
void ngtcp2_strm_update_rx_offset(ngtcp2_strm *strm, uint64_t offset);
+/*
+ * ngtcp2_strm_discard_reordered_data discards all buffered reordered
+ * data.
+ */
+void ngtcp2_strm_discard_reordered_data(ngtcp2_strm *strm);
+
/*
* ngtcp2_strm_shutdown shutdowns |strm|. |flags| should be
* NGTCP2_STRM_FLAG_SHUT_RD, and/or NGTCP2_STRM_FLAG_SHUT_WR.
@@ -320,4 +327,30 @@ int ngtcp2_strm_ack_data(ngtcp2_strm *strm, uint64_t offset, uint64_t len);
*/
void ngtcp2_strm_set_app_error_code(ngtcp2_strm *strm, uint64_t app_error_code);
+/*
+ * ngtcp2_strm_require_retransmit_reset_stream returns nonzero if
+ * RESET_STREAM frame should be retransmitted.
+ */
+int ngtcp2_strm_require_retransmit_reset_stream(ngtcp2_strm *strm);
+
+/*
+ * ngtcp2_strm_require_retransmit_stop_sending returns nonzero if
+ * STOP_SENDING frame should be retransmitted.
+ */
+int ngtcp2_strm_require_retransmit_stop_sending(ngtcp2_strm *strm);
+
+/*
+ * ngtcp2_strm_require_retransmit_max_stream_data returns nonzero if
+ * MAX_STREAM_DATA frame should be retransmitted.
+ */
+int ngtcp2_strm_require_retransmit_max_stream_data(ngtcp2_strm *strm,
+ ngtcp2_max_stream_data *fr);
+
+/*
+ * ngtcp2_strm_require_retransmit_stream_data_blocked returns nonzero
+ * if STREAM_DATA_BLOCKED frame frame should be retransmitted.
+ */
+int ngtcp2_strm_require_retransmit_stream_data_blocked(
+ ngtcp2_strm *strm, ngtcp2_stream_data_blocked *fr);
+
#endif /* NGTCP2_STRM_H */
diff --git a/deps/ngtcp2/unofficial.gni b/deps/ngtcp2/unofficial.gni
index 2c5890d71fe60a..26b8070c5a9c7f 100644
--- a/deps/ngtcp2/unofficial.gni
+++ b/deps/ngtcp2/unofficial.gni
@@ -2,7 +2,7 @@
# building official binaries.
# Please edit the gyp files if you are making changes to build system.
-import("//node/node.gni")
+import("../../node.gni")
# The actual configurations are put inside a template in unofficial.gni to
# prevent accidental edits from contributors.
diff --git a/deps/npm/docs/content/commands/npm-audit.md b/deps/npm/docs/content/commands/npm-audit.md
index 9b98734a96fcfd..7d83fd582f3fd3 100644
--- a/deps/npm/docs/content/commands/npm-audit.md
+++ b/deps/npm/docs/content/commands/npm-audit.md
@@ -374,7 +374,8 @@ the order in which omit/include are specified on the command-line.
#### `foreground-scripts`
-* Default: false
+* 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`)
diff --git a/deps/npm/docs/content/commands/npm-ci.md b/deps/npm/docs/content/commands/npm-ci.md
index 57f6555975b260..d74922ff7e18bd 100644
--- a/deps/npm/docs/content/commands/npm-ci.md
+++ b/deps/npm/docs/content/commands/npm-ci.md
@@ -169,7 +169,8 @@ this warning is treated as a failure.
#### `foreground-scripts`
-* Default: false
+* 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`)
diff --git a/deps/npm/docs/content/commands/npm-config.md b/deps/npm/docs/content/commands/npm-config.md
index 80f44b27d12f90..603161b0687d67 100644
--- a/deps/npm/docs/content/commands/npm-config.md
+++ b/deps/npm/docs/content/commands/npm-config.md
@@ -44,7 +44,8 @@ npm config set key=value [key=value...]
npm set key=value [key=value...]
```
-Sets each of the config keys to the value provided.
+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.
diff --git a/deps/npm/docs/content/commands/npm-install-ci-test.md b/deps/npm/docs/content/commands/npm-install-ci-test.md
index f01b9979635deb..1519ffa8e9a8a1 100644
--- a/deps/npm/docs/content/commands/npm-install-ci-test.md
+++ b/deps/npm/docs/content/commands/npm-install-ci-test.md
@@ -115,7 +115,8 @@ this warning is treated as a failure.
#### `foreground-scripts`
-* Default: false
+* 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`)
diff --git a/deps/npm/docs/content/commands/npm-install-test.md b/deps/npm/docs/content/commands/npm-install-test.md
index b73614de2d4f42..3d97af00b262a7 100644
--- a/deps/npm/docs/content/commands/npm-install-test.md
+++ b/deps/npm/docs/content/commands/npm-install-test.md
@@ -192,7 +192,8 @@ For `list` this means the output will be based on the tree described by the
#### `foreground-scripts`
-* Default: false
+* 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`)
diff --git a/deps/npm/docs/content/commands/npm-install.md b/deps/npm/docs/content/commands/npm-install.md
index 36496954270b30..56a4c86fbdb3d3 100644
--- a/deps/npm/docs/content/commands/npm-install.md
+++ b/deps/npm/docs/content/commands/npm-install.md
@@ -582,7 +582,8 @@ For `list` this means the output will be based on the tree described by the
#### `foreground-scripts`
-* Default: false
+* 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`)
diff --git a/deps/npm/docs/content/commands/npm-ls.md b/deps/npm/docs/content/commands/npm-ls.md
index a21d14e577df61..d21af25d6c783b 100644
--- a/deps/npm/docs/content/commands/npm-ls.md
+++ b/deps/npm/docs/content/commands/npm-ls.md
@@ -27,7 +27,7 @@ packages will *also* show the paths to the specified packages. For
example, running `npm ls promzard` in npm's source tree will show:
```bash
-npm@10.3.0 /path/to/npm
+npm@10.5.0 /path/to/npm
└─┬ init-package-json@0.0.4
└── promzard@0.1.5
```
diff --git a/deps/npm/docs/content/commands/npm-prune.md b/deps/npm/docs/content/commands/npm-prune.md
index d195eb6d3b601f..3a5894cb734a53 100644
--- a/deps/npm/docs/content/commands/npm-prune.md
+++ b/deps/npm/docs/content/commands/npm-prune.md
@@ -99,7 +99,8 @@ Not supported by all npm commands.
#### `foreground-scripts`
-* Default: false
+* 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`)
diff --git a/deps/npm/docs/content/commands/npm-query.md b/deps/npm/docs/content/commands/npm-query.md
index 196d7d6559acf2..f435ce67e9d912 100644
--- a/deps/npm/docs/content/commands/npm-query.md
+++ b/deps/npm/docs/content/commands/npm-query.md
@@ -135,19 +135,32 @@ npm query ":type(git)" | jq 'map(.name)' | xargs -I {} npm why {}
},
...
```
-### Package lock only mode
-If package-lock-only is enabled, only the information in the package
-lock (or shrinkwrap) is loaded. This means that information from the
-package.json files of your dependencies will not be included in the
-result set (e.g. description, homepage, engines).
+### Expecting a certain number of results
+
+One common use of `npm query` is to make sure there is only one version of
+a certain dependency in your tree. This is especially common for
+ecosystems like that rely on `typescript` where having state split
+across two different but identically-named packages causes bugs. You
+can use the `--expect-results` or `--expect-result-count` in your setup
+to ensure that npm will exit with an exit code if your tree doesn't look
+like you want it to.
+
+
+```sh
+$ npm query '#react' --expect-result-count=1
+```
+
+Perhaps you want to quickly check if there are any production
+dependencies that could be updated:
+
+```sh
+$ npm query ':root>:outdated(in-range).prod' --no-expect-results
+```
### Package lock only mode
-If package-lock-only is enabled, only the information in the package
-lock (or shrinkwrap) is loaded. This means that information from the
-package.json files of your dependencies will not be included in the
-result set (e.g. description, homepage, engines).
+If package-lock-only is enabled, only the information in the package lock (or shrinkwrap) is loaded. This means that information from the package.json files of your dependencies will not be included in the result set (e.g. description, homepage, engines).
### Configuration
@@ -235,6 +248,25 @@ 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`.
+
+#### `expect-results`
+
+* Default: null
+* Type: null or Boolean
+
+Tells npm whether or not to expect results from the command. Can be either
+true (expect some results) or false (expect no results).
+
+This config can not be used with: `expect-result-count`
+
+#### `expect-result-count`
+
+* Default: null
+* Type: null or Number
+
+Tells to expect a specific number of results from the command.
+
+This config can not be used with: `expect-results`
## See Also
* [dependency selectors](/using-npm/dependency-selectors)
diff --git a/deps/npm/docs/content/commands/npm-rebuild.md b/deps/npm/docs/content/commands/npm-rebuild.md
index 596ae97df24448..d22a7a5f9d3e90 100644
--- a/deps/npm/docs/content/commands/npm-rebuild.md
+++ b/deps/npm/docs/content/commands/npm-rebuild.md
@@ -72,7 +72,8 @@ systems.
#### `foreground-scripts`
-* Default: false
+* 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`)
diff --git a/deps/npm/docs/content/commands/npm-run-script.md b/deps/npm/docs/content/commands/npm-run-script.md
index 9e3ae1e9b2571a..56fcdb70411da6 100644
--- a/deps/npm/docs/content/commands/npm-run-script.md
+++ b/deps/npm/docs/content/commands/npm-run-script.md
@@ -220,7 +220,8 @@ will *not* run any pre- or post-scripts.
#### `foreground-scripts`
-* Default: false
+* 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`)
diff --git a/deps/npm/docs/content/commands/npm-update.md b/deps/npm/docs/content/commands/npm-update.md
index ea0bcdd00d9fbd..25272f8f13ba02 100644
--- a/deps/npm/docs/content/commands/npm-update.md
+++ b/deps/npm/docs/content/commands/npm-update.md
@@ -28,7 +28,7 @@ If no package name is specified, all packages in the specified location (global
or local) will be updated.
Note that by default `npm update` will not update the semver values of direct
-dependencies in your project `package.json`, if you want to also update
+dependencies in your project `package.json`. If you want to also update
values in `package.json` you can run: `npm update --save` (or add the
`save=true` option to a [configuration file](/configuring-npm/npmrc)
to make that the default behavior).
@@ -80,7 +80,7 @@ However, if `app`'s `package.json` contains:
```
In this case, running `npm update` will install `dep1@1.1.2`. Even though the
-`latest` tag points to `1.2.2`, this version do not satisfy `~1.1.1`, which is
+`latest` tag points to `1.2.2`, this version does not satisfy `~1.1.1`, which is
equivalent to `>=1.1.1 <1.2.0`. So the highest-sorting version that satisfies
`~1.1.1` is used, which is `1.1.2`.
@@ -94,8 +94,7 @@ Suppose `app` has a caret dependency on a version below `1.0.0`, for example:
}
```
-`npm update` will install `dep1@0.2.0`, because there are no other
-versions which satisfy `^0.2.0`.
+`npm update` will install `dep1@0.2.0`.
If the dependence were on `^0.4.0`:
@@ -294,7 +293,8 @@ will also prevent _writing_ `package-lock.json` if `save` is true.
#### `foreground-scripts`
-* Default: false
+* 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`)
diff --git a/deps/npm/docs/content/commands/npm.md b/deps/npm/docs/content/commands/npm.md
index d92e83e5ccdd19..3b14832d96da56 100644
--- a/deps/npm/docs/content/commands/npm.md
+++ b/deps/npm/docs/content/commands/npm.md
@@ -14,7 +14,7 @@ Note: This command is unaware of workspaces.
### Version
-10.3.0
+10.5.0
### Description
diff --git a/deps/npm/docs/content/configuring-npm/package-json.md b/deps/npm/docs/content/configuring-npm/package-json.md
index 2ef888fe1a4d64..c857fc8cb8ce5c 100644
--- a/deps/npm/docs/content/configuring-npm/package-json.md
+++ b/deps/npm/docs/content/configuring-npm/package-json.md
@@ -726,7 +726,7 @@ in which case they will be normalized to a relative path and added to your
This feature is helpful for local offline development and creating tests
that require npm installing where you don't want to hit an external server,
-but should not be used when publishing packages to the public registry.
+but should not be used when publishing your package to the public registry.
*note*: Packages linked by local path will not have their own
dependencies installed when `npm install` is ran in this case. You must
diff --git a/deps/npm/docs/content/using-npm/config.md b/deps/npm/docs/content/using-npm/config.md
index 93c820ab3b45ad..7158ee304ba46c 100644
--- a/deps/npm/docs/content/using-npm/config.md
+++ b/deps/npm/docs/content/using-npm/config.md
@@ -6,6 +6,9 @@ description: More than you probably want to know about npm configuration
### Description
+This article details npm configuration in general. To learn about the `config` command,
+see [`npm config`](/commands/npm-config).
+
npm gets its configuration values from the following sources, sorted by priority:
#### Command Line Flags
@@ -489,6 +492,25 @@ This can be overridden by setting the `--force` flag.
+#### `expect-result-count`
+
+* Default: null
+* Type: null or Number
+
+Tells to expect a specific number of results from the command.
+
+This config can not be used with: `expect-results`
+
+#### `expect-results`
+
+* Default: null
+* Type: null or Boolean
+
+Tells npm whether or not to expect results from the command. Can be either
+true (expect some results) or false (expect no results).
+
+This config can not be used with: `expect-result-count`
+
#### `fetch-retries`
* Default: 2
@@ -570,7 +592,8 @@ recommended that you do not use this option!
#### `foreground-scripts`
-* Default: false
+* 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`)
diff --git a/deps/npm/docs/content/using-npm/dependency-selectors.md b/deps/npm/docs/content/using-npm/dependency-selectors.md
index 5cedf8fe84030b..5f7e27ad21848f 100644
--- a/deps/npm/docs/content/using-npm/dependency-selectors.md
+++ b/deps/npm/docs/content/using-npm/dependency-selectors.md
@@ -13,7 +13,7 @@ The [`npm query`](/commands/npm-query) command exposes a new dependency selector
- Unlocks the ability to answer complex, multi-faceted questions about dependencies, their relationships & associative metadata
- Consolidates redundant logic of similar query commands in `npm` (ex. `npm fund`, `npm ls`, `npm outdated`, `npm audit` ...)
-### Dependency Selector Syntax `v1.0.0`
+### Dependency Selector Syntax
#### Overview:
@@ -62,6 +62,7 @@ The [`npm query`](/commands/npm-query) command exposes a new dependency selector
- `:path()` [glob](https://www.npmjs.com/package/glob) matching based on dependencies path relative to the project
- `:type()` [based on currently recognized types](https://github.com/npm/npm-package-arg#result-object)
- `:outdated()` when a dependency is outdated
+- `:vuln()` when a dependency has a known vulnerability
##### `:semver(, [selector], [function])`
@@ -84,8 +85,8 @@ Some examples:
The `:outdated` pseudo selector retrieves data from the registry and returns information about which of your dependencies are outdated. The type parameter may be one of the following:
- `any` (default) a version exists that is greater than the current one
-- `in-range` a version exists that is greater than the current one, and satisfies at least one if its dependents
-- `out-of-range` a version exists that is greater than the current one, does not satisfy at least one of its dependents
+- `in-range` a version exists that is greater than the current one, and satisfies at least one if its parent's dependencies
+- `out-of-range` a version exists that is greater than the current one, does not satisfy at least one of its parent's dependencies
- `major` a version exists that is a semver major greater than the current one
- `minor` a version exists that is a semver minor greater than the current one
- `patch` a version exists that is a semver patch greater than the current one
@@ -99,14 +100,29 @@ In addition to the filtering performed by the pseudo selector, some extra data i
Some examples:
- `:root > :outdated(major)` returns every direct dependency that has a new semver major release
-- `.prod:outdated(in-range)` returns production dependencies that have a new release that satisfies at least one of its edges in
+- `.prod:outdated(in-range)` returns production dependencies that have a new release that satisfies at least one of its parent's dependencies
+
+##### `:vuln`
+
+The `:vuln` pseudo selector retrieves data from the registry and returns information about which if your dependencies has a known vulnerability. Only dependencies whose current version matches a vulnerability will be returned. For example if you have `semver@7.6.0` in your tree, a vulnerability for `semver` which affects versions `<=6.3.1` will not match.
+
+You can also filter results by certain attributes in advisories. Currently that includes `severity` and `cwe`. Note that severity filtering is done per severity, it does not include severities "higher" or "lower" than the one specified.
+
+In addition to the filtering performed by the pseudo selector, info about each relevant advisory will be added to the `queryContext` attribute of each node under the `advisories` attribute.
+
+Some examples:
+
+- `:root > .prod:vuln` returns direct production dependencies with any known vulnerability
+- `:vuln([severity=high])` returns only dependencies with a vulnerability with a `high` severity.
+- `:vuln([severity=high],[severity=moderate])` returns only dependencies with a vulnerability with a `high` or `moderate` severity.
+- `:vuln([cwe=1333])` returns only dependencies with a vulnerability that includes CWE-1333 (ReDoS)
#### [Attribute Selectors](https://developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors)
The attribute selector evaluates the key/value pairs in `package.json` if they are `String`s.
- `[]` attribute selector (ie. existence of attribute)
-- `[attribute=value]` attribute value is equivalant...
+- `[attribute=value]` attribute value is equivalent...
- `[attribute~=value]` attribute value contains word...
- `[attribute*=value]` attribute value contains string...
- `[attribute|=value]` attribute value is equal to or starts with...
diff --git a/deps/npm/docs/content/using-npm/scope.md b/deps/npm/docs/content/using-npm/scope.md
index 65d30c158b8f97..d5dcef2d097a7e 100644
--- a/deps/npm/docs/content/using-npm/scope.md
+++ b/deps/npm/docs/content/using-npm/scope.md
@@ -127,7 +127,7 @@ host multiple scopes, but a scope only ever points to one registry.
You can also associate a scope with a registry using `npm config`:
```bash
-npm config set @myco:registry http://reg.example.com
+npm config set @myco:registry=http://reg.example.com
```
Once a scope is associated with a registry, any `npm install` for a package
diff --git a/deps/npm/docs/content/using-npm/scripts.md b/deps/npm/docs/content/using-npm/scripts.md
index b25815a428cd4c..3945c0e75abdc8 100644
--- a/deps/npm/docs/content/using-npm/scripts.md
+++ b/deps/npm/docs/content/using-npm/scripts.md
@@ -294,18 +294,15 @@ For example, if your package.json contains this:
{
"scripts" : {
"install" : "scripts/install.js",
- "postinstall" : "scripts/install.js",
- "uninstall" : "scripts/uninstall.js"
+ "postinstall" : "scripts/install.js"
}
}
```
-then `scripts/install.js` will be called for the install
-and post-install stages of the lifecycle, and `scripts/uninstall.js`
-will be called when the package is uninstalled. Since
-`scripts/install.js` is running for two different phases, it would
-be wise in this case to look at the `npm_lifecycle_event` environment
-variable.
+then `scripts/install.js` will be called for the install and post-install
+stages of the lifecycle. Since `scripts/install.js` is running for two
+different phases, it would be wise in this case to look at the
+`npm_lifecycle_event` environment variable.
If you want to run a make command, you can do so. This works just
fine:
@@ -334,10 +331,8 @@ file.
### Best Practices
* Don't exit with a non-zero error code unless you *really* mean it.
- Except for uninstall scripts, this will cause the npm action to
- fail, and potentially be rolled back. If the failure is minor or
- only will prevent some optional features, then it's better to just
- print a warning and exit successfully.
+ If the failure is minor or only will prevent some optional features, then
+ it's better to just print a warning and exit successfully.
* Try not to use scripts to do what npm can do for you. Read through
[`package.json`](/configuring-npm/package-json) to see all the things that you can specify and enable
by simply describing your package appropriately. In general, this
diff --git a/deps/npm/docs/content/using-npm/workspaces.md b/deps/npm/docs/content/using-npm/workspaces.md
index bbfa2d8817eb26..cb545c0b46bf12 100644
--- a/deps/npm/docs/content/using-npm/workspaces.md
+++ b/deps/npm/docs/content/using-npm/workspaces.md
@@ -7,12 +7,12 @@ description: Working with workspaces
### Description
**Workspaces** is a generic term that refers to the set of features in the
-npm cli that provides support to managing multiple packages from your local
+npm cli that provides support for managing multiple packages from your local
file system from within a singular top-level, root package.
This set of features makes up for a much more streamlined workflow handling
-linked packages from the local file system. Automating the linking process
-as part of `npm install` and avoiding manually having to use `npm link` in
+linked packages from the local file system. It automates the linking process
+as part of `npm install` and removes the need to manually use `npm link` in
order to add references to packages that should be symlinked into the current
`node_modules` folder.
@@ -110,7 +110,7 @@ respect the provided `workspace` configuration.
### Using workspaces
-Given the [specifities of how Node.js handles module resolution](https://nodejs.org/dist/latest-v14.x/docs/api/modules.html#modules_all_together) it's possible to consume any defined workspace
+Given the [specifics of how Node.js handles module resolution](https://nodejs.org/dist/latest-v14.x/docs/api/modules.html#modules_all_together) it's possible to consume any defined workspace
by its declared `package.json` `name`. Continuing from the example defined
above, let's also create a Node.js script that will require the workspace `a`
example module, e.g:
diff --git a/deps/npm/docs/output/commands/npm-audit.html b/deps/npm/docs/output/commands/npm-audit.html
index 4aaff936efe846..7ba3101ded64a8 100644
--- a/deps/npm/docs/output/commands/npm-audit.html
+++ b/deps/npm/docs/output/commands/npm-audit.html
@@ -410,7 +410,8 @@ include
the order in which omit/include are specified on the command-line.
foreground-scripts
-- Default: false
+- 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
)
diff --git a/deps/npm/docs/output/commands/npm-ci.html b/deps/npm/docs/output/commands/npm-ci.html
index 2349e46dd1c608..4dffceba0d4d5c 100644
--- a/deps/npm/docs/output/commands/npm-ci.html
+++ b/deps/npm/docs/output/commands/npm-ci.html
@@ -268,7 +268,8 @@
strict-peer-deps
this warning is treated as a failure.
foreground-scripts
-- Default: false
+- 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
)
diff --git a/deps/npm/docs/output/commands/npm-config.html b/deps/npm/docs/output/commands/npm-config.html
index d4c8bb541a7751..70a60390e0f90d 100644
--- a/deps/npm/docs/output/commands/npm-config.html
+++ b/deps/npm/docs/output/commands/npm-config.html
@@ -171,7 +171,8 @@
set
npm config set key=value [key=value...]
npm set key=value [key=value...]
-Sets each of the config keys to the value provided.
+Sets each of the config keys to the value provided. Modifies the user configuration
+file unless 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
.
diff --git a/deps/npm/docs/output/commands/npm-install-ci-test.html b/deps/npm/docs/output/commands/npm-install-ci-test.html
index 635b59bbb32040..407dbf9a2dd6bd 100644
--- a/deps/npm/docs/output/commands/npm-install-ci-test.html
+++ b/deps/npm/docs/output/commands/npm-install-ci-test.html
@@ -225,7 +225,8 @@ strict-peer-deps
this warning is treated as a failure.
foreground-scripts
-- Default: false
+- 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
)
diff --git a/deps/npm/docs/output/commands/npm-install-test.html b/deps/npm/docs/output/commands/npm-install-test.html
index b6b16aba6a5ca0..bdbe82f5d3442a 100644
--- a/deps/npm/docs/output/commands/npm-install-test.html
+++ b/deps/npm/docs/output/commands/npm-install-test.html
@@ -281,7 +281,8 @@
package-lock-only
package-lock.json
, rather than the contents of node_modules
.
foreground-scripts
-- Default: false
+- 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
)
diff --git a/deps/npm/docs/output/commands/npm-install.html b/deps/npm/docs/output/commands/npm-install.html
index fdf94fa61ec484..774da9fc37b106 100644
--- a/deps/npm/docs/output/commands/npm-install.html
+++ b/deps/npm/docs/output/commands/npm-install.html
@@ -607,7 +607,8 @@
package-lock-only
package-lock.json
, rather than the contents of node_modules
.
foreground-scripts
-- Default: false
+- 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
)
diff --git a/deps/npm/docs/output/commands/npm-ls.html b/deps/npm/docs/output/commands/npm-ls.html
index ae62824a2d7e59..d6e376a0bf2f8a 100644
--- a/deps/npm/docs/output/commands/npm-ls.html
+++ b/deps/npm/docs/output/commands/npm-ls.html
@@ -160,7 +160,7 @@
Description
the results to only the paths to the packages named. Note that nested
packages will also show the paths to the specified packages. For
example, running npm ls promzard
in npm's source tree will show:
-npm@10.3.0 /path/to/npm
+npm@10.5.0 /path/to/npm
└─┬ init-package-json@0.0.4
└── promzard@0.1.5
diff --git a/deps/npm/docs/output/commands/npm-prune.html b/deps/npm/docs/output/commands/npm-prune.html
index 034257f2271bea..94d016027e8363 100644
--- a/deps/npm/docs/output/commands/npm-prune.html
+++ b/deps/npm/docs/output/commands/npm-prune.html
@@ -211,7 +211,8 @@ json
Not supported by all npm commands.
foreground-scripts
-- Default: false
+- 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
)
diff --git a/deps/npm/docs/output/commands/npm-query.html b/deps/npm/docs/output/commands/npm-query.html
index cbfccc03e15fce..228de6787fd408 100644
--- a/deps/npm/docs/output/commands/npm-query.html
+++ b/deps/npm/docs/output/commands/npm-query.html
@@ -264,16 +264,22 @@
Example Response Output
},
...
+Expecting a certain number of results
+One common use of npm query
is to make sure there is only one version of
+a certain dependency in your tree. This is especially common for
+ecosystems like that rely on typescript
where having state split
+across two different but identically-named packages causes bugs. You
+can use the --expect-results
or --expect-result-count
in your setup
+to ensure that npm will exit with an exit code if your tree doesn't look
+like you want it to.
+$ npm query '#react' --expect-result-count=1
+
+Perhaps you want to quickly check if there are any production
+dependencies that could be updated:
+$ npm query ':root>:outdated(in-range).prod' --no-expect-results
+
Package lock only mode
-If package-lock-only is enabled, only the information in the package
-lock (or shrinkwrap) is loaded. This means that information from the
-package.json files of your dependencies will not be included in the
-result set (e.g. description, homepage, engines).
-Package lock only mode
-If package-lock-only is enabled, only the information in the package
-lock (or shrinkwrap) is loaded. This means that information from the
-package.json files of your dependencies will not be included in the
-result set (e.g. description, homepage, engines).
+If package-lock-only is enabled, only the information in the package lock (or shrinkwrap) is loaded. This means that information from the package.json files of your dependencies will not be included in the result set (e.g. description, homepage, engines).
Configuration
global
@@ -345,6 +351,21 @@ package-lock-only
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
.
+expect-results
+
+- Default: null
+- Type: null or Boolean
+
+Tells npm whether or not to expect results from the command. Can be either
+true (expect some results) or false (expect no results).
+This config can not be used with: expect-result-count
+expect-result-count
+
+- Default: null
+- Type: null or Number
+
+Tells to expect a specific number of results from the command.
+This config can not be used with: expect-results
See Also
- dependency selectors
diff --git a/deps/npm/docs/output/commands/npm-rebuild.html b/deps/npm/docs/output/commands/npm-rebuild.html
index 3a1a5a401a6a06..ee3ba1e8163502 100644
--- a/deps/npm/docs/output/commands/npm-rebuild.html
+++ b/deps/npm/docs/output/commands/npm-rebuild.html
@@ -196,7 +196,8 @@ bin-links
systems.
foreground-scripts
-- Default: false
+- 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
)
diff --git a/deps/npm/docs/output/commands/npm-run-script.html b/deps/npm/docs/output/commands/npm-run-script.html
index bc89b334628a9d..9f0c03940e83d3 100644
--- a/deps/npm/docs/output/commands/npm-run-script.html
+++ b/deps/npm/docs/output/commands/npm-run-script.html
@@ -305,7 +305,8 @@
ignore-scripts
will not run any pre- or post-scripts.
foreground-scripts
-- Default: false
+- 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
)
diff --git a/deps/npm/docs/output/commands/npm-update.html b/deps/npm/docs/output/commands/npm-update.html
index f471762ff30b87..462bca7b771628 100644
--- a/deps/npm/docs/output/commands/npm-update.html
+++ b/deps/npm/docs/output/commands/npm-update.html
@@ -161,7 +161,7 @@
Description
If no package name is specified, all packages in the specified location (global
or local) will be updated.
Note that by default npm update
will not update the semver values of direct
-dependencies in your project package.json
, if you want to also update
+dependencies in your project package.json
. If you want to also update
values in package.json
you can run: npm update --save
(or add the
save=true
option to a configuration file
to make that the default behavior).
@@ -199,7 +199,7 @@ Tilde Dependencies
}
In this case, running npm update
will install dep1@1.1.2
. Even though the
-latest
tag points to 1.2.2
, this version do not satisfy ~1.1.1
, which is
+latest
tag points to 1.2.2
, this version does not satisfy ~1.1.1
, which is
equivalent to >=1.1.1 <1.2.0
. So the highest-sorting version that satisfies
~1.1.1
is used, which is 1.1.2
.
Caret Dependencies below 1.0.0
@@ -208,8 +208,7 @@ Caret Dependencies below 1.0.0
"dep1": "^0.2.0"
}
-npm update
will install dep1@0.2.0
, because there are no other
-versions which satisfy ^0.2.0
.
+npm update
will install dep1@0.2.0
.
If the dependence were on ^0.4.0
:
"dependencies": {
"dep1": "^0.4.0"
@@ -353,7 +352,8 @@ package-lock
will also prevent writing package-lock.json
if save
is true.
foreground-scripts
-- Default: false
+- 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
)
diff --git a/deps/npm/docs/output/commands/npm.html b/deps/npm/docs/output/commands/npm.html
index 094e2ef256b937..976024c99e441a 100644
--- a/deps/npm/docs/output/commands/npm.html
+++ b/deps/npm/docs/output/commands/npm.html
@@ -150,7 +150,7 @@
Table of contents
Note: This command is unaware of workspaces.
Version
-10.3.0
+10.5.0
Description
npm is the package manager for the Node JavaScript platform. It puts
modules in place so that node can find them, and manages dependency
diff --git a/deps/npm/docs/output/configuring-npm/package-json.html b/deps/npm/docs/output/configuring-npm/package-json.html
index dd602671238b99..6c85ea97e813a4 100644
--- a/deps/npm/docs/output/configuring-npm/package-json.html
+++ b/deps/npm/docs/output/configuring-npm/package-json.html
@@ -698,7 +698,7 @@
Local Paths
This feature is helpful for local offline development and creating tests
that require npm installing where you don't want to hit an external server,
-but should not be used when publishing packages to the public registry.
+but should not be used when publishing your package to the public registry.
note: Packages linked by local path will not have their own
dependencies installed when npm install
is ran in this case. You must
run npm install
from inside the local path itself.
diff --git a/deps/npm/docs/output/using-npm/config.html b/deps/npm/docs/output/using-npm/config.html
index 3015e5d066b473..2a3ead1b706956 100644
--- a/deps/npm/docs/output/using-npm/config.html
+++ b/deps/npm/docs/output/using-npm/config.html
@@ -142,10 +142,12 @@ config
Description
+
This article details npm configuration in general. To learn about the config
command,
+see npm config
.
npm gets its configuration values from the following sources, sorted by priority:
Command Line Flags
Putting --foo bar
on the command line sets the foo
configuration
@@ -496,6 +498,21 @@
engine-strict
installing) any package that claims to not be compatible with the current
Node.js version.
This can be overridden by setting the --force
flag.
+
expect-result-count
+
+- Default: null
+- Type: null or Number
+
+
Tells to expect a specific number of results from the command.
+
This config can not be used with: expect-results
+
expect-results
+
+- Default: null
+- Type: null or Boolean
+
+
Tells npm whether or not to expect results from the command. Can be either
+true (expect some results) or false (expect no results).
+
This config can not be used with: expect-result-count
fetch-retries
- Default: 2
@@ -558,7 +575,8 @@ force
recommended that you do not use this option!
foreground-scripts
-- Default: false
+- 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
)
diff --git a/deps/npm/docs/output/using-npm/dependency-selectors.html b/deps/npm/docs/output/using-npm/dependency-selectors.html
index 1ea35878049764..27bba15c1a2135 100644
--- a/deps/npm/docs/output/using-npm/dependency-selectors.html
+++ b/deps/npm/docs/output/using-npm/dependency-selectors.html
@@ -153,7 +153,7 @@
Table of contents
- Unlocks the ability to answer complex, multi-faceted questions about dependencies, their relationships & associative metadata
- Consolidates redundant logic of similar query commands in
npm
(ex. npm fund
, npm ls
, npm outdated
, npm audit
...)
-
Dependency Selector Syntax v1.0.0
+
Dependency Selector Syntax
Overview:
- there is no "type" or "tag" selectors (ex.
div, h1, a
) as a dependency/target is the only type of Node
that can be queried
@@ -202,6 +202,7 @@ Pseudo Selectors
:path(<path>)
glob matching based on dependencies path relative to the project
:type(<type>)
based on currently recognized types
:outdated(<type>)
when a dependency is outdated
+:vuln(<selector>)
when a dependency has a known vulnerability
:semver(<spec>, [selector], [function])
The :semver()
pseudo selector allows comparing fields from each node's package.json
using semver methods. It accepts up to 3 parameters, all but the first of which are optional.
@@ -221,8 +222,8 @@
:outdated(<type>)
The :outdated
pseudo selector retrieves data from the registry and returns information about which of your dependencies are outdated. The type parameter may be one of the following:
any
(default) a version exists that is greater than the current one
-in-range
a version exists that is greater than the current one, and satisfies at least one if its dependents
-out-of-range
a version exists that is greater than the current one, does not satisfy at least one of its dependents
+in-range
a version exists that is greater than the current one, and satisfies at least one if its parent's dependencies
+out-of-range
a version exists that is greater than the current one, does not satisfy at least one of its parent's dependencies
major
a version exists that is a semver major greater than the current one
minor
a version exists that is a semver minor greater than the current one
patch
a version exists that is a semver patch greater than the current one
@@ -236,13 +237,24 @@ :outdated(<type>)
Some examples:
:root > :outdated(major)
returns every direct dependency that has a new semver major release
-.prod:outdated(in-range)
returns production dependencies that have a new release that satisfies at least one of its edges in
+.prod:outdated(in-range)
returns production dependencies that have a new release that satisfies at least one of its parent's dependencies
+
+:vuln
+The :vuln
pseudo selector retrieves data from the registry and returns information about which if your dependencies has a known vulnerability. Only dependencies whose current version matches a vulnerability will be returned. For example if you have semver@7.6.0
in your tree, a vulnerability for semver
which affects versions <=6.3.1
will not match.
+You can also filter results by certain attributes in advisories. Currently that includes severity
and cwe
. Note that severity filtering is done per severity, it does not include severities "higher" or "lower" than the one specified.
+In addition to the filtering performed by the pseudo selector, info about each relevant advisory will be added to the queryContext
attribute of each node under the advisories
attribute.
+Some examples:
+
+:root > .prod:vuln
returns direct production dependencies with any known vulnerability
+:vuln([severity=high])
returns only dependencies with a vulnerability with a high
severity.
+:vuln([severity=high],[severity=moderate])
returns only dependencies with a vulnerability with a high
or moderate
severity.
+:vuln([cwe=1333])
returns only dependencies with a vulnerability that includes CWE-1333 (ReDoS)
The attribute selector evaluates the key/value pairs in package.json
if they are String
s.
[]
attribute selector (ie. existence of attribute)
-[attribute=value]
attribute value is equivalant...
+[attribute=value]
attribute value is equivalent...
[attribute~=value]
attribute value contains word...
[attribute*=value]
attribute value contains string...
[attribute|=value]
attribute value is equal to or starts with...
diff --git a/deps/npm/docs/output/using-npm/scope.html b/deps/npm/docs/output/using-npm/scope.html
index fcecb0d9a99802..d91612e40a1e45 100644
--- a/deps/npm/docs/output/using-npm/scope.html
+++ b/deps/npm/docs/output/using-npm/scope.html
@@ -228,7 +228,7 @@ Associating a scope with a registry
Scopes have a many-to-one relationship with registries: one registry can
host multiple scopes, but a scope only ever points to one registry.
You can also associate a scope with a registry using npm config
:
-
npm config set @myco:registry http://reg.example.com
+npm config set @myco:registry=http://reg.example.com
Once a scope is associated with a registry, any npm install
for a package
with that scope will request packages from that registry instead. Any
diff --git a/deps/npm/docs/output/using-npm/scripts.html b/deps/npm/docs/output/using-npm/scripts.html
index 5628c7724f8ca7..91d558e1163b5c 100644
--- a/deps/npm/docs/output/using-npm/scripts.html
+++ b/deps/npm/docs/output/using-npm/scripts.html
@@ -402,17 +402,14 @@
Examples
{
"scripts" : {
"install" : "scripts/install.js",
- "postinstall" : "scripts/install.js",
- "uninstall" : "scripts/uninstall.js"
+ "postinstall" : "scripts/install.js"
}
}
-then scripts/install.js
will be called for the install
-and post-install stages of the lifecycle, and scripts/uninstall.js
-will be called when the package is uninstalled. Since
-scripts/install.js
is running for two different phases, it would
-be wise in this case to look at the npm_lifecycle_event
environment
-variable.
+then scripts/install.js
will be called for the install and post-install
+stages of the lifecycle. Since scripts/install.js
is running for two
+different phases, it would be wise in this case to look at the
+npm_lifecycle_event
environment variable.
If you want to run a make command, you can do so. This works just
fine:
{
@@ -433,10 +430,8 @@ Exiting
Best Practices
- Don't exit with a non-zero error code unless you really mean it.
-Except for uninstall scripts, this will cause the npm action to
-fail, and potentially be rolled back. If the failure is minor or
-only will prevent some optional features, then it's better to just
-print a warning and exit successfully.
+If the failure is minor or only will prevent some optional features, then
+it's better to just print a warning and exit successfully.
- Try not to use scripts to do what npm can do for you. Read through
package.json
to see all the things that you can specify and enable
by simply describing your package appropriately. In general, this
diff --git a/deps/npm/docs/output/using-npm/workspaces.html b/deps/npm/docs/output/using-npm/workspaces.html
index 6d6401b72770e9..39a77dfeb583fe 100644
--- a/deps/npm/docs/output/using-npm/workspaces.html
+++ b/deps/npm/docs/output/using-npm/workspaces.html
@@ -147,11 +147,11 @@ Table of contents
Description
Workspaces is a generic term that refers to the set of features in the
-npm cli that provides support to managing multiple packages from your local
+npm cli that provides support for managing multiple packages from your local
file system from within a singular top-level, root package.
This set of features makes up for a much more streamlined workflow handling
-linked packages from the local file system. Automating the linking process
-as part of npm install
and avoiding manually having to use npm link
in
+linked packages from the local file system. It automates the linking process
+as part of npm install
and removes the need to manually use npm link
in
order to add references to packages that should be symlinked into the current
node_modules
folder.
We also refer to these packages being auto-symlinked during npm install
as a
@@ -221,7 +221,7 @@
Adding dependencies to a workspace
Note: other installing commands such as uninstall
, ci
, etc will also
respect the provided workspace
configuration.
Using workspaces
-
Given the specifities of how Node.js handles module resolution it's possible to consume any defined workspace
+
Given the specifics of how Node.js handles module resolution it's possible to consume any defined workspace
by its declared package.json
name
. Continuing from the example defined
above, let's also create a Node.js script that will require the workspace a
example module, e.g:
diff --git a/deps/npm/lib/base-command.js b/deps/npm/lib/base-command.js
index e763820cb052b7..e4a7bbbec724a6 100644
--- a/deps/npm/lib/base-command.js
+++ b/deps/npm/lib/base-command.js
@@ -5,6 +5,7 @@ const { relative } = require('path')
const { definitions } = require('@npmcli/config/lib/definitions')
const getWorkspaces = require('./workspaces/get-workspaces.js')
const { aliases: cmdAliases } = require('./utils/cmd-list')
+const log = require('./utils/log-shim.js')
class BaseCommand {
static workspaces = false
@@ -142,6 +143,24 @@ class BaseCommand {
return this.exec(args)
}
+ // Compare the number of entries with what was expected
+ checkExpected (entries) {
+ if (!this.npm.config.isDefault('expect-results')) {
+ const expected = this.npm.config.get('expect-results')
+ if (!!entries !== !!expected) {
+ log.warn(this.name, `Expected ${expected ? '' : 'no '}results, got ${entries}`)
+ process.exitCode = 1
+ }
+ } else if (!this.npm.config.isDefault('expect-result-count')) {
+ const expected = this.npm.config.get('expect-result-count')
+ if (expected !== entries) {
+ /* eslint-disable-next-line max-len */
+ log.warn(this.name, `Expected ${expected} result${expected === 1 ? '' : 's'}, got ${entries}`)
+ process.exitCode = 1
+ }
+ }
+ }
+
async setWorkspaces () {
const includeWorkspaceRoot = this.isArboristCmd
? false
diff --git a/deps/npm/lib/commands/dist-tag.js b/deps/npm/lib/commands/dist-tag.js
index 15f9622d14906c..ff49bc8e307cb6 100644
--- a/deps/npm/lib/commands/dist-tag.js
+++ b/deps/npm/lib/commands/dist-tag.js
@@ -89,6 +89,9 @@ class DistTag extends BaseCommand {
log.verbose('dist-tag add', defaultTag, 'to', spec.name + '@' + version)
+ // make sure new spec with tag is valid, this will throw if invalid
+ npa(`${spec.name}@${defaultTag}`)
+
if (!spec.name || !version || !defaultTag) {
throw this.usageError('must provide a spec with a name and version, and a tag to add')
}
diff --git a/deps/npm/lib/commands/outdated.js b/deps/npm/lib/commands/outdated.js
index 9b9283e497727e..4216f1cdb1437f 100644
--- a/deps/npm/lib/commands/outdated.js
+++ b/deps/npm/lib/commands/outdated.js
@@ -1,5 +1,6 @@
-const os = require('os')
-const { resolve } = require('path')
+const os = require('node:os')
+const { resolve } = require('node:path')
+const { stripVTControlCharacters } = require('node:util')
const pacote = require('pacote')
const table = require('text-table')
const npa = require('npm-package-arg')
@@ -22,7 +23,6 @@ class Outdated extends ArboristWorkspaceCmd {
]
async exec (args) {
- const { default: stripAnsi } = await import('strip-ansi')
const global = resolve(this.npm.globalDir, '..')
const where = this.npm.global
? global
@@ -106,7 +106,7 @@ class Outdated extends ArboristWorkspaceCmd {
const tableOpts = {
align: ['l', 'r', 'r', 'r', 'l'],
- stringLength: s => stripAnsi(s).length,
+ stringLength: s => stripVTControlCharacters(s).length,
}
this.npm.output(table(outTable, tableOpts))
}
diff --git a/deps/npm/lib/commands/pack.js b/deps/npm/lib/commands/pack.js
index 74e80e573c2e92..6d5f00df55e3fc 100644
--- a/deps/npm/lib/commands/pack.js
+++ b/deps/npm/lib/commands/pack.js
@@ -47,6 +47,9 @@ class Pack extends BaseCommand {
for (const { arg, manifest } of manifests) {
const tarballData = await libpack(arg, {
...this.npm.flatOptions,
+ foregroundScripts: this.npm.config.isDefault('foreground-scripts')
+ ? true
+ : this.npm.config.get('foreground-scripts'),
prefix: this.npm.localPrefix,
workspaces: this.workspacePaths,
})
diff --git a/deps/npm/lib/commands/publish.js b/deps/npm/lib/commands/publish.js
index 7b3e930922ecab..63abc50b4745f4 100644
--- a/deps/npm/lib/commands/publish.js
+++ b/deps/npm/lib/commands/publish.js
@@ -80,6 +80,9 @@ class Publish extends BaseCommand {
// we pass dryRun: true to libnpmpack so it doesn't write the file to disk
const tarballData = await pack(spec, {
...opts,
+ foregroundScripts: this.npm.config.isDefault('foreground-scripts')
+ ? true
+ : this.npm.config.get('foreground-scripts'),
dryRun: true,
prefix: this.npm.localPrefix,
workspaces: this.workspacePaths,
diff --git a/deps/npm/lib/commands/query.js b/deps/npm/lib/commands/query.js
index 68aa1fa2c06a5b..17a55a446b0869 100644
--- a/deps/npm/lib/commands/query.js
+++ b/deps/npm/lib/commands/query.js
@@ -50,6 +50,7 @@ class Query extends BaseCommand {
'workspaces',
'include-workspace-root',
'package-lock-only',
+ 'expect-results',
]
get parsedResponse () {
@@ -81,6 +82,7 @@ class Query extends BaseCommand {
const items = await tree.querySelectorAll(args[0], this.npm.flatOptions)
this.buildResponse(items)
+ this.checkExpected(this.#response.length)
this.npm.output(this.parsedResponse)
}
@@ -104,6 +106,7 @@ class Query extends BaseCommand {
}
this.buildResponse(items)
}
+ this.checkExpected(this.#response.length)
this.npm.output(this.parsedResponse)
}
diff --git a/deps/npm/lib/commands/search.js b/deps/npm/lib/commands/search.js
index 2af4daa211dca1..f4a4ce32491424 100644
--- a/deps/npm/lib/commands/search.js
+++ b/deps/npm/lib/commands/search.js
@@ -81,12 +81,11 @@ class Search extends BaseCommand {
const filterStream = new FilterStream()
- const { default: stripAnsi } = await import('strip-ansi')
// Grab a configured output stream that will spit out packages in the desired format.
const outputStream = await formatSearchStream({
args, // --searchinclude options are not highlighted
...opts,
- }, stripAnsi)
+ })
log.silly('search', 'searching packages')
const p = new Pipeline(
diff --git a/deps/npm/lib/commands/view.js b/deps/npm/lib/commands/view.js
index 214a45e92611c9..b19604f8c2ed35 100644
--- a/deps/npm/lib/commands/view.js
+++ b/deps/npm/lib/commands/view.js
@@ -211,7 +211,13 @@ class View extends BaseCommand {
const data = []
const versions = pckmnt.versions || {}
- pckmnt.versions = Object.keys(versions).sort(semver.compareLoose)
+ pckmnt.versions = Object.keys(versions).filter(v => {
+ if (semver.valid(v)) {
+ return true
+ }
+ log.info('view', `Ignoring invalid version: ${v}`)
+ return false
+ }).sort(semver.compareLoose)
// remove readme unless we asked for it
if (args.indexOf('readme') === -1) {
diff --git a/deps/npm/lib/utils/format-search-stream.js b/deps/npm/lib/utils/format-search-stream.js
index cb29151e7c2e70..046a4b1e20587b 100644
--- a/deps/npm/lib/utils/format-search-stream.js
+++ b/deps/npm/lib/utils/format-search-stream.js
@@ -1,3 +1,4 @@
+const { stripVTControlCharacters } = require('node:util')
const { Minipass } = require('minipass')
const columnify = require('columnify')
@@ -15,8 +16,8 @@ const columnify = require('columnify')
// The returned stream will format this package data
// into a byte stream of formatted, displayable output.
-module.exports = async (opts, clean) => {
- return opts.json ? new JSONOutputStream() : new TextOutputStream(opts, clean)
+module.exports = async (opts) => {
+ return opts.json ? new JSONOutputStream() : new TextOutputStream(opts)
}
class JSONOutputStream extends Minipass {
@@ -40,13 +41,11 @@ class JSONOutputStream extends Minipass {
}
class TextOutputStream extends Minipass {
- #clean
#opts
#line = 0
- constructor (opts, clean) {
+ constructor (opts) {
super()
- this.#clean = clean
this.#opts = opts
}
@@ -56,17 +55,17 @@ class TextOutputStream extends Minipass {
#prettify (data) {
const pkg = {
- author: data.maintainers.map((m) => `=${this.#clean(m.username)}`).join(' '),
+ author: data.maintainers.map((m) => `=${stripVTControlCharacters(m.username)}`).join(' '),
date: 'prehistoric',
- description: this.#clean(data.description ?? ''),
+ description: stripVTControlCharacters(data.description ?? ''),
keywords: '',
- name: this.#clean(data.name),
+ name: stripVTControlCharacters(data.name),
version: data.version,
}
if (Array.isArray(data.keywords)) {
- pkg.keywords = data.keywords.map((k) => this.#clean(k)).join(' ')
+ pkg.keywords = data.keywords.map((k) => stripVTControlCharacters(k)).join(' ')
} else if (typeof data.keywords === 'string') {
- pkg.keywords = this.#clean(data.keywords.replace(/[,\s]+/, ' '))
+ pkg.keywords = stripVTControlCharacters(data.keywords.replace(/[,\s]+/, ' '))
}
if (data.date) {
pkg.date = data.date.toISOString().split('T')[0] // remove time
diff --git a/deps/npm/lib/utils/reify-output.js b/deps/npm/lib/utils/reify-output.js
index 3b79fc2be1898e..44c913812a8efe 100644
--- a/deps/npm/lib/utils/reify-output.js
+++ b/deps/npm/lib/utils/reify-output.js
@@ -15,6 +15,7 @@ const ms = require('ms')
const npmAuditReport = require('npm-audit-report')
const { readTree: getFundingInfo } = require('libnpmfund')
const auditError = require('./audit-error.js')
+const Table = require('cli-table3')
// TODO: output JSON if flatOptions.json is true
const reifyOutput = (npm, arb) => {
@@ -41,17 +42,51 @@ const reifyOutput = (npm, arb) => {
}
if (diff) {
+ let diffTable
+ if (npm.config.get('dry-run') || npm.config.get('long')) {
+ diffTable = new Table({
+ chars: {
+ top: '',
+ 'top-mid': '',
+ 'top-left': '',
+ 'top-right': '',
+ bottom: '',
+ 'bottom-mid': '',
+ 'bottom-left': '',
+ 'bottom-right': '',
+ left: '',
+ 'left-mid': '',
+ mid: '',
+ 'mid-mid': '',
+ right: '',
+ 'right-mid': '',
+ middle: ' ',
+ },
+ style: {
+ 'padding-left': 0,
+ 'padding-right': 0,
+ border: 0,
+ },
+ })
+ }
+
depth({
tree: diff,
visit: d => {
switch (d.action) {
case 'REMOVE':
+ diffTable?.push(['remove', d.actual.name, d.actual.package.version])
summary.removed++
break
case 'ADD':
+ diffTable?.push(['add', d.ideal.name, d.ideal.package.version])
actualTree.inventory.has(d.ideal) && summary.added++
break
case 'CHANGE':
+ diffTable?.push(['change',
+ d.actual.name,
+ d.actual.package.version + ' -> ' + d.ideal.package.version,
+ ])
summary.changed++
break
default:
@@ -62,6 +97,10 @@ const reifyOutput = (npm, arb) => {
},
getChildren: d => d.children,
})
+
+ if (diffTable) {
+ npm.output('\n' + diffTable.toString())
+ }
}
if (npm.flatOptions.fund) {
diff --git a/deps/npm/lib/utils/update-notifier.js b/deps/npm/lib/utils/update-notifier.js
index 1b3e21d878b94d..7c9611e4773f97 100644
--- a/deps/npm/lib/utils/update-notifier.js
+++ b/deps/npm/lib/utils/update-notifier.js
@@ -98,11 +98,16 @@ const updateNotifier = async (npm, spec = 'latest') => {
return null
}
+ // intentional. do not await this. it's a best-effort update. if this
+ // fails, it's ok. might be using /dev/null as the cache or something weird
+ // like that.
+ writeFile(lastCheckedFile(npm), '').catch(() => {})
+
return updateCheck(npm, spec, version, current)
}
// only update the notification timeout if we actually finished checking
-module.exports = async npm => {
+module.exports = npm => {
if (
// opted out
!npm.config.get('update-notifier')
@@ -113,14 +118,8 @@ module.exports = async npm => {
// CI
|| ciInfo.isCI
) {
- return null
+ return Promise.resolve(null)
}
- const notification = await updateNotifier(npm)
-
- // intentional. do not await this. it's a best-effort update. if this
- // fails, it's ok. might be using /dev/null as the cache or something weird
- // like that.
- writeFile(lastCheckedFile(npm), '').catch(() => {})
- return notification
+ return updateNotifier(npm)
}
diff --git a/deps/npm/man/man1/npm-access.1 b/deps/npm/man/man1/npm-access.1
index 01e92a1f4ede44..5231dbac1d504b 100644
--- a/deps/npm/man/man1/npm-access.1
+++ b/deps/npm/man/man1/npm-access.1
@@ -1,4 +1,4 @@
-.TH "NPM-ACCESS" "1" "January 2024" "" ""
+.TH "NPM-ACCESS" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-access\fR - Set access level on published packages
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-adduser.1 b/deps/npm/man/man1/npm-adduser.1
index 48ac7056d06ad9..c7cbb2cfcec253 100644
--- a/deps/npm/man/man1/npm-adduser.1
+++ b/deps/npm/man/man1/npm-adduser.1
@@ -1,4 +1,4 @@
-.TH "NPM-ADDUSER" "1" "January 2024" "" ""
+.TH "NPM-ADDUSER" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-adduser\fR - Add a registry user account
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-audit.1 b/deps/npm/man/man1/npm-audit.1
index 10f382f9645c4f..e6b1982cb4c171 100644
--- a/deps/npm/man/man1/npm-audit.1
+++ b/deps/npm/man/man1/npm-audit.1
@@ -1,4 +1,4 @@
-.TH "NPM-AUDIT" "1" "January 2024" "" ""
+.TH "NPM-AUDIT" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-audit\fR - Run a security audit
.SS "Synopsis"
@@ -348,7 +348,7 @@ Dependency types specified in \fB--include\fR will not be omitted, regardless of
.SS "\fBforeground-scripts\fR"
.RS 0
.IP \(bu 4
-Default: false
+Default: \fBfalse\fR unless when using \fBnpm pack\fR or \fBnpm publish\fR where it defaults to \fBtrue\fR
.IP \(bu 4
Type: Boolean
.RE 0
diff --git a/deps/npm/man/man1/npm-bugs.1 b/deps/npm/man/man1/npm-bugs.1
index a885517d062034..7db5b6cdb87f71 100644
--- a/deps/npm/man/man1/npm-bugs.1
+++ b/deps/npm/man/man1/npm-bugs.1
@@ -1,4 +1,4 @@
-.TH "NPM-BUGS" "1" "January 2024" "" ""
+.TH "NPM-BUGS" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-bugs\fR - Report bugs for a package in a web browser
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-cache.1 b/deps/npm/man/man1/npm-cache.1
index 2de4d40db0efb3..2ec9e67be0634d 100644
--- a/deps/npm/man/man1/npm-cache.1
+++ b/deps/npm/man/man1/npm-cache.1
@@ -1,4 +1,4 @@
-.TH "NPM-CACHE" "1" "January 2024" "" ""
+.TH "NPM-CACHE" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-cache\fR - Manipulates packages cache
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-ci.1 b/deps/npm/man/man1/npm-ci.1
index 4f28c62b79f9e5..16ed2f6d9b5bb8 100644
--- a/deps/npm/man/man1/npm-ci.1
+++ b/deps/npm/man/man1/npm-ci.1
@@ -1,4 +1,4 @@
-.TH "NPM-CI" "1" "January 2024" "" ""
+.TH "NPM-CI" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-ci\fR - Clean install a project
.SS "Synopsis"
@@ -147,7 +147,7 @@ When such an override is performed, a warning is printed, explaining the conflic
.SS "\fBforeground-scripts\fR"
.RS 0
.IP \(bu 4
-Default: false
+Default: \fBfalse\fR unless when using \fBnpm pack\fR or \fBnpm publish\fR where it defaults to \fBtrue\fR
.IP \(bu 4
Type: Boolean
.RE 0
diff --git a/deps/npm/man/man1/npm-completion.1 b/deps/npm/man/man1/npm-completion.1
index 33afabe5da5380..647d5e11ac202d 100644
--- a/deps/npm/man/man1/npm-completion.1
+++ b/deps/npm/man/man1/npm-completion.1
@@ -1,4 +1,4 @@
-.TH "NPM-COMPLETION" "1" "January 2024" "" ""
+.TH "NPM-COMPLETION" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-completion\fR - Tab Completion for npm
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-config.1 b/deps/npm/man/man1/npm-config.1
index 469bb97e36f668..f3be24e542465d 100644
--- a/deps/npm/man/man1/npm-config.1
+++ b/deps/npm/man/man1/npm-config.1
@@ -1,4 +1,4 @@
-.TH "NPM-CONFIG" "1" "January 2024" "" ""
+.TH "NPM-CONFIG" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-config\fR - Manage the npm configuration files
.SS "Synopsis"
@@ -38,7 +38,7 @@ npm set key=value \[lB]key=value...\[rB]
.fi
.RE
.P
-Sets each of the config keys to the value provided.
+Sets each of the config keys to the value provided. Modifies the user configuration file unless \fB\fBlocation\fR\fR \fI\(la/commands/npm-config#location\(ra\fR is passed.
.P
If value is omitted, the key will be removed from your config file entirely.
.P
diff --git a/deps/npm/man/man1/npm-dedupe.1 b/deps/npm/man/man1/npm-dedupe.1
index 0ffc5c2fe43c36..5480af746dcae5 100644
--- a/deps/npm/man/man1/npm-dedupe.1
+++ b/deps/npm/man/man1/npm-dedupe.1
@@ -1,4 +1,4 @@
-.TH "NPM-DEDUPE" "1" "January 2024" "" ""
+.TH "NPM-DEDUPE" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-dedupe\fR - Reduce duplication in the package tree
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-deprecate.1 b/deps/npm/man/man1/npm-deprecate.1
index fe2e7d0958b8dd..5e8d47a8bc77fc 100644
--- a/deps/npm/man/man1/npm-deprecate.1
+++ b/deps/npm/man/man1/npm-deprecate.1
@@ -1,4 +1,4 @@
-.TH "NPM-DEPRECATE" "1" "January 2024" "" ""
+.TH "NPM-DEPRECATE" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-deprecate\fR - Deprecate a version of a package
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-diff.1 b/deps/npm/man/man1/npm-diff.1
index 7e07d60da652d4..bea8bb3ef1d674 100644
--- a/deps/npm/man/man1/npm-diff.1
+++ b/deps/npm/man/man1/npm-diff.1
@@ -1,4 +1,4 @@
-.TH "NPM-DIFF" "1" "January 2024" "" ""
+.TH "NPM-DIFF" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-diff\fR - The registry diff command
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-dist-tag.1 b/deps/npm/man/man1/npm-dist-tag.1
index c89c03b4e0307b..6c4acc26b43b18 100644
--- a/deps/npm/man/man1/npm-dist-tag.1
+++ b/deps/npm/man/man1/npm-dist-tag.1
@@ -1,4 +1,4 @@
-.TH "NPM-DIST-TAG" "1" "January 2024" "" ""
+.TH "NPM-DIST-TAG" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-dist-tag\fR - Modify package distribution tags
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-docs.1 b/deps/npm/man/man1/npm-docs.1
index 2c15c6f78838e2..b9cc1da9abe783 100644
--- a/deps/npm/man/man1/npm-docs.1
+++ b/deps/npm/man/man1/npm-docs.1
@@ -1,4 +1,4 @@
-.TH "NPM-DOCS" "1" "January 2024" "" ""
+.TH "NPM-DOCS" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-docs\fR - Open documentation for a package in a web browser
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-doctor.1 b/deps/npm/man/man1/npm-doctor.1
index 16c1d1d841ad7d..42187f46922d5e 100644
--- a/deps/npm/man/man1/npm-doctor.1
+++ b/deps/npm/man/man1/npm-doctor.1
@@ -1,4 +1,4 @@
-.TH "NPM-DOCTOR" "1" "January 2024" "" ""
+.TH "NPM-DOCTOR" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-doctor\fR - Check the health of your npm environment
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-edit.1 b/deps/npm/man/man1/npm-edit.1
index 23a92b8a4d3ae0..82cd85851f0480 100644
--- a/deps/npm/man/man1/npm-edit.1
+++ b/deps/npm/man/man1/npm-edit.1
@@ -1,4 +1,4 @@
-.TH "NPM-EDIT" "1" "January 2024" "" ""
+.TH "NPM-EDIT" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-edit\fR - Edit an installed package
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-exec.1 b/deps/npm/man/man1/npm-exec.1
index 53512a4daecc74..246498125c14ca 100644
--- a/deps/npm/man/man1/npm-exec.1
+++ b/deps/npm/man/man1/npm-exec.1
@@ -1,4 +1,4 @@
-.TH "NPM-EXEC" "1" "January 2024" "" ""
+.TH "NPM-EXEC" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-exec\fR - Run a command from a local or remote npm package
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-explain.1 b/deps/npm/man/man1/npm-explain.1
index ec20107b04e06c..e1bb6de84f3348 100644
--- a/deps/npm/man/man1/npm-explain.1
+++ b/deps/npm/man/man1/npm-explain.1
@@ -1,4 +1,4 @@
-.TH "NPM-EXPLAIN" "1" "January 2024" "" ""
+.TH "NPM-EXPLAIN" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-explain\fR - Explain installed packages
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-explore.1 b/deps/npm/man/man1/npm-explore.1
index f6bb2c51f747d6..b4800ccfa6b299 100644
--- a/deps/npm/man/man1/npm-explore.1
+++ b/deps/npm/man/man1/npm-explore.1
@@ -1,4 +1,4 @@
-.TH "NPM-EXPLORE" "1" "January 2024" "" ""
+.TH "NPM-EXPLORE" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-explore\fR - Browse an installed package
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-find-dupes.1 b/deps/npm/man/man1/npm-find-dupes.1
index b56814b8d2ac68..1f80df08c59e20 100644
--- a/deps/npm/man/man1/npm-find-dupes.1
+++ b/deps/npm/man/man1/npm-find-dupes.1
@@ -1,4 +1,4 @@
-.TH "NPM-FIND-DUPES" "1" "January 2024" "" ""
+.TH "NPM-FIND-DUPES" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-find-dupes\fR - Find duplication in the package tree
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-fund.1 b/deps/npm/man/man1/npm-fund.1
index a9c1ae61f5ef4c..22d61e036d929a 100644
--- a/deps/npm/man/man1/npm-fund.1
+++ b/deps/npm/man/man1/npm-fund.1
@@ -1,4 +1,4 @@
-.TH "NPM-FUND" "1" "January 2024" "" ""
+.TH "NPM-FUND" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-fund\fR - Retrieve funding information
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-help-search.1 b/deps/npm/man/man1/npm-help-search.1
index 9396188aa721d3..4a9dd82c921cde 100644
--- a/deps/npm/man/man1/npm-help-search.1
+++ b/deps/npm/man/man1/npm-help-search.1
@@ -1,4 +1,4 @@
-.TH "NPM-HELP-SEARCH" "1" "January 2024" "" ""
+.TH "NPM-HELP-SEARCH" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-help-search\fR - Search npm help documentation
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-help.1 b/deps/npm/man/man1/npm-help.1
index e3b322850a728a..c2880c831f6490 100644
--- a/deps/npm/man/man1/npm-help.1
+++ b/deps/npm/man/man1/npm-help.1
@@ -1,4 +1,4 @@
-.TH "NPM-HELP" "1" "January 2024" "" ""
+.TH "NPM-HELP" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-help\fR - Get help on npm
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-hook.1 b/deps/npm/man/man1/npm-hook.1
index c544b23a94a89f..2fc1b0dd667b88 100644
--- a/deps/npm/man/man1/npm-hook.1
+++ b/deps/npm/man/man1/npm-hook.1
@@ -1,4 +1,4 @@
-.TH "NPM-HOOK" "1" "January 2024" "" ""
+.TH "NPM-HOOK" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-hook\fR - Manage registry hooks
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-init.1 b/deps/npm/man/man1/npm-init.1
index ce674e7d610308..bfc7e48dc532a3 100644
--- a/deps/npm/man/man1/npm-init.1
+++ b/deps/npm/man/man1/npm-init.1
@@ -1,4 +1,4 @@
-.TH "NPM-INIT" "1" "January 2024" "" ""
+.TH "NPM-INIT" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-init\fR - Create a package.json file
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-install-ci-test.1 b/deps/npm/man/man1/npm-install-ci-test.1
index cfb93cc754a5a1..adc70da13cdf63 100644
--- a/deps/npm/man/man1/npm-install-ci-test.1
+++ b/deps/npm/man/man1/npm-install-ci-test.1
@@ -1,4 +1,4 @@
-.TH "NPM-INSTALL-CI-TEST" "1" "January 2024" "" ""
+.TH "NPM-INSTALL-CI-TEST" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-install-ci-test\fR - Install a project with a clean slate and run tests
.SS "Synopsis"
@@ -95,7 +95,7 @@ When such an override is performed, a warning is printed, explaining the conflic
.SS "\fBforeground-scripts\fR"
.RS 0
.IP \(bu 4
-Default: false
+Default: \fBfalse\fR unless when using \fBnpm pack\fR or \fBnpm publish\fR where it defaults to \fBtrue\fR
.IP \(bu 4
Type: Boolean
.RE 0
diff --git a/deps/npm/man/man1/npm-install-test.1 b/deps/npm/man/man1/npm-install-test.1
index 9a7b69ff8a4571..8a0fcc72025b28 100644
--- a/deps/npm/man/man1/npm-install-test.1
+++ b/deps/npm/man/man1/npm-install-test.1
@@ -1,4 +1,4 @@
-.TH "NPM-INSTALL-TEST" "1" "January 2024" "" ""
+.TH "NPM-INSTALL-TEST" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-install-test\fR - Install package(s) and run tests
.SS "Synopsis"
@@ -172,7 +172,7 @@ For \fBlist\fR this means the output will be based on the tree described by the
.SS "\fBforeground-scripts\fR"
.RS 0
.IP \(bu 4
-Default: false
+Default: \fBfalse\fR unless when using \fBnpm pack\fR or \fBnpm publish\fR where it defaults to \fBtrue\fR
.IP \(bu 4
Type: Boolean
.RE 0
diff --git a/deps/npm/man/man1/npm-install.1 b/deps/npm/man/man1/npm-install.1
index bd1c0ded701450..d6b5990abffd56 100644
--- a/deps/npm/man/man1/npm-install.1
+++ b/deps/npm/man/man1/npm-install.1
@@ -1,4 +1,4 @@
-.TH "NPM-INSTALL" "1" "January 2024" "" ""
+.TH "NPM-INSTALL" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-install\fR - Install a package
.SS "Synopsis"
@@ -534,7 +534,7 @@ For \fBlist\fR this means the output will be based on the tree described by the
.SS "\fBforeground-scripts\fR"
.RS 0
.IP \(bu 4
-Default: false
+Default: \fBfalse\fR unless when using \fBnpm pack\fR or \fBnpm publish\fR where it defaults to \fBtrue\fR
.IP \(bu 4
Type: Boolean
.RE 0
diff --git a/deps/npm/man/man1/npm-link.1 b/deps/npm/man/man1/npm-link.1
index 3403d178525184..a2ee4fe19a0995 100644
--- a/deps/npm/man/man1/npm-link.1
+++ b/deps/npm/man/man1/npm-link.1
@@ -1,4 +1,4 @@
-.TH "NPM-LINK" "1" "January 2024" "" ""
+.TH "NPM-LINK" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-link\fR - Symlink a package folder
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-login.1 b/deps/npm/man/man1/npm-login.1
index f3d4934c85b20e..858a80ba3e19c1 100644
--- a/deps/npm/man/man1/npm-login.1
+++ b/deps/npm/man/man1/npm-login.1
@@ -1,4 +1,4 @@
-.TH "NPM-LOGIN" "1" "January 2024" "" ""
+.TH "NPM-LOGIN" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-login\fR - Login to a registry user account
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-logout.1 b/deps/npm/man/man1/npm-logout.1
index b8f521280db4cb..9151725cd4f5e2 100644
--- a/deps/npm/man/man1/npm-logout.1
+++ b/deps/npm/man/man1/npm-logout.1
@@ -1,4 +1,4 @@
-.TH "NPM-LOGOUT" "1" "January 2024" "" ""
+.TH "NPM-LOGOUT" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-logout\fR - Log out of the registry
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-ls.1 b/deps/npm/man/man1/npm-ls.1
index 5e314fe40308b0..0acb36abe2ae8a 100644
--- a/deps/npm/man/man1/npm-ls.1
+++ b/deps/npm/man/man1/npm-ls.1
@@ -1,4 +1,4 @@
-.TH "NPM-LS" "1" "January 2024" "" ""
+.TH "NPM-LS" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-ls\fR - List installed packages
.SS "Synopsis"
@@ -20,7 +20,7 @@ Positional arguments are \fBname@version-range\fR identifiers, which will limit
.P
.RS 2
.nf
-npm@10.3.0 /path/to/npm
+npm@10.5.0 /path/to/npm
└─┬ init-package-json@0.0.4
└── promzard@0.1.5
.fi
diff --git a/deps/npm/man/man1/npm-org.1 b/deps/npm/man/man1/npm-org.1
index c4666d623d5f69..56c41d3cf2991c 100644
--- a/deps/npm/man/man1/npm-org.1
+++ b/deps/npm/man/man1/npm-org.1
@@ -1,4 +1,4 @@
-.TH "NPM-ORG" "1" "January 2024" "" ""
+.TH "NPM-ORG" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-org\fR - Manage orgs
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-outdated.1 b/deps/npm/man/man1/npm-outdated.1
index 186dfaeade934f..8357aa2472a59c 100644
--- a/deps/npm/man/man1/npm-outdated.1
+++ b/deps/npm/man/man1/npm-outdated.1
@@ -1,4 +1,4 @@
-.TH "NPM-OUTDATED" "1" "January 2024" "" ""
+.TH "NPM-OUTDATED" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-outdated\fR - Check for outdated packages
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-owner.1 b/deps/npm/man/man1/npm-owner.1
index 02afd6627f2c04..d11d2bf54290e5 100644
--- a/deps/npm/man/man1/npm-owner.1
+++ b/deps/npm/man/man1/npm-owner.1
@@ -1,4 +1,4 @@
-.TH "NPM-OWNER" "1" "January 2024" "" ""
+.TH "NPM-OWNER" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-owner\fR - Manage package owners
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-pack.1 b/deps/npm/man/man1/npm-pack.1
index 075f61681ec84d..a25b769cc74edb 100644
--- a/deps/npm/man/man1/npm-pack.1
+++ b/deps/npm/man/man1/npm-pack.1
@@ -1,4 +1,4 @@
-.TH "NPM-PACK" "1" "January 2024" "" ""
+.TH "NPM-PACK" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-pack\fR - Create a tarball from a package
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-ping.1 b/deps/npm/man/man1/npm-ping.1
index 4abefd19837e32..20bc98116b5e75 100644
--- a/deps/npm/man/man1/npm-ping.1
+++ b/deps/npm/man/man1/npm-ping.1
@@ -1,4 +1,4 @@
-.TH "NPM-PING" "1" "January 2024" "" ""
+.TH "NPM-PING" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-ping\fR - Ping npm registry
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-pkg.1 b/deps/npm/man/man1/npm-pkg.1
index c70c95fc27d1ab..1c83741aff95e6 100644
--- a/deps/npm/man/man1/npm-pkg.1
+++ b/deps/npm/man/man1/npm-pkg.1
@@ -1,4 +1,4 @@
-.TH "NPM-PKG" "1" "January 2024" "" ""
+.TH "NPM-PKG" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-pkg\fR - Manages your package.json
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-prefix.1 b/deps/npm/man/man1/npm-prefix.1
index dabc60e7e6ef25..a9fc70239b5de3 100644
--- a/deps/npm/man/man1/npm-prefix.1
+++ b/deps/npm/man/man1/npm-prefix.1
@@ -1,4 +1,4 @@
-.TH "NPM-PREFIX" "1" "January 2024" "" ""
+.TH "NPM-PREFIX" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-prefix\fR - Display prefix
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-profile.1 b/deps/npm/man/man1/npm-profile.1
index 2966cf66d1c3c0..82f6af354da89e 100644
--- a/deps/npm/man/man1/npm-profile.1
+++ b/deps/npm/man/man1/npm-profile.1
@@ -1,4 +1,4 @@
-.TH "NPM-PROFILE" "1" "January 2024" "" ""
+.TH "NPM-PROFILE" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-profile\fR - Change settings on your registry profile
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-prune.1 b/deps/npm/man/man1/npm-prune.1
index af09d9962f7c93..c54bb96caee5c8 100644
--- a/deps/npm/man/man1/npm-prune.1
+++ b/deps/npm/man/man1/npm-prune.1
@@ -1,4 +1,4 @@
-.TH "NPM-PRUNE" "1" "January 2024" "" ""
+.TH "NPM-PRUNE" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-prune\fR - Remove extraneous packages
.SS "Synopsis"
@@ -84,7 +84,7 @@ Not supported by all npm commands.
.SS "\fBforeground-scripts\fR"
.RS 0
.IP \(bu 4
-Default: false
+Default: \fBfalse\fR unless when using \fBnpm pack\fR or \fBnpm publish\fR where it defaults to \fBtrue\fR
.IP \(bu 4
Type: Boolean
.RE 0
diff --git a/deps/npm/man/man1/npm-publish.1 b/deps/npm/man/man1/npm-publish.1
index deaead3259a2e1..55a90c1380b487 100644
--- a/deps/npm/man/man1/npm-publish.1
+++ b/deps/npm/man/man1/npm-publish.1
@@ -1,4 +1,4 @@
-.TH "NPM-PUBLISH" "1" "January 2024" "" ""
+.TH "NPM-PUBLISH" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-publish\fR - Publish a package
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-query.1 b/deps/npm/man/man1/npm-query.1
index 7730ecea472b6c..3940d6e80e15e6 100644
--- a/deps/npm/man/man1/npm-query.1
+++ b/deps/npm/man/man1/npm-query.1
@@ -1,4 +1,4 @@
-.TH "NPM-QUERY" "1" "January 2024" "" ""
+.TH "NPM-QUERY" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-query\fR - Dependency selector query
.SS "Synopsis"
@@ -138,9 +138,23 @@ an array of dependency objects is returned which can contain multiple copies of
...
.fi
.RE
-.SS "Package lock only mode"
+.SS "Expecting a certain number of results"
.P
-If package-lock-only is enabled, only the information in the package lock (or shrinkwrap) is loaded. This means that information from the package.json files of your dependencies will not be included in the result set (e.g. description, homepage, engines).
+One common use of \fBnpm query\fR is to make sure there is only one version of a certain dependency in your tree. This is especially common for ecosystems like that rely on \fBtypescript\fR where having state split across two different but identically-named packages causes bugs. You can use the \fB--expect-results\fR or \fB--expect-result-count\fR in your setup to ensure that npm will exit with an exit code if your tree doesn't look like you want it to.
+.P
+.RS 2
+.nf
+$ npm query '#react' --expect-result-count=1
+.fi
+.RE
+.P
+Perhaps you want to quickly check if there are any production dependencies that could be updated:
+.P
+.RS 2
+.nf
+$ npm query ':root>:outdated(in-range).prod' --no-expect-results
+.fi
+.RE
.SS "Package lock only mode"
.P
If package-lock-only is enabled, only the information in the package lock (or shrinkwrap) is loaded. This means that information from the package.json files of your dependencies will not be included in the result set (e.g. description, homepage, engines).
@@ -236,6 +250,30 @@ If set to true, the current operation will only use the \fBpackage-lock.json\fR,
For \fBupdate\fR this means only the \fBpackage-lock.json\fR will be updated, instead of checking \fBnode_modules\fR and downloading dependencies.
.P
For \fBlist\fR this means the output will be based on the tree described by the \fBpackage-lock.json\fR, rather than the contents of \fBnode_modules\fR.
+.SS "\fBexpect-results\fR"
+.RS 0
+.IP \(bu 4
+Default: null
+.IP \(bu 4
+Type: null or Boolean
+.RE 0
+
+.P
+Tells npm whether or not to expect results from the command. Can be either true (expect some results) or false (expect no results).
+.P
+This config can not be used with: \fBexpect-result-count\fR
+.SS "\fBexpect-result-count\fR"
+.RS 0
+.IP \(bu 4
+Default: null
+.IP \(bu 4
+Type: null or Number
+.RE 0
+
+.P
+Tells to expect a specific number of results from the command.
+.P
+This config can not be used with: \fBexpect-results\fR
.SH "SEE ALSO"
.RS 0
.IP \(bu 4
diff --git a/deps/npm/man/man1/npm-rebuild.1 b/deps/npm/man/man1/npm-rebuild.1
index f3e0c3ff4c6f0e..ec29b9e036471d 100644
--- a/deps/npm/man/man1/npm-rebuild.1
+++ b/deps/npm/man/man1/npm-rebuild.1
@@ -1,4 +1,4 @@
-.TH "NPM-REBUILD" "1" "January 2024" "" ""
+.TH "NPM-REBUILD" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-rebuild\fR - Rebuild a package
.SS "Synopsis"
@@ -80,7 +80,7 @@ Set to false to have it not do this. This can be used to work around the fact th
.SS "\fBforeground-scripts\fR"
.RS 0
.IP \(bu 4
-Default: false
+Default: \fBfalse\fR unless when using \fBnpm pack\fR or \fBnpm publish\fR where it defaults to \fBtrue\fR
.IP \(bu 4
Type: Boolean
.RE 0
diff --git a/deps/npm/man/man1/npm-repo.1 b/deps/npm/man/man1/npm-repo.1
index 1da82d9b3b52f1..a909f41a882fd2 100644
--- a/deps/npm/man/man1/npm-repo.1
+++ b/deps/npm/man/man1/npm-repo.1
@@ -1,4 +1,4 @@
-.TH "NPM-REPO" "1" "January 2024" "" ""
+.TH "NPM-REPO" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-repo\fR - Open package repository page in the browser
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-restart.1 b/deps/npm/man/man1/npm-restart.1
index 459d99a14026c4..f83b41709ff3e1 100644
--- a/deps/npm/man/man1/npm-restart.1
+++ b/deps/npm/man/man1/npm-restart.1
@@ -1,4 +1,4 @@
-.TH "NPM-RESTART" "1" "January 2024" "" ""
+.TH "NPM-RESTART" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-restart\fR - Restart a package
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-root.1 b/deps/npm/man/man1/npm-root.1
index 6761a6608a4f5b..9819a9d9e5e9e1 100644
--- a/deps/npm/man/man1/npm-root.1
+++ b/deps/npm/man/man1/npm-root.1
@@ -1,4 +1,4 @@
-.TH "NPM-ROOT" "1" "January 2024" "" ""
+.TH "NPM-ROOT" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-root\fR - Display npm root
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-run-script.1 b/deps/npm/man/man1/npm-run-script.1
index 66fcf9fab78ba2..513eb7de904399 100644
--- a/deps/npm/man/man1/npm-run-script.1
+++ b/deps/npm/man/man1/npm-run-script.1
@@ -1,4 +1,4 @@
-.TH "NPM-RUN-SCRIPT" "1" "January 2024" "" ""
+.TH "NPM-RUN-SCRIPT" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-run-script\fR - Run arbitrary package scripts
.SS "Synopsis"
@@ -195,7 +195,7 @@ Note that commands explicitly intended to run a particular script, such as \fBnp
.SS "\fBforeground-scripts\fR"
.RS 0
.IP \(bu 4
-Default: false
+Default: \fBfalse\fR unless when using \fBnpm pack\fR or \fBnpm publish\fR where it defaults to \fBtrue\fR
.IP \(bu 4
Type: Boolean
.RE 0
diff --git a/deps/npm/man/man1/npm-sbom.1 b/deps/npm/man/man1/npm-sbom.1
index b89c3ff35dc049..5c3016bff248e0 100644
--- a/deps/npm/man/man1/npm-sbom.1
+++ b/deps/npm/man/man1/npm-sbom.1
@@ -1,4 +1,4 @@
-.TH "NPM-SBOM" "1" "January 2024" "" ""
+.TH "NPM-SBOM" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-sbom\fR - Generate a Software Bill of Materials (SBOM)
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-search.1 b/deps/npm/man/man1/npm-search.1
index d8ffc4bbe4e8e2..3467f3256b8cb0 100644
--- a/deps/npm/man/man1/npm-search.1
+++ b/deps/npm/man/man1/npm-search.1
@@ -1,4 +1,4 @@
-.TH "NPM-SEARCH" "1" "January 2024" "" ""
+.TH "NPM-SEARCH" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-search\fR - Search for packages
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-shrinkwrap.1 b/deps/npm/man/man1/npm-shrinkwrap.1
index d7df87411550f5..37320600e7d922 100644
--- a/deps/npm/man/man1/npm-shrinkwrap.1
+++ b/deps/npm/man/man1/npm-shrinkwrap.1
@@ -1,4 +1,4 @@
-.TH "NPM-SHRINKWRAP" "1" "January 2024" "" ""
+.TH "NPM-SHRINKWRAP" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-shrinkwrap\fR - Lock down dependency versions for publication
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-star.1 b/deps/npm/man/man1/npm-star.1
index 610ec54213fe62..22cbdb0d3be628 100644
--- a/deps/npm/man/man1/npm-star.1
+++ b/deps/npm/man/man1/npm-star.1
@@ -1,4 +1,4 @@
-.TH "NPM-STAR" "1" "January 2024" "" ""
+.TH "NPM-STAR" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-star\fR - Mark your favorite packages
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-stars.1 b/deps/npm/man/man1/npm-stars.1
index eb2391b790d625..1f61a034e89c89 100644
--- a/deps/npm/man/man1/npm-stars.1
+++ b/deps/npm/man/man1/npm-stars.1
@@ -1,4 +1,4 @@
-.TH "NPM-STARS" "1" "January 2024" "" ""
+.TH "NPM-STARS" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-stars\fR - View packages marked as favorites
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-start.1 b/deps/npm/man/man1/npm-start.1
index a4cf36fdcacb75..3aebd2cb6cb71c 100644
--- a/deps/npm/man/man1/npm-start.1
+++ b/deps/npm/man/man1/npm-start.1
@@ -1,4 +1,4 @@
-.TH "NPM-START" "1" "January 2024" "" ""
+.TH "NPM-START" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-start\fR - Start a package
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-stop.1 b/deps/npm/man/man1/npm-stop.1
index 8fe1df7fe1f190..0129b04701b769 100644
--- a/deps/npm/man/man1/npm-stop.1
+++ b/deps/npm/man/man1/npm-stop.1
@@ -1,4 +1,4 @@
-.TH "NPM-STOP" "1" "January 2024" "" ""
+.TH "NPM-STOP" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-stop\fR - Stop a package
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-team.1 b/deps/npm/man/man1/npm-team.1
index c61904afc1cc82..61994725fea1ec 100644
--- a/deps/npm/man/man1/npm-team.1
+++ b/deps/npm/man/man1/npm-team.1
@@ -1,4 +1,4 @@
-.TH "NPM-TEAM" "1" "January 2024" "" ""
+.TH "NPM-TEAM" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-team\fR - Manage organization teams and team memberships
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-test.1 b/deps/npm/man/man1/npm-test.1
index 865dfc5ea794ef..d30343b3032130 100644
--- a/deps/npm/man/man1/npm-test.1
+++ b/deps/npm/man/man1/npm-test.1
@@ -1,4 +1,4 @@
-.TH "NPM-TEST" "1" "January 2024" "" ""
+.TH "NPM-TEST" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-test\fR - Test a package
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-token.1 b/deps/npm/man/man1/npm-token.1
index 0a42bd48c5fcbb..3eeb0763970b65 100644
--- a/deps/npm/man/man1/npm-token.1
+++ b/deps/npm/man/man1/npm-token.1
@@ -1,4 +1,4 @@
-.TH "NPM-TOKEN" "1" "January 2024" "" ""
+.TH "NPM-TOKEN" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-token\fR - Manage your authentication tokens
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-uninstall.1 b/deps/npm/man/man1/npm-uninstall.1
index 13be7457cf72f5..321b58fc391d6e 100644
--- a/deps/npm/man/man1/npm-uninstall.1
+++ b/deps/npm/man/man1/npm-uninstall.1
@@ -1,4 +1,4 @@
-.TH "NPM-UNINSTALL" "1" "January 2024" "" ""
+.TH "NPM-UNINSTALL" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-uninstall\fR - Remove a package
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-unpublish.1 b/deps/npm/man/man1/npm-unpublish.1
index 12a2fd78133444..2cf081e01f7007 100644
--- a/deps/npm/man/man1/npm-unpublish.1
+++ b/deps/npm/man/man1/npm-unpublish.1
@@ -1,4 +1,4 @@
-.TH "NPM-UNPUBLISH" "1" "January 2024" "" ""
+.TH "NPM-UNPUBLISH" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-unpublish\fR - Remove a package from the registry
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-unstar.1 b/deps/npm/man/man1/npm-unstar.1
index 8fdc2941fb60f1..700a7b3aa186b7 100644
--- a/deps/npm/man/man1/npm-unstar.1
+++ b/deps/npm/man/man1/npm-unstar.1
@@ -1,4 +1,4 @@
-.TH "NPM-UNSTAR" "1" "January 2024" "" ""
+.TH "NPM-UNSTAR" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-unstar\fR - Remove an item from your favorite packages
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-update.1 b/deps/npm/man/man1/npm-update.1
index 742fbe7f7547af..833d3446c47899 100644
--- a/deps/npm/man/man1/npm-update.1
+++ b/deps/npm/man/man1/npm-update.1
@@ -1,4 +1,4 @@
-.TH "NPM-UPDATE" "1" "January 2024" "" ""
+.TH "NPM-UPDATE" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-update\fR - Update packages
.SS "Synopsis"
@@ -20,7 +20,7 @@ If the \fB-g\fR flag is specified, this command will update globally installed p
.P
If no package name is specified, all packages in the specified location (global or local) will be updated.
.P
-Note that by default \fBnpm update\fR will not update the semver values of direct dependencies in your project \fBpackage.json\fR, if you want to also update values in \fBpackage.json\fR you can run: \fBnpm update --save\fR (or add the \fBsave=true\fR option to a npm help "configuration file" to make that the default behavior).
+Note that by default \fBnpm update\fR will not update the semver values of direct dependencies in your project \fBpackage.json\fR. If you want to also update values in \fBpackage.json\fR you can run: \fBnpm update --save\fR (or add the \fBsave=true\fR option to a npm help "configuration file" to make that the default behavior).
.SS "Example"
.P
For the examples below, assume that the current package is \fBapp\fR and it depends on dependencies, \fBdep1\fR (\fBdep2\fR, .. etc.). The published versions of \fBdep1\fR are:
@@ -68,7 +68,7 @@ However, if \fBapp\fR's \fBpackage.json\fR contains:
.fi
.RE
.P
-In this case, running \fBnpm update\fR will install \fBdep1@1.1.2\fR. Even though the \fBlatest\fR tag points to \fB1.2.2\fR, this version do not satisfy \fB~1.1.1\fR, which is equivalent to \fB>=1.1.1 <1.2.0\fR. So the highest-sorting version that satisfies \fB~1.1.1\fR is used, which is \fB1.1.2\fR.
+In this case, running \fBnpm update\fR will install \fBdep1@1.1.2\fR. Even though the \fBlatest\fR tag points to \fB1.2.2\fR, this version does not satisfy \fB~1.1.1\fR, which is equivalent to \fB>=1.1.1 <1.2.0\fR. So the highest-sorting version that satisfies \fB~1.1.1\fR is used, which is \fB1.1.2\fR.
.SS "Caret Dependencies below 1.0.0"
.P
Suppose \fBapp\fR has a caret dependency on a version below \fB1.0.0\fR, for example:
@@ -81,7 +81,7 @@ Suppose \fBapp\fR has a caret dependency on a version below \fB1.0.0\fR, for exa
.fi
.RE
.P
-\fBnpm update\fR will install \fBdep1@0.2.0\fR, because there are no other versions which satisfy \fB^0.2.0\fR.
+\fBnpm update\fR will install \fBdep1@0.2.0\fR.
.P
If the dependence were on \fB^0.4.0\fR:
.P
@@ -256,7 +256,7 @@ If set to false, then ignore \fBpackage-lock.json\fR files when installing. This
.SS "\fBforeground-scripts\fR"
.RS 0
.IP \(bu 4
-Default: false
+Default: \fBfalse\fR unless when using \fBnpm pack\fR or \fBnpm publish\fR where it defaults to \fBtrue\fR
.IP \(bu 4
Type: Boolean
.RE 0
diff --git a/deps/npm/man/man1/npm-version.1 b/deps/npm/man/man1/npm-version.1
index f4a976fafa39d9..be406e39b084fe 100644
--- a/deps/npm/man/man1/npm-version.1
+++ b/deps/npm/man/man1/npm-version.1
@@ -1,4 +1,4 @@
-.TH "NPM-VERSION" "1" "January 2024" "" ""
+.TH "NPM-VERSION" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-version\fR - Bump a package version
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-view.1 b/deps/npm/man/man1/npm-view.1
index 7ce90e336e3154..8258a85f30be75 100644
--- a/deps/npm/man/man1/npm-view.1
+++ b/deps/npm/man/man1/npm-view.1
@@ -1,4 +1,4 @@
-.TH "NPM-VIEW" "1" "January 2024" "" ""
+.TH "NPM-VIEW" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-view\fR - View registry info
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-whoami.1 b/deps/npm/man/man1/npm-whoami.1
index bead7976024f53..6ac250c269fd34 100644
--- a/deps/npm/man/man1/npm-whoami.1
+++ b/deps/npm/man/man1/npm-whoami.1
@@ -1,4 +1,4 @@
-.TH "NPM-WHOAMI" "1" "January 2024" "" ""
+.TH "NPM-WHOAMI" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm-whoami\fR - Display npm username
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm.1 b/deps/npm/man/man1/npm.1
index a1844237f29f23..aee40ff5bac8ff 100644
--- a/deps/npm/man/man1/npm.1
+++ b/deps/npm/man/man1/npm.1
@@ -1,4 +1,4 @@
-.TH "NPM" "1" "January 2024" "" ""
+.TH "NPM" "1" "February 2024" "" ""
.SH "NAME"
\fBnpm\fR - javascript package manager
.SS "Synopsis"
@@ -12,7 +12,7 @@ npm
Note: This command is unaware of workspaces.
.SS "Version"
.P
-10.3.0
+10.5.0
.SS "Description"
.P
npm is the package manager for the Node JavaScript platform. It puts modules in place so that node can find them, and manages dependency conflicts intelligently.
diff --git a/deps/npm/man/man1/npx.1 b/deps/npm/man/man1/npx.1
index 44833d0c7a575c..155451463a0729 100644
--- a/deps/npm/man/man1/npx.1
+++ b/deps/npm/man/man1/npx.1
@@ -1,4 +1,4 @@
-.TH "NPX" "1" "January 2024" "" ""
+.TH "NPX" "1" "February 2024" "" ""
.SH "NAME"
\fBnpx\fR - Run a command from a local or remote npm package
.SS "Synopsis"
diff --git a/deps/npm/man/man5/folders.5 b/deps/npm/man/man5/folders.5
index 73d1862bab4fb1..de010820184ef4 100644
--- a/deps/npm/man/man5/folders.5
+++ b/deps/npm/man/man5/folders.5
@@ -1,4 +1,4 @@
-.TH "FOLDERS" "5" "January 2024" "" ""
+.TH "FOLDERS" "5" "February 2024" "" ""
.SH "NAME"
\fBfolders\fR - Folder Structures Used by npm
.SS "Description"
diff --git a/deps/npm/man/man5/install.5 b/deps/npm/man/man5/install.5
index 0e3d7170254218..85a83de6062b8f 100644
--- a/deps/npm/man/man5/install.5
+++ b/deps/npm/man/man5/install.5
@@ -1,4 +1,4 @@
-.TH "INSTALL" "5" "January 2024" "" ""
+.TH "INSTALL" "5" "February 2024" "" ""
.SH "NAME"
\fBinstall\fR - Download and install node and npm
.SS "Description"
diff --git a/deps/npm/man/man5/npm-global.5 b/deps/npm/man/man5/npm-global.5
index 73d1862bab4fb1..de010820184ef4 100644
--- a/deps/npm/man/man5/npm-global.5
+++ b/deps/npm/man/man5/npm-global.5
@@ -1,4 +1,4 @@
-.TH "FOLDERS" "5" "January 2024" "" ""
+.TH "FOLDERS" "5" "February 2024" "" ""
.SH "NAME"
\fBfolders\fR - Folder Structures Used by npm
.SS "Description"
diff --git a/deps/npm/man/man5/npm-json.5 b/deps/npm/man/man5/npm-json.5
index eb82f2539897a8..61405e54c35d70 100644
--- a/deps/npm/man/man5/npm-json.5
+++ b/deps/npm/man/man5/npm-json.5
@@ -1,4 +1,4 @@
-.TH "PACKAGE.JSON" "5" "January 2024" "" ""
+.TH "PACKAGE.JSON" "5" "February 2024" "" ""
.SH "NAME"
\fBpackage.json\fR - Specifics of npm's package.json handling
.SS "Description"
@@ -686,7 +686,7 @@ in which case they will be normalized to a relative path and added to your \fBpa
.fi
.RE
.P
-This feature is helpful for local offline development and creating tests that require npm installing where you don't want to hit an external server, but should not be used when publishing packages to the public registry.
+This feature is helpful for local offline development and creating tests that require npm installing where you don't want to hit an external server, but should not be used when publishing your package to the public registry.
.P
\fInote\fR: Packages linked by local path will not have their own dependencies installed when \fBnpm install\fR is ran in this case. You must run \fBnpm install\fR from inside the local path itself.
.SS "devDependencies"
diff --git a/deps/npm/man/man5/npm-shrinkwrap-json.5 b/deps/npm/man/man5/npm-shrinkwrap-json.5
index 5a18abb999e0ff..b3abb0cc092c2a 100644
--- a/deps/npm/man/man5/npm-shrinkwrap-json.5
+++ b/deps/npm/man/man5/npm-shrinkwrap-json.5
@@ -1,4 +1,4 @@
-.TH "NPM-SHRINKWRAP.JSON" "5" "January 2024" "" ""
+.TH "NPM-SHRINKWRAP.JSON" "5" "February 2024" "" ""
.SH "NAME"
\fBnpm-shrinkwrap.json\fR - A publishable lockfile
.SS "Description"
diff --git a/deps/npm/man/man5/npmrc.5 b/deps/npm/man/man5/npmrc.5
index 4af73a99fea2cd..c86c21b155dbd7 100644
--- a/deps/npm/man/man5/npmrc.5
+++ b/deps/npm/man/man5/npmrc.5
@@ -1,4 +1,4 @@
-.TH "NPMRC" "5" "January 2024" "" ""
+.TH "NPMRC" "5" "February 2024" "" ""
.SH "NAME"
\fBnpmrc\fR - The npm config files
.SS "Description"
diff --git a/deps/npm/man/man5/package-json.5 b/deps/npm/man/man5/package-json.5
index eb82f2539897a8..61405e54c35d70 100644
--- a/deps/npm/man/man5/package-json.5
+++ b/deps/npm/man/man5/package-json.5
@@ -1,4 +1,4 @@
-.TH "PACKAGE.JSON" "5" "January 2024" "" ""
+.TH "PACKAGE.JSON" "5" "February 2024" "" ""
.SH "NAME"
\fBpackage.json\fR - Specifics of npm's package.json handling
.SS "Description"
@@ -686,7 +686,7 @@ in which case they will be normalized to a relative path and added to your \fBpa
.fi
.RE
.P
-This feature is helpful for local offline development and creating tests that require npm installing where you don't want to hit an external server, but should not be used when publishing packages to the public registry.
+This feature is helpful for local offline development and creating tests that require npm installing where you don't want to hit an external server, but should not be used when publishing your package to the public registry.
.P
\fInote\fR: Packages linked by local path will not have their own dependencies installed when \fBnpm install\fR is ran in this case. You must run \fBnpm install\fR from inside the local path itself.
.SS "devDependencies"
diff --git a/deps/npm/man/man5/package-lock-json.5 b/deps/npm/man/man5/package-lock-json.5
index 6172a8ba0e8340..ceea2b43da89e2 100644
--- a/deps/npm/man/man5/package-lock-json.5
+++ b/deps/npm/man/man5/package-lock-json.5
@@ -1,4 +1,4 @@
-.TH "PACKAGE-LOCK.JSON" "5" "January 2024" "" ""
+.TH "PACKAGE-LOCK.JSON" "5" "February 2024" "" ""
.SH "NAME"
\fBpackage-lock.json\fR - A manifestation of the manifest
.SS "Description"
diff --git a/deps/npm/man/man7/config.7 b/deps/npm/man/man7/config.7
index 308e1632b43215..181a7d6a469a9e 100644
--- a/deps/npm/man/man7/config.7
+++ b/deps/npm/man/man7/config.7
@@ -1,8 +1,10 @@
-.TH "CONFIG" "7" "January 2024" "" ""
+.TH "CONFIG" "7" "February 2024" "" ""
.SH "NAME"
\fBconfig\fR - More than you probably want to know about npm configuration
.SS "Description"
.P
+This article details npm configuration in general. To learn about the \fBconfig\fR command, see npm help config.
+.P
npm gets its configuration values from the following sources, sorted by priority:
.SS "Command Line Flags"
.P
@@ -498,6 +500,30 @@ Type: Boolean
If set to true, then npm will stubbornly refuse to install (or even consider installing) any package that claims to not be compatible with the current Node.js version.
.P
This can be overridden by setting the \fB--force\fR flag.
+.SS "\fBexpect-result-count\fR"
+.RS 0
+.IP \(bu 4
+Default: null
+.IP \(bu 4
+Type: null or Number
+.RE 0
+
+.P
+Tells to expect a specific number of results from the command.
+.P
+This config can not be used with: \fBexpect-results\fR
+.SS "\fBexpect-results\fR"
+.RS 0
+.IP \(bu 4
+Default: null
+.IP \(bu 4
+Type: null or Boolean
+.RE 0
+
+.P
+Tells npm whether or not to expect results from the command. Can be either true (expect some results) or false (expect no results).
+.P
+This config can not be used with: \fBexpect-result-count\fR
.SS "\fBfetch-retries\fR"
.RS 0
.IP \(bu 4
@@ -590,7 +616,7 @@ If you don't have a clear idea of what you want to do, it is strongly recommende
.SS "\fBforeground-scripts\fR"
.RS 0
.IP \(bu 4
-Default: false
+Default: \fBfalse\fR unless when using \fBnpm pack\fR or \fBnpm publish\fR where it defaults to \fBtrue\fR
.IP \(bu 4
Type: Boolean
.RE 0
diff --git a/deps/npm/man/man7/dependency-selectors.7 b/deps/npm/man/man7/dependency-selectors.7
index 489f33f3f38a3b..78f451177e3172 100644
--- a/deps/npm/man/man7/dependency-selectors.7
+++ b/deps/npm/man/man7/dependency-selectors.7
@@ -1,4 +1,4 @@
-.TH "QUERYING" "7" "January 2024" "" ""
+.TH "QUERYING" "7" "February 2024" "" ""
.SH "NAME"
\fBQuerying\fR - Dependency Selector Syntax & Querying
.SS "Description"
@@ -15,7 +15,7 @@ Unlocks the ability to answer complex, multi-faceted questions about dependencie
Consolidates redundant logic of similar query commands in \fBnpm\fR (ex. \fBnpm fund\fR, \fBnpm ls\fR, \fBnpm outdated\fR, \fBnpm audit\fR ...)
.RE 0
-.SS "Dependency Selector Syntax \fBv1.0.0\fR"
+.SS "Dependency Selector Syntax"
.SS "Overview:"
.RS 0
.IP \(bu 4
@@ -102,6 +102,8 @@ the term "dependencies" is in reference to any \fBNode\fR found in a \fBtree\fR
\fB:type(
)\fR \fBbased on currently recognized types\fR \fI\(lahttps://github.com/npm/npm-package-arg#result-object\(ra\fR
.IP \(bu 4
\fB:outdated()\fR when a dependency is outdated
+.IP \(bu 4
+\fB:vuln()\fR when a dependency has a known vulnerability
.RE 0
.SS "\fB:semver(, \[lB]selector\[rB], \[lB]function\[rB])\fR"
@@ -136,9 +138,9 @@ The \fB:outdated\fR pseudo selector retrieves data from the registry and returns
.IP \(bu 4
\fBany\fR (default) a version exists that is greater than the current one
.IP \(bu 4
-\fBin-range\fR a version exists that is greater than the current one, and satisfies at least one if its dependents
+\fBin-range\fR a version exists that is greater than the current one, and satisfies at least one if its parent's dependencies
.IP \(bu 4
-\fBout-of-range\fR a version exists that is greater than the current one, does not satisfy at least one of its dependents
+\fBout-of-range\fR a version exists that is greater than the current one, does not satisfy at least one of its parent's dependencies
.IP \(bu 4
\fBmajor\fR a version exists that is a semver major greater than the current one
.IP \(bu 4
@@ -164,7 +166,27 @@ Some examples:
.IP \(bu 4
\fB:root > :outdated(major)\fR returns every direct dependency that has a new semver major release
.IP \(bu 4
-\fB.prod:outdated(in-range)\fR returns production dependencies that have a new release that satisfies at least one of its edges in
+\fB.prod:outdated(in-range)\fR returns production dependencies that have a new release that satisfies at least one of its parent's dependencies
+.RE 0
+
+.SS "\fB:vuln\fR"
+.P
+The \fB:vuln\fR pseudo selector retrieves data from the registry and returns information about which if your dependencies has a known vulnerability. Only dependencies whose current version matches a vulnerability will be returned. For example if you have \fBsemver@7.6.0\fR in your tree, a vulnerability for \fBsemver\fR which affects versions \fB<=6.3.1\fR will not match.
+.P
+You can also filter results by certain attributes in advisories. Currently that includes \fBseverity\fR and \fBcwe\fR. Note that severity filtering is done per severity, it does not include severities "higher" or "lower" than the one specified.
+.P
+In addition to the filtering performed by the pseudo selector, info about each relevant advisory will be added to the \fBqueryContext\fR attribute of each node under the \fBadvisories\fR attribute.
+.P
+Some examples:
+.RS 0
+.IP \(bu 4
+\fB:root > .prod:vuln\fR returns direct production dependencies with any known vulnerability
+.IP \(bu 4
+\fB:vuln(\[lB]severity=high\[rB])\fR returns only dependencies with a vulnerability with a \fBhigh\fR severity.
+.IP \(bu 4
+\fB:vuln(\[lB]severity=high\[rB],\[lB]severity=moderate\[rB])\fR returns only dependencies with a vulnerability with a \fBhigh\fR or \fBmoderate\fR severity.
+.IP \(bu 4
+\fB:vuln(\[lB]cwe=1333\[rB])\fR returns only dependencies with a vulnerability that includes CWE-1333 (ReDoS)
.RE 0
.SS "\fBAttribute Selectors\fR \fI\(lahttps://developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors\(ra\fR"
@@ -174,7 +196,7 @@ The attribute selector evaluates the key/value pairs in \fBpackage.json\fR if th
.IP \(bu 4
\fB\[lB]\[rB]\fR attribute selector (ie. existence of attribute)
.IP \(bu 4
-\fB\[lB]attribute=value\[rB]\fR attribute value is equivalant...
+\fB\[lB]attribute=value\[rB]\fR attribute value is equivalent...
.IP \(bu 4
\fB\[lB]attribute~=value\[rB]\fR attribute value contains word...
.IP \(bu 4
diff --git a/deps/npm/man/man7/developers.7 b/deps/npm/man/man7/developers.7
index b259049ab72e5c..8dd07548d9b873 100644
--- a/deps/npm/man/man7/developers.7
+++ b/deps/npm/man/man7/developers.7
@@ -1,4 +1,4 @@
-.TH "DEVELOPERS" "7" "January 2024" "" ""
+.TH "DEVELOPERS" "7" "February 2024" "" ""
.SH "NAME"
\fBdevelopers\fR - Developer Guide
.SS "Description"
diff --git a/deps/npm/man/man7/logging.7 b/deps/npm/man/man7/logging.7
index c0340e820fa731..b85fb4c47cfcdc 100644
--- a/deps/npm/man/man7/logging.7
+++ b/deps/npm/man/man7/logging.7
@@ -1,4 +1,4 @@
-.TH "LOGGING" "7" "January 2024" "" ""
+.TH "LOGGING" "7" "February 2024" "" ""
.SH "NAME"
\fBLogging\fR - Why, What & How We Log
.SS "Description"
diff --git a/deps/npm/man/man7/orgs.7 b/deps/npm/man/man7/orgs.7
index b37092693719f6..36850dd961897d 100644
--- a/deps/npm/man/man7/orgs.7
+++ b/deps/npm/man/man7/orgs.7
@@ -1,4 +1,4 @@
-.TH "ORGS" "7" "January 2024" "" ""
+.TH "ORGS" "7" "February 2024" "" ""
.SH "NAME"
\fBorgs\fR - Working with Teams & Orgs
.SS "Description"
diff --git a/deps/npm/man/man7/package-spec.7 b/deps/npm/man/man7/package-spec.7
index d189b6273127d6..c9d309ccbbdbe0 100644
--- a/deps/npm/man/man7/package-spec.7
+++ b/deps/npm/man/man7/package-spec.7
@@ -1,4 +1,4 @@
-.TH "PACKAGE-SPEC" "7" "January 2024" "" ""
+.TH "PACKAGE-SPEC" "7" "February 2024" "" ""
.SH "NAME"
\fBpackage-spec\fR - Package name specifier
.SS "Description"
diff --git a/deps/npm/man/man7/registry.7 b/deps/npm/man/man7/registry.7
index 08a7778a18d54d..c0e4474c09010e 100644
--- a/deps/npm/man/man7/registry.7
+++ b/deps/npm/man/man7/registry.7
@@ -1,4 +1,4 @@
-.TH "REGISTRY" "7" "January 2024" "" ""
+.TH "REGISTRY" "7" "February 2024" "" ""
.SH "NAME"
\fBregistry\fR - The JavaScript Package Registry
.SS "Description"
diff --git a/deps/npm/man/man7/removal.7 b/deps/npm/man/man7/removal.7
index af0e2320303c8d..a846bcca25ffd3 100644
--- a/deps/npm/man/man7/removal.7
+++ b/deps/npm/man/man7/removal.7
@@ -1,4 +1,4 @@
-.TH "REMOVAL" "7" "January 2024" "" ""
+.TH "REMOVAL" "7" "February 2024" "" ""
.SH "NAME"
\fBremoval\fR - Cleaning the Slate
.SS "Synopsis"
diff --git a/deps/npm/man/man7/scope.7 b/deps/npm/man/man7/scope.7
index 7a753f73aec1dc..eb6fe9b6d822e9 100644
--- a/deps/npm/man/man7/scope.7
+++ b/deps/npm/man/man7/scope.7
@@ -1,4 +1,4 @@
-.TH "SCOPE" "7" "January 2024" "" ""
+.TH "SCOPE" "7" "February 2024" "" ""
.SH "NAME"
\fBscope\fR - Scoped packages
.SS "Description"
@@ -95,7 +95,7 @@ You can also associate a scope with a registry using \fBnpm config\fR:
.P
.RS 2
.nf
-npm config set @myco:registry http://reg.example.com
+npm config set @myco:registry=http://reg.example.com
.fi
.RE
.P
diff --git a/deps/npm/man/man7/scripts.7 b/deps/npm/man/man7/scripts.7
index 60f252bd137b62..e88a9c4e69519f 100644
--- a/deps/npm/man/man7/scripts.7
+++ b/deps/npm/man/man7/scripts.7
@@ -1,4 +1,4 @@
-.TH "SCRIPTS" "7" "January 2024" "" ""
+.TH "SCRIPTS" "7" "February 2024" "" ""
.SH "NAME"
\fBscripts\fR - How npm handles the "scripts" field
.SS "Description"
@@ -349,14 +349,13 @@ For example, if your package.json contains this:
{
"scripts" : {
"install" : "scripts/install.js",
- "postinstall" : "scripts/install.js",
- "uninstall" : "scripts/uninstall.js"
+ "postinstall" : "scripts/install.js"
}
}
.fi
.RE
.P
-then \fBscripts/install.js\fR will be called for the install and post-install stages of the lifecycle, and \fBscripts/uninstall.js\fR will be called when the package is uninstalled. Since \fBscripts/install.js\fR is running for two different phases, it would be wise in this case to look at the \fBnpm_lifecycle_event\fR environment variable.
+then \fBscripts/install.js\fR will be called for the install and post-install stages of the lifecycle. Since \fBscripts/install.js\fR is running for two different phases, it would be wise in this case to look at the \fBnpm_lifecycle_event\fR environment variable.
.P
If you want to run a make command, you can do so. This works just fine:
.P
@@ -381,7 +380,7 @@ Note that these script files don't have to be Node.js or even JavaScript program
.SS "Best Practices"
.RS 0
.IP \(bu 4
-Don't exit with a non-zero error code unless you \fIreally\fR mean it. Except for uninstall scripts, this will cause the npm action to fail, and potentially be rolled back. If the failure is minor or only will prevent some optional features, then it's better to just print a warning and exit successfully.
+Don't exit with a non-zero error code unless you \fIreally\fR mean it. If the failure is minor or only will prevent some optional features, then it's better to just print a warning and exit successfully.
.IP \(bu 4
Try not to use scripts to do what npm can do for you. Read through \fB\fBpackage.json\fR\fR \fI\(la/configuring-npm/package-json\(ra\fR to see all the things that you can specify and enable by simply describing your package appropriately. In general, this will lead to a more robust and consistent state.
.IP \(bu 4
diff --git a/deps/npm/man/man7/workspaces.7 b/deps/npm/man/man7/workspaces.7
index 4d261469a1835f..9db114e4ded21b 100644
--- a/deps/npm/man/man7/workspaces.7
+++ b/deps/npm/man/man7/workspaces.7
@@ -1,11 +1,11 @@
-.TH "WORKSPACES" "7" "January 2024" "" ""
+.TH "WORKSPACES" "7" "February 2024" "" ""
.SH "NAME"
\fBworkspaces\fR - Working with workspaces
.SS "Description"
.P
-\fBWorkspaces\fR is a generic term that refers to the set of features in the npm cli that provides support to managing multiple packages from your local file system from within a singular top-level, root package.
+\fBWorkspaces\fR is a generic term that refers to the set of features in the npm cli that provides support for managing multiple packages from your local file system from within a singular top-level, root package.
.P
-This set of features makes up for a much more streamlined workflow handling linked packages from the local file system. Automating the linking process as part of \fBnpm install\fR and avoiding manually having to use \fBnpm link\fR in order to add references to packages that should be symlinked into the current \fBnode_modules\fR folder.
+This set of features makes up for a much more streamlined workflow handling linked packages from the local file system. It automates the linking process as part of \fBnpm install\fR and removes the need to manually use \fBnpm link\fR in order to add references to packages that should be symlinked into the current \fBnode_modules\fR folder.
.P
We also refer to these packages being auto-symlinked during \fBnpm install\fR as a single \fBworkspace\fR, meaning it's a nested package within the current local file system that is explicitly defined in the \fB\fBpackage.json\fR\fR \fI\(la/configuring-npm/package-json#workspaces\(ra\fR \fBworkspaces\fR configuration.
.SS "Defining workspaces"
@@ -91,7 +91,7 @@ npm install abbrev -w a
Note: other installing commands such as \fBuninstall\fR, \fBci\fR, etc will also respect the provided \fBworkspace\fR configuration.
.SS "Using workspaces"
.P
-Given the \fBspecifities of how Node.js handles module resolution\fR \fI\(lahttps://nodejs.org/dist/latest-v14.x/docs/api/modules.html#modules_all_together\(ra\fR it's possible to consume any defined workspace by its declared \fBpackage.json\fR \fBname\fR. Continuing from the example defined above, let's also create a Node.js script that will require the workspace \fBa\fR example module, e.g:
+Given the \fBspecifics of how Node.js handles module resolution\fR \fI\(lahttps://nodejs.org/dist/latest-v14.x/docs/api/modules.html#modules_all_together\(ra\fR it's possible to consume any defined workspace by its declared \fBpackage.json\fR \fBname\fR. Continuing from the example defined above, let's also create a Node.js script that will require the workspace \fBa\fR example module, e.g:
.P
.RS 2
.nf
diff --git a/deps/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex/index.js b/deps/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex/index.js
new file mode 100644
index 00000000000000..130a0929b8ce8c
--- /dev/null
+++ b/deps/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex/index.js
@@ -0,0 +1,8 @@
+export default function ansiRegex({onlyFirst = false} = {}) {
+ const pattern = [
+ '[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)',
+ '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))'
+ ].join('|');
+
+ return new RegExp(pattern, onlyFirst ? undefined : 'g');
+}
diff --git a/deps/npm/node_modules/cli-columns/node_modules/ansi-regex/license b/deps/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex/license
similarity index 92%
rename from deps/npm/node_modules/cli-columns/node_modules/ansi-regex/license
rename to deps/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex/license
index e7af2f77107d73..fa7ceba3eb4a96 100644
--- a/deps/npm/node_modules/cli-columns/node_modules/ansi-regex/license
+++ b/deps/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex/license
@@ -1,6 +1,6 @@
MIT License
-Copyright (c) Sindre Sorhus (sindresorhus.com)
+Copyright (c) Sindre Sorhus (https://sindresorhus.com)
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:
diff --git a/deps/npm/node_modules/cli-columns/node_modules/ansi-regex/package.json b/deps/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex/package.json
similarity index 75%
rename from deps/npm/node_modules/cli-columns/node_modules/ansi-regex/package.json
rename to deps/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex/package.json
index 017f53116a9e28..7bbb563bf2a70a 100644
--- a/deps/npm/node_modules/cli-columns/node_modules/ansi-regex/package.json
+++ b/deps/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex/package.json
@@ -1,16 +1,19 @@
{
"name": "ansi-regex",
- "version": "5.0.1",
+ "version": "6.0.1",
"description": "Regular expression for matching ANSI escape codes",
"license": "MIT",
"repository": "chalk/ansi-regex",
+ "funding": "https://github.com/chalk/ansi-regex?sponsor=1",
"author": {
"name": "Sindre Sorhus",
"email": "sindresorhus@gmail.com",
- "url": "sindresorhus.com"
+ "url": "https://sindresorhus.com"
},
+ "type": "module",
+ "exports": "./index.js",
"engines": {
- "node": ">=8"
+ "node": ">=12"
},
"scripts": {
"test": "xo && ava && tsd",
@@ -48,8 +51,8 @@
"pattern"
],
"devDependencies": {
- "ava": "^2.4.0",
- "tsd": "^0.9.0",
- "xo": "^0.25.3"
+ "ava": "^3.15.0",
+ "tsd": "^0.14.0",
+ "xo": "^0.38.2"
}
}
diff --git a/deps/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi/index.js b/deps/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi/index.js
new file mode 100644
index 00000000000000..ba19750e64e061
--- /dev/null
+++ b/deps/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi/index.js
@@ -0,0 +1,14 @@
+import ansiRegex from 'ansi-regex';
+
+const regex = ansiRegex();
+
+export default function stripAnsi(string) {
+ if (typeof string !== 'string') {
+ throw new TypeError(`Expected a \`string\`, got \`${typeof string}\``);
+ }
+
+ // Even though the regex is global, we don't need to reset the `.lastIndex`
+ // because unlike `.exec()` and `.test()`, `.replace()` does it automatically
+ // and doing it manually has a performance penalty.
+ return string.replace(regex, '');
+}
diff --git a/deps/npm/node_modules/cli-columns/node_modules/strip-ansi/license b/deps/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi/license
similarity index 92%
rename from deps/npm/node_modules/cli-columns/node_modules/strip-ansi/license
rename to deps/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi/license
index e7af2f77107d73..fa7ceba3eb4a96 100644
--- a/deps/npm/node_modules/cli-columns/node_modules/strip-ansi/license
+++ b/deps/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi/license
@@ -1,6 +1,6 @@
MIT License
-Copyright (c) Sindre Sorhus (sindresorhus.com)
+Copyright (c) Sindre Sorhus (https://sindresorhus.com)
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:
diff --git a/deps/npm/node_modules/gauge/node_modules/strip-ansi/package.json b/deps/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi/package.json
similarity index 71%
rename from deps/npm/node_modules/gauge/node_modules/strip-ansi/package.json
rename to deps/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi/package.json
index 1a41108d42831c..e1f455c325b007 100644
--- a/deps/npm/node_modules/gauge/node_modules/strip-ansi/package.json
+++ b/deps/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi/package.json
@@ -1,16 +1,19 @@
{
"name": "strip-ansi",
- "version": "6.0.1",
+ "version": "7.1.0",
"description": "Strip ANSI escape codes from a string",
"license": "MIT",
"repository": "chalk/strip-ansi",
+ "funding": "https://github.com/chalk/strip-ansi?sponsor=1",
"author": {
"name": "Sindre Sorhus",
"email": "sindresorhus@gmail.com",
- "url": "sindresorhus.com"
+ "url": "https://sindresorhus.com"
},
+ "type": "module",
+ "exports": "./index.js",
"engines": {
- "node": ">=8"
+ "node": ">=12"
},
"scripts": {
"test": "xo && ava && tsd"
@@ -44,11 +47,11 @@
"text"
],
"dependencies": {
- "ansi-regex": "^5.0.1"
+ "ansi-regex": "^6.0.1"
},
"devDependencies": {
- "ava": "^2.4.0",
- "tsd": "^0.10.0",
- "xo": "^0.25.3"
+ "ava": "^3.15.0",
+ "tsd": "^0.17.0",
+ "xo": "^0.44.0"
}
}
diff --git a/deps/npm/node_modules/@npmcli/agent/lib/agents.js b/deps/npm/node_modules/@npmcli/agent/lib/agents.js
index 15aa8e8764b4d6..ffd299f3d2ba69 100644
--- a/deps/npm/node_modules/@npmcli/agent/lib/agents.js
+++ b/deps/npm/node_modules/@npmcli/agent/lib/agents.js
@@ -62,7 +62,7 @@ module.exports = class Agent extends AgentBase {
let ProxyAgent = this.#ProxyAgent
if (Array.isArray(ProxyAgent)) {
- ProxyAgent = options.secureEndpoint ? ProxyAgent[1] : ProxyAgent[0]
+ ProxyAgent = this.isSecureEndpoint(options) ? ProxyAgent[1] : ProxyAgent[0]
}
const proxyAgent = new ProxyAgent(proxy, this.#options)
@@ -106,6 +106,7 @@ module.exports = class Agent extends AgentBase {
let socket
let timeout = this.#timeouts.connection
+ const isSecureEndpoint = this.isSecureEndpoint(options)
const proxy = this.#getProxy(options)
if (proxy) {
@@ -124,7 +125,7 @@ module.exports = class Agent extends AgentBase {
timeout = timeout - (Date.now() - start)
}
} else {
- socket = (options.secureEndpoint ? tls : net).connect(options)
+ socket = (isSecureEndpoint ? tls : net).connect(options)
}
socket.setKeepAlive(this.keepAlive, this.keepAliveMsecs)
@@ -133,8 +134,8 @@ module.exports = class Agent extends AgentBase {
const abortController = new AbortController()
const { signal } = abortController
- const connectPromise = socket[options.secureEndpoint ? 'secureConnecting' : 'connecting']
- ? once(socket, options.secureEndpoint ? 'secureConnect' : 'connect', { signal })
+ const connectPromise = socket[isSecureEndpoint ? 'secureConnecting' : 'connecting']
+ ? once(socket, isSecureEndpoint ? 'secureConnect' : 'connect', { signal })
: Promise.resolve()
await this.#timeoutConnection({
diff --git a/deps/npm/node_modules/@npmcli/agent/package.json b/deps/npm/node_modules/@npmcli/agent/package.json
index 7d3d6802947d99..ce240b283a42c9 100644
--- a/deps/npm/node_modules/@npmcli/agent/package.json
+++ b/deps/npm/node_modules/@npmcli/agent/package.json
@@ -1,12 +1,12 @@
{
"name": "@npmcli/agent",
- "version": "2.2.0",
+ "version": "2.2.1",
"description": "the http/https agent used by the npm cli",
"main": "lib/index.js",
"scripts": {
"gencerts": "bash scripts/create-cert.sh",
"test": "tap",
- "lint": "eslint \"**/*.js\"",
+ "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
"postlint": "template-oss-check",
"template-oss-apply": "template-oss-apply --force",
"lintfix": "npm run lint -- --fix",
@@ -28,7 +28,7 @@
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.19.0",
+ "version": "4.21.3",
"publish": "true"
},
"dependencies": {
@@ -40,7 +40,7 @@
},
"devDependencies": {
"@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.19.0",
+ "@npmcli/template-oss": "4.21.3",
"minipass-fetch": "^3.0.3",
"nock": "^13.2.7",
"semver": "^7.5.4",
diff --git a/deps/npm/node_modules/@npmcli/arborist/lib/arborist/audit.js b/deps/npm/node_modules/@npmcli/arborist/lib/arborist/audit.js
deleted file mode 100644
index af260bdc996fc7..00000000000000
--- a/deps/npm/node_modules/@npmcli/arborist/lib/arborist/audit.js
+++ /dev/null
@@ -1,51 +0,0 @@
-// mixin implementing the audit method
-
-const AuditReport = require('../audit-report.js')
-
-// shared with reify
-const _global = Symbol.for('global')
-const _workspaces = Symbol.for('workspaces')
-const _includeWorkspaceRoot = Symbol.for('includeWorkspaceRoot')
-
-module.exports = cls => class Auditor extends cls {
- async audit (options = {}) {
- this.addTracker('audit')
- if (this[_global]) {
- throw Object.assign(
- new Error('`npm audit` does not support testing globals'),
- { code: 'EAUDITGLOBAL' }
- )
- }
-
- // allow the user to set options on the ctor as well.
- // XXX: deprecate separate method options objects.
- options = { ...this.options, ...options }
-
- process.emit('time', 'audit')
- let tree
- if (options.packageLock === false) {
- // build ideal tree
- await this.loadActual(options)
- await this.buildIdealTree()
- tree = this.idealTree
- } else {
- tree = await this.loadVirtual()
- }
- if (this[_workspaces] && this[_workspaces].length) {
- options.filterSet = this.workspaceDependencySet(
- tree,
- this[_workspaces],
- this[_includeWorkspaceRoot]
- )
- }
- if (!options.workspacesEnabled) {
- options.filterSet =
- this.excludeWorkspacesDependencySet(tree)
- }
- this.auditReport = await AuditReport.load(tree, options)
- const ret = options.fix ? this.reify(options) : this.auditReport
- process.emit('timeEnd', 'audit')
- this.finishTracker('audit')
- return ret
- }
-}
diff --git a/deps/npm/node_modules/@npmcli/arborist/lib/arborist/build-ideal-tree.js b/deps/npm/node_modules/@npmcli/arborist/lib/arborist/build-ideal-tree.js
index d04ddf27b69650..8ceb6b72123f68 100644
--- a/deps/npm/node_modules/@npmcli/arborist/lib/arborist/build-ideal-tree.js
+++ b/deps/npm/node_modules/@npmcli/arborist/lib/arborist/build-ideal-tree.js
@@ -4,7 +4,7 @@ const rpj = require('read-package-json-fast')
const npa = require('npm-package-arg')
const pacote = require('pacote')
const cacache = require('cacache')
-const promiseCallLimit = require('promise-call-limit')
+const { callLimit: promiseCallLimit } = require('promise-call-limit')
const realpath = require('../../lib/realpath.js')
const { resolve, dirname } = require('path')
const treeCheck = require('../tree-check.js')
@@ -38,48 +38,63 @@ const resetDepFlags = require('../reset-dep-flags.js')
// them with unit tests and reuse them across mixins
const _updateAll = Symbol.for('updateAll')
const _flagsSuspect = Symbol.for('flagsSuspect')
-const _workspaces = Symbol.for('workspaces')
const _setWorkspaces = Symbol.for('setWorkspaces')
const _updateNames = Symbol.for('updateNames')
const _resolvedAdd = Symbol.for('resolvedAdd')
const _usePackageLock = Symbol.for('usePackageLock')
const _rpcache = Symbol.for('realpathCache')
const _stcache = Symbol.for('statCache')
-const _includeWorkspaceRoot = Symbol.for('includeWorkspaceRoot')
-
-// exposed symbol for unit testing the placeDep method directly
-const _peerSetSource = Symbol.for('peerSetSource')
// used by Reify mixin
-const _force = Symbol.for('force')
-const _global = Symbol.for('global')
-const _idealTreePrune = Symbol.for('idealTreePrune')
+const _addNodeToTrashList = Symbol.for('addNodeToTrashList')
// Push items in, pop them sorted by depth and then path
+// Sorts physically shallower deps up to the front of the queue, because
+// they'll affect things deeper in, then alphabetical for consistency between
+// installs
class DepsQueue {
+ // [{ sorted, items }] indexed by depth
#deps = []
#sorted = true
+ #minDepth = 0
+ #length = 0
get length () {
- return this.#deps.length
+ return this.#length
}
push (item) {
- if (!this.#deps.includes(item)) {
- this.#sorted = false
- this.#deps.push(item)
+ if (!this.#deps[item.depth]) {
+ this.#length++
+ this.#deps[item.depth] = { sorted: true, items: [item] }
+ // no minDepth check needed, this branch is only reached when we are in
+ // the middle of a shallower depth and creating a new one
+ return
+ }
+ if (!this.#deps[item.depth].items.includes(item)) {
+ this.#length++
+ this.#deps[item.depth].sorted = false
+ this.#deps[item.depth].items.push(item)
+ if (item.depth < this.#minDepth) {
+ this.#minDepth = item.depth
+ }
}
}
pop () {
- if (!this.#sorted) {
- // sort physically shallower deps up to the front of the queue, because
- // they'll affect things deeper in, then alphabetical
- this.#deps.sort((a, b) =>
- (a.depth - b.depth) || localeCompare(a.path, b.path))
- this.#sorted = true
+ let depth
+ while (!depth?.items.length) {
+ depth = this.#deps[this.#minDepth]
+ if (!depth?.items.length) {
+ this.#minDepth++
+ }
}
- return this.#deps.shift()
+ if (!depth.sorted) {
+ depth.items.sort((a, b) => localeCompare(a.path, b.path))
+ depth.sorted = true
+ }
+ this.#length--
+ return depth.items.shift()
}
}
@@ -95,6 +110,10 @@ module.exports = cls => class IdealTreeBuilder extends cls {
#loadFailures = new Set()
#manifests = new Map()
#mutateTree = false
+ // a map of each module in a peer set to the thing that depended on
+ // that set of peers in the first place. Use a WeakMap so that we
+ // don't hold onto references for nodes that are garbage collected.
+ #peerSetSource = new WeakMap()
#preferDedupe = false
#prune
#strictPeerDeps
@@ -109,20 +128,16 @@ module.exports = cls => class IdealTreeBuilder extends cls {
const {
follow = false,
- force = false,
- global = false,
installStrategy = 'hoisted',
idealTree = null,
- includeWorkspaceRoot = false,
installLinks = false,
legacyPeerDeps = false,
packageLock = true,
strictPeerDeps = false,
- workspaces = [],
+ workspaces,
+ global,
} = options
- this[_workspaces] = workspaces || []
- this[_force] = !!force
this.#strictPeerDeps = !!strictPeerDeps
this.idealTree = idealTree
@@ -130,24 +145,16 @@ module.exports = cls => class IdealTreeBuilder extends cls {
this.legacyPeerDeps = legacyPeerDeps
this[_usePackageLock] = packageLock
- this[_global] = !!global
this.#installStrategy = global ? 'shallow' : installStrategy
this.#follow = !!follow
- if (this[_workspaces].length && this[_global]) {
+ if (workspaces?.length && global) {
throw new Error('Cannot operate on workspaces in global mode')
}
this[_updateAll] = false
this[_updateNames] = []
this[_resolvedAdd] = []
-
- // a map of each module in a peer set to the thing that depended on
- // that set of peers in the first place. Use a WeakMap so that we
- // don't hold onto references for nodes that are garbage collected.
- this[_peerSetSource] = new WeakMap()
-
- this[_includeWorkspaceRoot] = includeWorkspaceRoot
}
get explicitRequests () {
@@ -174,7 +181,7 @@ module.exports = cls => class IdealTreeBuilder extends cls {
process.emit('time', 'idealTree')
- if (!options.add && !options.rm && !options.update && this[_global]) {
+ if (!options.add && !options.rm && !options.update && this.options.global) {
throw new Error('global requires add, rm, or update option')
}
@@ -210,7 +217,7 @@ module.exports = cls => class IdealTreeBuilder extends cls {
for (const node of this.idealTree.inventory.values()) {
if (!node.optional) {
try {
- checkEngine(node.package, npmVersion, nodeVersion, this[_force])
+ checkEngine(node.package, npmVersion, nodeVersion, this.options.force)
} catch (err) {
if (engineStrict) {
throw err
@@ -221,7 +228,7 @@ module.exports = cls => class IdealTreeBuilder extends cls {
current: err.current,
})
}
- checkPlatform(node.package, this[_force])
+ checkPlatform(node.package, this.options.force)
}
}
}
@@ -273,7 +280,7 @@ module.exports = cls => class IdealTreeBuilder extends cls {
async #initTree () {
process.emit('time', 'idealTree:init')
let root
- if (this[_global]) {
+ if (this.options.global) {
root = await this.#globalRootNode()
} else {
try {
@@ -291,7 +298,7 @@ module.exports = cls => class IdealTreeBuilder extends cls {
// When updating all, we load the shrinkwrap, but don't bother
// to build out the full virtual tree from it, since we'll be
// reconstructing it anyway.
- .then(root => this[_global] ? root
+ .then(root => this.options.global ? root
: !this[_usePackageLock] || this[_updateAll]
? Shrinkwrap.reset({
path: this.path,
@@ -307,7 +314,7 @@ module.exports = cls => class IdealTreeBuilder extends cls {
// Load on a new Arborist object, so the Nodes aren't the same,
// or else it'll get super confusing when we change them!
.then(async root => {
- if ((!this[_updateAll] && !this[_global] && !root.meta.loadedFromDisk) || (this[_global] && this[_updateNames].length)) {
+ if ((!this[_updateAll] && !this.options.global && !root.meta.loadedFromDisk) || (this.options.global && this[_updateNames].length)) {
await new this.constructor(this.options).loadActual({ root })
const tree = root.target
// even though we didn't load it from a package-lock.json FILE,
@@ -386,7 +393,7 @@ module.exports = cls => class IdealTreeBuilder extends cls {
devOptional: false,
peer: false,
optional: false,
- global: this[_global],
+ global: this.options.global,
installLinks: this.installLinks,
legacyPeerDeps: this.legacyPeerDeps,
loadOverrides: true,
@@ -401,7 +408,7 @@ module.exports = cls => class IdealTreeBuilder extends cls {
devOptional: false,
peer: false,
optional: false,
- global: this[_global],
+ global: this.options.global,
installLinks: this.installLinks,
legacyPeerDeps: this.legacyPeerDeps,
root,
@@ -416,11 +423,11 @@ module.exports = cls => class IdealTreeBuilder extends cls {
process.emit('time', 'idealTree:userRequests')
const tree = this.idealTree.target
- if (!this[_workspaces].length) {
+ if (!this.options.workspaces.length) {
await this.#applyUserRequestsToNode(tree, options)
} else {
- const nodes = this.workspaceNodes(tree, this[_workspaces])
- if (this[_includeWorkspaceRoot]) {
+ const nodes = this.workspaceNodes(tree, this.options.workspaces)
+ if (this.options.includeWorkspaceRoot) {
nodes.push(tree)
}
const appliedRequests = nodes.map(
@@ -436,14 +443,14 @@ module.exports = cls => class IdealTreeBuilder extends cls {
// If we have a list of package names to update, and we know it's
// going to update them wherever they are, add any paths into those
// named nodes to the buildIdealTree queue.
- if (!this[_global] && this[_updateNames].length) {
+ if (!this.options.global && this[_updateNames].length) {
this.#queueNamedUpdates()
}
// global updates only update the globalTop nodes, but we need to know
// that they're there, and not reinstall the world unnecessarily.
const globalExplicitUpdateNames = []
- if (this[_global] && (this[_updateAll] || this[_updateNames].length)) {
+ if (this.options.global && (this[_updateAll] || this[_updateNames].length)) {
const nm = resolve(this.path, 'node_modules')
const paths = await readdirScoped(nm).catch(() => [])
for (const p of paths) {
@@ -488,7 +495,7 @@ module.exports = cls => class IdealTreeBuilder extends cls {
// triggers a refresh of all edgesOut. this has to be done BEFORE
// adding the edges to explicitRequests, because the package setter
// resets all edgesOut.
- if (add && add.length || rm && rm.length || this[_global]) {
+ if (add && add.length || rm && rm.length || this.options.global) {
tree.package = tree.package
}
@@ -594,7 +601,7 @@ module.exports = cls => class IdealTreeBuilder extends cls {
//
// XXX: how to handle top nodes that aren't the root? Maybe the report
// just tells the user to cd into that directory and fix it?
- if (this[_force] && this.auditReport && this.auditReport.topVulns.size) {
+ if (this.options.force && this.auditReport && this.auditReport.topVulns.size) {
options.add = options.add || []
options.rm = options.rm || []
const nodesTouched = new Set()
@@ -878,7 +885,7 @@ This is a one-time fix-up, please be patient...
// dep if allowed.
const tasks = []
- const peerSource = this[_peerSetSource].get(node) || node
+ const peerSource = this.#peerSetSource.get(node) || node
for (const edge of this.#problemEdges(node)) {
if (edge.peerConflicted) {
continue
@@ -936,7 +943,7 @@ This is a one-time fix-up, please be patient...
auditReport: this.auditReport,
explicitRequest: this.#explicitRequests.has(edge),
- force: this[_force],
+ force: this.options.force,
installLinks: this.installLinks,
installStrategy: this.#installStrategy,
legacyPeerDeps: this.legacyPeerDeps,
@@ -1016,7 +1023,7 @@ This is a one-time fix-up, please be patient...
// may well be an optional dep that has gone missing. it'll
// fail later anyway.
for (const e of this.#problemEdges(placed)) {
- promises.push(
+ promises.push(() =>
this.#fetchManifest(npa.resolve(e.name, e.spec, fromPath(placed, e)))
.catch(er => null)
)
@@ -1031,7 +1038,7 @@ This is a one-time fix-up, please be patient...
}
}
- await Promise.all(promises)
+ await promiseCallLimit(promises)
return this.#buildDepStep()
}
@@ -1077,13 +1084,13 @@ This is a one-time fix-up, please be patient...
// keep track of the thing that caused this node to be included.
const src = parent.sourceReference
- this[_peerSetSource].set(node, src)
+ this.#peerSetSource.set(node, src)
// do not load the peers along with the set if this is a global top pkg
// otherwise we'll be tempted to put peers as other top-level installed
// things, potentially clobbering what's there already, which is not
// what we want. the missing edges will be picked up on the next pass.
- if (this[_global] && edge.from.isProjectRoot) {
+ if (this.options.global && edge.from.isProjectRoot) {
return node
}
@@ -1208,8 +1215,12 @@ This is a one-time fix-up, please be patient...
} else {
const cleanRawSpec = cleanUrl(spec.rawSpec)
log.silly('fetch manifest', spec.raw.replace(spec.rawSpec, cleanRawSpec))
- const p = pacote.manifest(spec, options)
- .then(mani => {
+ const o = {
+ ...options,
+ fullMetadata: true,
+ }
+ const p = pacote.manifest(spec, o)
+ .then(({ license, ...mani }) => {
this.#manifests.set(spec.raw, mani)
return mani
})
@@ -1302,7 +1313,7 @@ This is a one-time fix-up, please be patient...
const parentEdge = node.parent.edgesOut.get(edge.name)
const { isProjectRoot, isWorkspace } = node.parent.sourceReference
const isMine = isProjectRoot || isWorkspace
- const conflictOK = this[_force] || !isMine && !this.#strictPeerDeps
+ const conflictOK = this.options.force || !isMine && !this.#strictPeerDeps
if (!edge.to) {
if (!parentEdge) {
@@ -1389,7 +1400,7 @@ This is a one-time fix-up, please be patient...
currentEdge: currentEdge ? currentEdge.explain() : null,
edge: edge.explain(),
strictPeerDeps: this.#strictPeerDeps,
- force: this[_force],
+ force: this.options.force,
}
}
@@ -1477,7 +1488,7 @@ This is a one-time fix-up, please be patient...
// otherwise, don't bother.
const needPrune = metaFromDisk && (mutateTree || flagsSuspect)
if (this.#prune && needPrune) {
- this[_idealTreePrune]()
+ this.#idealTreePrune()
for (const node of this.idealTree.inventory.values()) {
if (node.extraneous) {
node.parent = null
@@ -1488,7 +1499,7 @@ This is a one-time fix-up, please be patient...
process.emit('timeEnd', 'idealTree:fixDepFlags')
}
- [_idealTreePrune] () {
+ #idealTreePrune () {
for (const node of this.idealTree.inventory.values()) {
if (node.extraneous) {
node.parent = null
@@ -1508,4 +1519,29 @@ This is a one-time fix-up, please be patient...
}
}
}
+
+ async prune (options = {}) {
+ // allow the user to set options on the ctor as well.
+ // XXX: deprecate separate method options objects.
+ options = { ...this.options, ...options }
+
+ await this.buildIdealTree(options)
+
+ this.#idealTreePrune()
+
+ if (!this.options.workspacesEnabled) {
+ const excludeNodes = this.excludeWorkspacesDependencySet(this.idealTree)
+ for (const node of this.idealTree.inventory.values()) {
+ if (
+ node.parent !== null
+ && !node.isProjectRoot
+ && !excludeNodes.has(node)
+ ) {
+ this[_addNodeToTrashList](node)
+ }
+ }
+ }
+
+ return this.reify(options)
+ }
}
diff --git a/deps/npm/node_modules/@npmcli/arborist/lib/arborist/deduper.js b/deps/npm/node_modules/@npmcli/arborist/lib/arborist/deduper.js
deleted file mode 100644
index 1741c31a19a27b..00000000000000
--- a/deps/npm/node_modules/@npmcli/arborist/lib/arborist/deduper.js
+++ /dev/null
@@ -1,19 +0,0 @@
-module.exports = cls => class Deduper extends cls {
- async dedupe (options = {}) {
- // allow the user to set options on the ctor as well.
- // XXX: deprecate separate method options objects.
- options = { ...this.options, ...options }
- const tree = await this.loadVirtual().catch(() => this.loadActual())
- const names = []
- for (const name of tree.inventory.query('name')) {
- if (tree.inventory.query('name', name).size > 1) {
- names.push(name)
- }
- }
- return this.reify({
- ...options,
- preferDedupe: true,
- update: { names },
- })
- }
-}
diff --git a/deps/npm/node_modules/@npmcli/arborist/lib/arborist/index.js b/deps/npm/node_modules/@npmcli/arborist/lib/arborist/index.js
index ec25117c2a8744..358f3e1b1a7598 100644
--- a/deps/npm/node_modules/@npmcli/arborist/lib/arborist/index.js
+++ b/deps/npm/node_modules/@npmcli/arborist/lib/arborist/index.js
@@ -29,15 +29,16 @@
const { resolve } = require('path')
const { homedir } = require('os')
const { depth } = require('treeverse')
+const mapWorkspaces = require('@npmcli/map-workspaces')
+const log = require('proc-log')
+
const { saveTypeMap } = require('../add-rm-pkg-deps.js')
+const AuditReport = require('../audit-report.js')
+const relpath = require('../relpath.js')
const mixins = [
require('../tracker.js'),
- require('./pruner.js'),
- require('./deduper.js'),
- require('./audit.js'),
require('./build-ideal-tree.js'),
- require('./set-workspaces.js'),
require('./load-actual.js'),
require('./load-virtual.js'),
require('./rebuild.js'),
@@ -45,9 +46,8 @@ const mixins = [
require('./isolated-reifier.js'),
]
-const _workspacesEnabled = Symbol.for('workspacesEnabled')
+const _setWorkspaces = Symbol.for('setWorkspaces')
const Base = mixins.reduce((a, b) => b(a), require('events'))
-const getWorkspaceNodes = require('../get-workspace-nodes.js')
// if it's 1, 2, or 3, set it explicitly that.
// if undefined or null, set it null
@@ -72,20 +72,26 @@ class Arborist extends Base {
nodeVersion: process.version,
...options,
Arborist: this.constructor,
- path: options.path || '.',
+ binLinks: 'binLinks' in options ? !!options.binLinks : true,
cache: options.cache || `${homedir()}/.npm/_cacache`,
+ force: !!options.force,
+ global: !!options.global,
+ ignoreScripts: !!options.ignoreScripts,
+ installStrategy: options.global ? 'shallow' : (options.installStrategy ? options.installStrategy : 'hoisted'),
+ lockfileVersion: lockfileVersion(options.lockfileVersion),
packumentCache: options.packumentCache || new Map(),
- workspacesEnabled: options.workspacesEnabled !== false,
+ path: options.path || '.',
+ rebuildBundle: 'rebuildBundle' in options ? !!options.rebuildBundle : true,
replaceRegistryHost: options.replaceRegistryHost,
- lockfileVersion: lockfileVersion(options.lockfileVersion),
- installStrategy: options.global ? 'shallow' : (options.installStrategy ? options.installStrategy : 'hoisted'),
+ scriptShell: options.scriptShell,
+ workspaces: options.workspaces || [],
+ workspacesEnabled: options.workspacesEnabled !== false,
}
+ // TODO is this even used? If not is that a bug?
this.replaceRegistryHost = this.options.replaceRegistryHost =
(!this.options.replaceRegistryHost || this.options.replaceRegistryHost === 'npmjs') ?
'registry.npmjs.org' : this.options.replaceRegistryHost
- this[_workspacesEnabled] = this.options.workspacesEnabled
-
if (options.saveType && !saveTypeMap.get(options.saveType)) {
throw new Error(`Invalid saveType ${options.saveType}`)
}
@@ -97,12 +103,40 @@ class Arborist extends Base {
// TODO: We should change these to static functions instead
// of methods for the next major version
- // returns an array of the actual nodes for all the workspaces
+ // Get the actual nodes corresponding to a root node's child workspaces,
+ // given a list of workspace names.
workspaceNodes (tree, workspaces) {
- return getWorkspaceNodes(tree, workspaces)
+ const wsMap = tree.workspaces
+ if (!wsMap) {
+ log.warn('workspaces', 'filter set, but no workspaces present')
+ return []
+ }
+
+ const nodes = []
+ for (const name of workspaces) {
+ const path = wsMap.get(name)
+ if (!path) {
+ log.warn('workspaces', `${name} in filter set, but not in workspaces`)
+ continue
+ }
+
+ const loc = relpath(tree.realpath, path)
+ const node = tree.inventory.get(loc)
+
+ if (!node) {
+ log.warn('workspaces', `${name} in filter set, but no workspace folder present`)
+ continue
+ }
+
+ nodes.push(node)
+ }
+
+ return nodes
}
// returns a set of workspace nodes and all their deps
+ // TODO why is includeWorkspaceRoot a param?
+ // TODO why is workspaces a param?
workspaceDependencySet (tree, workspaces, includeWorkspaceRoot) {
const wsNodes = this.workspaceNodes(tree, workspaces)
if (includeWorkspaceRoot) {
@@ -162,6 +196,60 @@ class Arborist extends Base {
})
return rootDepSet
}
+
+ async [_setWorkspaces] (node) {
+ const workspaces = await mapWorkspaces({
+ cwd: node.path,
+ pkg: node.package,
+ })
+
+ if (node && workspaces.size) {
+ node.workspaces = workspaces
+ }
+
+ return node
+ }
+
+ async audit (options = {}) {
+ this.addTracker('audit')
+ if (this.options.global) {
+ throw Object.assign(
+ new Error('`npm audit` does not support testing globals'),
+ { code: 'EAUDITGLOBAL' }
+ )
+ }
+
+ // allow the user to set options on the ctor as well.
+ // XXX: deprecate separate method options objects.
+ options = { ...this.options, ...options }
+
+ process.emit('time', 'audit')
+ let tree
+ if (options.packageLock === false) {
+ // build ideal tree
+ await this.loadActual(options)
+ await this.buildIdealTree()
+ tree = this.idealTree
+ } else {
+ tree = await this.loadVirtual()
+ }
+ if (this.options.workspaces.length) {
+ options.filterSet = this.workspaceDependencySet(
+ tree,
+ this.options.workspaces,
+ this.options.includeWorkspaceRoot
+ )
+ }
+ if (!options.workspacesEnabled) {
+ options.filterSet =
+ this.excludeWorkspacesDependencySet(tree)
+ }
+ this.auditReport = await AuditReport.load(tree, options)
+ const ret = options.fix ? this.reify(options) : this.auditReport
+ process.emit('timeEnd', 'audit')
+ this.finishTracker('audit')
+ return ret
+ }
}
module.exports = Arborist
diff --git a/deps/npm/node_modules/@npmcli/arborist/lib/arborist/load-actual.js b/deps/npm/node_modules/@npmcli/arborist/lib/arborist/load-actual.js
index def00dc74f039c..3ab5f5983768df 100644
--- a/deps/npm/node_modules/@npmcli/arborist/lib/arborist/load-actual.js
+++ b/deps/npm/node_modules/@npmcli/arborist/lib/arborist/load-actual.js
@@ -16,7 +16,6 @@ const realpath = require('../realpath.js')
// public symbols
const _changePath = Symbol.for('_changePath')
-const _global = Symbol.for('global')
const _setWorkspaces = Symbol.for('setWorkspaces')
const _rpcache = Symbol.for('realpathCache')
const _stcache = Symbol.for('statCache')
@@ -45,8 +44,6 @@ module.exports = cls => class ActualLoader extends cls {
constructor (options) {
super(options)
- this[_global] = !!options.global
-
// the tree of nodes on disk
this.actualTree = options.actualTree
@@ -58,6 +55,7 @@ module.exports = cls => class ActualLoader extends cls {
}
// public method
+ // TODO remove options param in next semver major
async loadActual (options = {}) {
// In the past this.actualTree was set as a promise that eventually
// resolved, and overwrite this.actualTree with the resolved value. This
@@ -100,7 +98,7 @@ module.exports = cls => class ActualLoader extends cls {
async #loadActual (options) {
// mostly realpath to throw if the root doesn't exist
const {
- global = false,
+ global,
filter = () => true,
root = null,
transplantFilter = () => true,
diff --git a/deps/npm/node_modules/@npmcli/arborist/lib/arborist/pruner.js b/deps/npm/node_modules/@npmcli/arborist/lib/arborist/pruner.js
deleted file mode 100644
index 494114dfa56c56..00000000000000
--- a/deps/npm/node_modules/@npmcli/arborist/lib/arborist/pruner.js
+++ /dev/null
@@ -1,30 +0,0 @@
-const _idealTreePrune = Symbol.for('idealTreePrune')
-const _workspacesEnabled = Symbol.for('workspacesEnabled')
-const _addNodeToTrashList = Symbol.for('addNodeToTrashList')
-
-module.exports = cls => class Pruner extends cls {
- async prune (options = {}) {
- // allow the user to set options on the ctor as well.
- // XXX: deprecate separate method options objects.
- options = { ...this.options, ...options }
-
- await this.buildIdealTree(options)
-
- this[_idealTreePrune]()
-
- if (!this[_workspacesEnabled]) {
- const excludeNodes = this.excludeWorkspacesDependencySet(this.idealTree)
- for (const node of this.idealTree.inventory.values()) {
- if (
- node.parent !== null
- && !node.isProjectRoot
- && !excludeNodes.has(node)
- ) {
- this[_addNodeToTrashList](node)
- }
- }
- }
-
- return this.reify(options)
- }
-}
diff --git a/deps/npm/node_modules/@npmcli/arborist/lib/arborist/rebuild.js b/deps/npm/node_modules/@npmcli/arborist/lib/arborist/rebuild.js
index d502d5244bdc7e..422819b2104b7e 100644
--- a/deps/npm/node_modules/@npmcli/arborist/lib/arborist/rebuild.js
+++ b/deps/npm/node_modules/@npmcli/arborist/lib/arborist/rebuild.js
@@ -7,7 +7,7 @@ const promiseAllRejectLate = require('promise-all-reject-late')
const rpj = require('read-package-json-fast')
const binLinks = require('bin-links')
const runScript = require('@npmcli/run-script')
-const promiseCallLimit = require('promise-call-limit')
+const { callLimit: promiseCallLimit } = require('promise-call-limit')
const { resolve } = require('path')
const {
isNodeGypPackage,
@@ -19,67 +19,37 @@ const boolEnv = b => b ? '1' : ''
const sortNodes = (a, b) =>
(a.depth - b.depth) || localeCompare(a.path, b.path)
-const _workspaces = Symbol.for('workspaces')
-const _build = Symbol('build')
-const _loadDefaultNodes = Symbol('loadDefaultNodes')
-const _retrieveNodesByType = Symbol('retrieveNodesByType')
-const _resetQueues = Symbol('resetQueues')
-const _rebuildBundle = Symbol('rebuildBundle')
-const _ignoreScripts = Symbol('ignoreScripts')
-const _binLinks = Symbol('binLinks')
-const _oldMeta = Symbol('oldMeta')
-const _createBinLinks = Symbol('createBinLinks')
-const _doHandleOptionalFailure = Symbol('doHandleOptionalFailure')
-const _linkAllBins = Symbol('linkAllBins')
-const _runScripts = Symbol('runScripts')
-const _buildQueues = Symbol('buildQueues')
-const _addToBuildSet = Symbol('addToBuildSet')
const _checkBins = Symbol.for('checkBins')
-const _queues = Symbol('queues')
-const _scriptShell = Symbol('scriptShell')
-const _includeWorkspaceRoot = Symbol.for('includeWorkspaceRoot')
-const _workspacesEnabled = Symbol.for('workspacesEnabled')
-
-const _force = Symbol.for('force')
-const _global = Symbol.for('global')
// defined by reify mixin
const _handleOptionalFailure = Symbol.for('handleOptionalFailure')
const _trashList = Symbol.for('trashList')
module.exports = cls => class Builder extends cls {
+ #doHandleOptionalFailure
+ #oldMeta = null
+ #queues
+
constructor (options) {
super(options)
- const {
- ignoreScripts = false,
- scriptShell,
- binLinks = true,
- rebuildBundle = true,
- } = options
-
this.scriptsRun = new Set()
- this[_binLinks] = binLinks
- this[_ignoreScripts] = !!ignoreScripts
- this[_scriptShell] = scriptShell
- this[_rebuildBundle] = !!rebuildBundle
- this[_resetQueues]()
- this[_oldMeta] = null
+ this.#resetQueues()
}
async rebuild ({ nodes, handleOptionalFailure = false } = {}) {
// nothing to do if we're not building anything!
- if (this[_ignoreScripts] && !this[_binLinks]) {
+ if (this.options.ignoreScripts && !this.options.binLinks) {
return
}
// when building for the first time, as part of reify, we ignore
// failures in optional nodes, and just delete them. however, when
// running JUST a rebuild, we treat optional failures as real fails
- this[_doHandleOptionalFailure] = handleOptionalFailure
+ this.#doHandleOptionalFailure = handleOptionalFailure
if (!nodes) {
- nodes = await this[_loadDefaultNodes]()
+ nodes = await this.#loadDefaultNodes()
}
// separates links nodes so that it can run
@@ -89,15 +59,15 @@ module.exports = cls => class Builder extends cls {
const {
depNodes,
linkNodes,
- } = this[_retrieveNodesByType](nodes)
+ } = this.#retrieveNodesByType(nodes)
// build regular deps
- await this[_build](depNodes, {})
+ await this.#build(depNodes, {})
// build link deps
if (linkNodes.size) {
- this[_resetQueues]()
- await this[_build](linkNodes, { type: 'links' })
+ this.#resetQueues()
+ await this.#build(linkNodes, { type: 'links' })
}
process.emit('timeEnd', 'build')
@@ -105,20 +75,20 @@ module.exports = cls => class Builder extends cls {
// if we don't have a set of nodes, then just rebuild
// the actual tree on disk.
- async [_loadDefaultNodes] () {
+ async #loadDefaultNodes () {
let nodes
const tree = await this.loadActual()
let filterSet
- if (!this[_workspacesEnabled]) {
+ if (!this.options.workspacesEnabled) {
filterSet = this.excludeWorkspacesDependencySet(tree)
nodes = tree.inventory.filter(node =>
filterSet.has(node) || node.isProjectRoot
)
- } else if (this[_workspaces] && this[_workspaces].length) {
+ } else if (this.options.workspaces.length) {
filterSet = this.workspaceDependencySet(
tree,
- this[_workspaces],
- this[_includeWorkspaceRoot]
+ this.options.workspaces,
+ this.options.includeWorkspaceRoot
)
nodes = tree.inventory.filter(node => filterSet.has(node))
} else {
@@ -127,7 +97,7 @@ module.exports = cls => class Builder extends cls {
return nodes
}
- [_retrieveNodesByType] (nodes) {
+ #retrieveNodesByType (nodes) {
const depNodes = new Set()
const linkNodes = new Set()
const storeNodes = new Set()
@@ -154,7 +124,7 @@ module.exports = cls => class Builder extends cls {
//
// we avoid doing so if global=true since `bin-links` relies
// on having the target nodes available in global mode.
- if (!this[_global]) {
+ if (!this.options.global) {
for (const node of linkNodes) {
depNodes.delete(node.target)
}
@@ -166,8 +136,8 @@ module.exports = cls => class Builder extends cls {
}
}
- [_resetQueues] () {
- this[_queues] = {
+ #resetQueues () {
+ this.#queues = {
preinstall: [],
install: [],
postinstall: [],
@@ -176,46 +146,46 @@ module.exports = cls => class Builder extends cls {
}
}
- async [_build] (nodes, { type = 'deps' }) {
+ async #build (nodes, { type = 'deps' }) {
process.emit('time', `build:${type}`)
- await this[_buildQueues](nodes)
+ await this.#buildQueues(nodes)
- if (!this[_ignoreScripts]) {
- await this[_runScripts]('preinstall')
+ if (!this.options.ignoreScripts) {
+ await this.#runScripts('preinstall')
}
// links should run prepare scripts and only link bins after that
if (type === 'links') {
- await this[_runScripts]('prepare')
+ await this.#runScripts('prepare')
}
- if (this[_binLinks]) {
- await this[_linkAllBins]()
+ if (this.options.binLinks) {
+ await this.#linkAllBins()
}
- if (!this[_ignoreScripts]) {
- await this[_runScripts]('install')
- await this[_runScripts]('postinstall')
+ if (!this.options.ignoreScripts) {
+ await this.#runScripts('install')
+ await this.#runScripts('postinstall')
}
process.emit('timeEnd', `build:${type}`)
}
- async [_buildQueues] (nodes) {
+ async #buildQueues (nodes) {
process.emit('time', 'build:queue')
const set = new Set()
const promises = []
for (const node of nodes) {
- promises.push(this[_addToBuildSet](node, set))
+ promises.push(this.#addToBuildSet(node, set))
// if it has bundle deps, add those too, if rebuildBundle
- if (this[_rebuildBundle] !== false) {
+ if (this.options.rebuildBundle !== false) {
const bd = node.package.bundleDependencies
if (bd && bd.length) {
dfwalk({
tree: node,
- leave: node => promises.push(this[_addToBuildSet](node, set)),
+ leave: node => promises.push(this.#addToBuildSet(node, set)),
getChildren: node => [...node.children.values()],
filter: node => node.inBundle,
})
@@ -236,7 +206,7 @@ module.exports = cls => class Builder extends cls {
const tests = { bin, preinstall, install, postinstall, prepare }
for (const [key, has] of Object.entries(tests)) {
if (has) {
- this[_queues][key].push(node)
+ this.#queues[key].push(node)
}
}
}
@@ -249,21 +219,21 @@ module.exports = cls => class Builder extends cls {
// the node path. Otherwise a package can have a preinstall script
// that unlinks something, to allow them to silently overwrite system
// binaries, which is unsafe and insecure.
- if (!node.globalTop || this[_force]) {
+ if (!node.globalTop || this.options.force) {
return
}
const { path, package: pkg } = node
await binLinks.checkBins({ pkg, path, top: true, global: true })
}
- async [_addToBuildSet] (node, set, refreshed = false) {
+ async #addToBuildSet (node, set, refreshed = false) {
if (set.has(node)) {
return
}
- if (this[_oldMeta] === null) {
+ if (this.#oldMeta === null) {
const { root: { meta } } = node
- this[_oldMeta] = meta && meta.loadedFromDisk &&
+ this.#oldMeta = meta && meta.loadedFromDisk &&
!(meta.originalLockfileVersion >= 2)
}
@@ -272,7 +242,7 @@ module.exports = cls => class Builder extends cls {
const { preinstall, install, postinstall, prepare } = scripts
const anyScript = preinstall || install || postinstall || prepare
- if (!refreshed && !anyScript && (hasInstallScript || this[_oldMeta])) {
+ if (!refreshed && !anyScript && (hasInstallScript || this.#oldMeta)) {
// we either have an old metadata (and thus might have scripts)
// or we have an indication that there's install scripts (but
// don't yet know what they are) so we have to load the package.json
@@ -286,7 +256,7 @@ module.exports = cls => class Builder extends cls {
const { scripts = {} } = pkg
node.package.scripts = scripts
- return this[_addToBuildSet](node, set, true)
+ return this.#addToBuildSet(node, set, true)
}
// Rebuild node-gyp dependencies lacking an install or preinstall script
@@ -309,8 +279,8 @@ module.exports = cls => class Builder extends cls {
}
}
- async [_runScripts] (event) {
- const queue = this[_queues][event]
+ async #runScripts (event) {
+ const queue = this.#queues[event]
if (!queue.length) {
return
@@ -358,7 +328,7 @@ module.exports = cls => class Builder extends cls {
pkg,
stdio,
env,
- scriptShell: this[_scriptShell],
+ scriptShell: this.options.scriptShell,
}
const p = runScript(runOpts).catch(er => {
const { code, signal } = er
@@ -382,17 +352,17 @@ module.exports = cls => class Builder extends cls {
log.info('run', pkg._id, event, { code, signal })
})
- await (this[_doHandleOptionalFailure]
+ await (this.#doHandleOptionalFailure
? this[_handleOptionalFailure](node, p)
: p)
process.emit('timeEnd', timer)
- }), limit)
+ }), { limit })
process.emit('timeEnd', `build:run:${event}`)
}
- async [_linkAllBins] () {
- const queue = this[_queues].bin
+ async #linkAllBins () {
+ const queue = this.#queues.bin
if (!queue.length) {
return
}
@@ -402,14 +372,15 @@ module.exports = cls => class Builder extends cls {
// sort the queue by node path, so that the module-local collision
// detector in bin-links will always resolve the same way.
for (const node of queue.sort(sortNodes)) {
- promises.push(this[_createBinLinks](node))
+ // TODO these run before they're awaited
+ promises.push(this.#createBinLinks(node))
}
await promiseAllRejectLate(promises)
process.emit('timeEnd', 'build:link')
}
- async [_createBinLinks] (node) {
+ async #createBinLinks (node) {
if (this[_trashList].has(node.path)) {
return
}
@@ -420,11 +391,11 @@ module.exports = cls => class Builder extends cls {
pkg: node.package,
path: node.path,
top: !!(node.isTop || node.globalTop),
- force: this[_force],
+ force: this.options.force,
global: !!node.globalTop,
})
- await (this[_doHandleOptionalFailure]
+ await (this.#doHandleOptionalFailure
? this[_handleOptionalFailure](node, p)
: p)
diff --git a/deps/npm/node_modules/@npmcli/arborist/lib/arborist/reify.js b/deps/npm/node_modules/@npmcli/arborist/lib/arborist/reify.js
index 7ce3bc2a9db1dd..a70e21821ecb86 100644
--- a/deps/npm/node_modules/@npmcli/arborist/lib/arborist/reify.js
+++ b/deps/npm/node_modules/@npmcli/arborist/lib/arborist/reify.js
@@ -24,13 +24,13 @@ const PackageJson = require('@npmcli/package-json')
const packageContents = require('@npmcli/installed-package-contents')
const runScript = require('@npmcli/run-script')
const { checkEngine, checkPlatform } = require('npm-install-checks')
-const _force = Symbol.for('force')
const treeCheck = require('../tree-check.js')
const relpath = require('../relpath.js')
const Diff = require('../diff.js')
const retirePath = require('../retire-path.js')
const promiseAllRejectLate = require('promise-all-reject-late')
+const { callLimit: promiseCallLimit } = require('promise-call-limit')
const optionalSet = require('../optional-set.js')
const calcDepFlags = require('../calc-dep-flags.js')
const { saveTypeMap, hasSubKey } = require('../add-rm-pkg-deps.js')
@@ -47,8 +47,6 @@ const _retireShallowNodes = Symbol.for('retireShallowNodes')
const _getBundlesByDepth = Symbol('getBundlesByDepth')
const _registryResolved = Symbol('registryResolved')
const _addNodeToTrashList = Symbol.for('addNodeToTrashList')
-const _workspaces = Symbol.for('workspaces')
-const _workspacesEnabled = Symbol.for('workspacesEnabled')
// shared by rebuild mixin
const _trashList = Symbol.for('trashList')
@@ -90,14 +88,11 @@ const _validateNodeModules = Symbol('validateNodeModules')
const _nmValidated = Symbol('nmValidated')
const _validatePath = Symbol('validatePath')
const _reifyPackages = Symbol.for('reifyPackages')
-const _includeWorkspaceRoot = Symbol.for('includeWorkspaceRoot')
const _omitDev = Symbol('omitDev')
const _omitOptional = Symbol('omitOptional')
const _omitPeer = Symbol('omitPeer')
-const _global = Symbol.for('global')
-
const _pruneBundledMetadeps = Symbol('pruneBundledMetadeps')
// defined by Ideal mixin
@@ -141,7 +136,7 @@ module.exports = cls => class Reifier extends cls {
async reify (options = {}) {
const linked = (options.installStrategy || this.options.installStrategy) === 'linked'
- if (this[_packageLockOnly] && this[_global]) {
+ if (this[_packageLockOnly] && this.options.global) {
const er = new Error('cannot generate lockfile for global packages')
er.code = 'ESHRINKWRAPGLOBAL'
throw er
@@ -286,7 +281,7 @@ module.exports = cls => class Reifier extends cls {
.then(() => process.emit('timeEnd', 'reify:loadTrees'))
}
- const actualOpt = this[_global] ? {
+ const actualOpt = this.options.global ? {
ignoreMissing: true,
global: true,
filter: (node, kid) => {
@@ -313,7 +308,7 @@ module.exports = cls => class Reifier extends cls {
},
} : { ignoreMissing: true }
- if (!this[_global]) {
+ if (!this.options.global) {
return Promise.all([
this.loadActual(actualOpt),
this.buildIdealTree(bitOpt),
@@ -340,12 +335,12 @@ module.exports = cls => class Reifier extends cls {
// to just invalidate the parts that changed, but avoid walking the
// whole tree again.
- const includeWorkspaces = this[_workspacesEnabled]
- const includeRootDeps = !this[_workspacesEnabled]
- || this[_includeWorkspaceRoot] && this[_workspaces].length > 0
+ const includeWorkspaces = this.options.workspacesEnabled
+ const includeRootDeps = !includeWorkspaces
+ || this.options.includeWorkspaceRoot && this.options.workspaces.length > 0
const filterNodes = []
- if (this[_global] && this.explicitRequests.size) {
+ if (this.options.global && this.explicitRequests.size) {
const idealTree = this.idealTree.target
const actualTree = this.actualTree.target
// we ONLY are allowed to make changes in the global top-level
@@ -363,7 +358,7 @@ module.exports = cls => class Reifier extends cls {
} else {
if (includeWorkspaces) {
// add all ws nodes to filterNodes
- for (const ws of this[_workspaces]) {
+ for (const ws of this.options.workspaces) {
const ideal = this.idealTree.children.get(ws)
if (ideal) {
filterNodes.push(ideal)
@@ -655,7 +650,7 @@ module.exports = cls => class Reifier extends cls {
// do not allow node_modules to be a symlink
async [_validateNodeModules] (nm) {
- if (this[_force] || this[_nmValidated].has(nm)) {
+ if (this.options.force || this[_nmValidated].has(nm)) {
return
}
const st = await lstat(nm).catch(() => null)
@@ -817,10 +812,12 @@ module.exports = cls => class Reifier extends cls {
}
// extract all the nodes with bundles
- return promiseAllRejectLate(set.map(node => {
- this[_bundleUnpacked].add(node)
- return this[_reifyNode](node)
- }))
+ return promiseCallLimit(set.map(node => {
+ return () => {
+ this[_bundleUnpacked].add(node)
+ return this[_reifyNode](node)
+ }
+ }), { rejectLate: true })
// then load their unpacked children and move into the ideal tree
.then(nodes =>
promiseAllRejectLate(nodes.map(async node => {
@@ -989,11 +986,11 @@ module.exports = cls => class Reifier extends cls {
const tree = this.idealTree
// if we're operating on a workspace, only audit the workspace deps
- if (this[_workspaces] && this[_workspaces].length) {
+ if (this.options.workspaces.length) {
options.filterSet = this.workspaceDependencySet(
tree,
- this[_workspaces],
- this[_includeWorkspaceRoot]
+ this.options.workspaces,
+ this.options.includeWorkspaceRoot
)
}
@@ -1217,7 +1214,7 @@ module.exports = cls => class Reifier extends cls {
// saveIdealTree to be able to write the lockfile by default.
const saveIdealTree = !(
(!save && !hasUpdates)
- || this[_global]
+ || this.options.global
|| this[_dryRun]
)
@@ -1563,7 +1560,7 @@ module.exports = cls => class Reifier extends cls {
this.actualTree = this.idealTree
this.idealTree = null
- if (!this[_global]) {
+ if (!this.options.global) {
await this.actualTree.meta.save()
const ignoreScripts = !!this.options.ignoreScripts
// if we aren't doing a dry run or ignoring scripts and we actually made changes to the dep
@@ -1590,4 +1587,22 @@ module.exports = cls => class Reifier extends cls {
}
}
}
+
+ async dedupe (options = {}) {
+ // allow the user to set options on the ctor as well.
+ // XXX: deprecate separate method options objects.
+ options = { ...this.options, ...options }
+ const tree = await this.loadVirtual().catch(() => this.loadActual())
+ const names = []
+ for (const name of tree.inventory.query('name')) {
+ if (tree.inventory.query('name', name).size > 1) {
+ names.push(name)
+ }
+ }
+ return this.reify({
+ ...options,
+ preferDedupe: true,
+ update: { names },
+ })
+ }
}
diff --git a/deps/npm/node_modules/@npmcli/arborist/lib/arborist/set-workspaces.js b/deps/npm/node_modules/@npmcli/arborist/lib/arborist/set-workspaces.js
deleted file mode 100644
index 27a12708a7e82d..00000000000000
--- a/deps/npm/node_modules/@npmcli/arborist/lib/arborist/set-workspaces.js
+++ /dev/null
@@ -1,19 +0,0 @@
-const mapWorkspaces = require('@npmcli/map-workspaces')
-
-// shared ref used by other mixins/Arborist
-const _setWorkspaces = Symbol.for('setWorkspaces')
-
-module.exports = cls => class MapWorkspaces extends cls {
- async [_setWorkspaces] (node) {
- const workspaces = await mapWorkspaces({
- cwd: node.path,
- pkg: node.package,
- })
-
- if (node && workspaces.size) {
- node.workspaces = workspaces
- }
-
- return node
- }
-}
diff --git a/deps/npm/node_modules/@npmcli/arborist/lib/case-insensitive-map.js b/deps/npm/node_modules/@npmcli/arborist/lib/case-insensitive-map.js
index 016ce6017b01e4..afc6afbe0f98ad 100644
--- a/deps/npm/node_modules/@npmcli/arborist/lib/case-insensitive-map.js
+++ b/deps/npm/node_modules/@npmcli/arborist/lib/case-insensitive-map.js
@@ -2,49 +2,49 @@
// are case-insensitive and unicode-normalizing, so we need to treat
// node.children.get('FOO') and node.children.get('foo') as the same thing.
-const _keys = Symbol('keys')
-const _normKey = Symbol('normKey')
-const normalize = s => s.normalize('NFKD').toLowerCase()
-const OGMap = Map
-module.exports = class Map extends OGMap {
+module.exports = class CIMap extends Map {
+ #keys = new Map()
+
constructor (items = []) {
super()
- this[_keys] = new OGMap()
for (const [key, val] of items) {
this.set(key, val)
}
}
- [_normKey] (key) {
- return typeof key === 'string' ? normalize(key) : key
+ #normKey (key) {
+ if (typeof key !== 'string') {
+ return key
+ }
+ return key.normalize('NFKD').toLowerCase()
}
get (key) {
- const normKey = this[_normKey](key)
- return this[_keys].has(normKey) ? super.get(this[_keys].get(normKey))
+ const normKey = this.#normKey(key)
+ return this.#keys.has(normKey) ? super.get(this.#keys.get(normKey))
: undefined
}
set (key, val) {
- const normKey = this[_normKey](key)
- if (this[_keys].has(normKey)) {
- super.delete(this[_keys].get(normKey))
+ const normKey = this.#normKey(key)
+ if (this.#keys.has(normKey)) {
+ super.delete(this.#keys.get(normKey))
}
- this[_keys].set(normKey, key)
+ this.#keys.set(normKey, key)
return super.set(key, val)
}
delete (key) {
- const normKey = this[_normKey](key)
- if (this[_keys].has(normKey)) {
- const prevKey = this[_keys].get(normKey)
- this[_keys].delete(normKey)
+ const normKey = this.#normKey(key)
+ if (this.#keys.has(normKey)) {
+ const prevKey = this.#keys.get(normKey)
+ this.#keys.delete(normKey)
return super.delete(prevKey)
}
}
has (key) {
- const normKey = this[_normKey](key)
- return this[_keys].has(normKey) && super.has(this[_keys].get(normKey))
+ const normKey = this.#normKey(key)
+ return this.#keys.has(normKey) && super.has(this.#keys.get(normKey))
}
}
diff --git a/deps/npm/node_modules/@npmcli/arborist/lib/get-workspace-nodes.js b/deps/npm/node_modules/@npmcli/arborist/lib/get-workspace-nodes.js
deleted file mode 100644
index 91002dab570853..00000000000000
--- a/deps/npm/node_modules/@npmcli/arborist/lib/get-workspace-nodes.js
+++ /dev/null
@@ -1,36 +0,0 @@
-// Get the actual nodes corresponding to a root node's child workspaces,
-// given a list of workspace names.
-
-const log = require('proc-log')
-const relpath = require('./relpath.js')
-
-const getWorkspaceNodes = (tree, workspaces) => {
- const wsMap = tree.workspaces
- if (!wsMap) {
- log.warn('workspaces', 'filter set, but no workspaces present')
- return []
- }
-
- const nodes = []
- for (const name of workspaces) {
- const path = wsMap.get(name)
- if (!path) {
- log.warn('workspaces', `${name} in filter set, but not in workspaces`)
- continue
- }
-
- const loc = relpath(tree.realpath, path)
- const node = tree.inventory.get(loc)
-
- if (!node) {
- log.warn('workspaces', `${name} in filter set, but no workspace folder present`)
- continue
- }
-
- nodes.push(node)
- }
-
- return nodes
-}
-
-module.exports = getWorkspaceNodes
diff --git a/deps/npm/node_modules/@npmcli/arborist/lib/index.js b/deps/npm/node_modules/@npmcli/arborist/lib/index.js
index c7b07ce28e4df0..5baaee6ee7c932 100644
--- a/deps/npm/node_modules/@npmcli/arborist/lib/index.js
+++ b/deps/npm/node_modules/@npmcli/arborist/lib/index.js
@@ -4,5 +4,3 @@ module.exports.Node = require('./node.js')
module.exports.Link = require('./link.js')
module.exports.Edge = require('./edge.js')
module.exports.Shrinkwrap = require('./shrinkwrap.js')
-// XXX export the other classes, too. shrinkwrap, diff, etc.
-// they're handy!
diff --git a/deps/npm/node_modules/@npmcli/arborist/lib/query-selector-all.js b/deps/npm/node_modules/@npmcli/arborist/lib/query-selector-all.js
index 96c52144060b80..ce49201ce624c6 100644
--- a/deps/npm/node_modules/@npmcli/arborist/lib/query-selector-all.js
+++ b/deps/npm/node_modules/@npmcli/arborist/lib/query-selector-all.js
@@ -8,6 +8,7 @@ const { minimatch } = require('minimatch')
const npa = require('npm-package-arg')
const pacote = require('pacote')
const semver = require('semver')
+const fetch = require('npm-registry-fetch')
// handle results for parsed query asts, results are stored in a map that has a
// key that points to each ast selector node and stores the resulting array of
@@ -18,6 +19,7 @@ class Results {
#initialItems
#inventory
#outdatedCache = new Map()
+ #vulnCache
#pendingCombinator
#results = new Map()
#targetNode
@@ -26,6 +28,7 @@ class Results {
this.#currentAstSelector = opts.rootAstNode.nodes[0]
this.#inventory = opts.inventory
this.#initialItems = opts.initialItems
+ this.#vulnCache = opts.vulnCache
this.#targetNode = opts.targetNode
this.currentResults = this.#initialItems
@@ -211,6 +214,7 @@ class Results {
inventory: this.#inventory,
rootAstNode: this.currentAstNode.nestedNode,
targetNode: item,
+ vulnCache: this.#vulnCache,
})
if (res.size > 0) {
found.push(item)
@@ -239,6 +243,7 @@ class Results {
inventory: this.#inventory,
rootAstNode: this.currentAstNode.nestedNode,
targetNode: this.currentAstNode,
+ vulnCache: this.#vulnCache,
})
return [...res]
}
@@ -266,6 +271,7 @@ class Results {
inventory: this.#inventory,
rootAstNode: this.currentAstNode.nestedNode,
targetNode: this.currentAstNode,
+ vulnCache: this.#vulnCache,
})
const internalSelector = new Set(res)
return this.initialItems.filter(node =>
@@ -432,6 +438,75 @@ class Results {
return this.initialItems.filter(node => node.target.edgesIn.size > 1)
}
+ async vulnPseudo () {
+ if (!this.initialItems.length) {
+ return this.initialItems
+ }
+ if (!this.#vulnCache) {
+ const packages = {}
+ // We have to map the items twice, once to get the request, and a second time to filter out the results of that request
+ this.initialItems.map((node) => {
+ if (node.isProjectRoot || node.package.private) {
+ return
+ }
+ if (!packages[node.name]) {
+ packages[node.name] = []
+ }
+ if (!packages[node.name].includes(node.version)) {
+ packages[node.name].push(node.version)
+ }
+ })
+ const res = await fetch('/-/npm/v1/security/advisories/bulk', {
+ ...this.flatOptions,
+ registry: this.flatOptions.auditRegistry || this.flatOptions.registry,
+ method: 'POST',
+ gzip: true,
+ body: packages,
+ })
+ this.#vulnCache = await res.json()
+ }
+ const advisories = this.#vulnCache
+ const { vulns } = this.currentAstNode
+ return this.initialItems.filter(item => {
+ const vulnerable = advisories[item.name]?.filter(advisory => {
+ // This could be for another version of this package elsewhere in the tree
+ if (!semver.intersects(advisory.vulnerable_versions, item.version)) {
+ return false
+ }
+ if (!vulns) {
+ return true
+ }
+ // vulns are OR with each other, if any one matches we're done
+ for (const vuln of vulns) {
+ if (vuln.severity && !vuln.severity.includes('*')) {
+ if (!vuln.severity.includes(advisory.severity)) {
+ continue
+ }
+ }
+
+ if (vuln?.cwe) {
+ // * is special, it means "has a cwe"
+ if (vuln.cwe.includes('*')) {
+ if (!advisory.cwe.length) {
+ continue
+ }
+ } else if (!vuln.cwe.every(cwe => advisory.cwe.includes(`CWE-${cwe}`))) {
+ continue
+ }
+ }
+ return true
+ }
+ })
+ if (vulnerable?.length) {
+ item.queryContext = {
+ advisories: vulnerable,
+ }
+ return true
+ }
+ return false
+ })
+ }
+
async outdatedPseudo () {
const { outdatedKind = 'any' } = this.currentAstNode
@@ -445,6 +520,11 @@ class Results {
return false
}
+ // private packages can't be published, skip them
+ if (node.package.private) {
+ return false
+ }
+
// we cache the promise representing the full versions list, this helps reduce the
// number of requests we send by keeping population of the cache in a single tick
// making it less likely that multiple requests for the same package will be inflight
@@ -839,8 +919,6 @@ const retrieveNodesFromParsedAst = async (opts) => {
return results.collect(rootAstNode)
}
-// We are keeping this async in the event that we do add async operators, we
-// won't have to have a breaking change on this function signature.
const querySelectorAll = async (targetNode, query, flatOptions) => {
// This never changes ever we just pass it around. But we can't scope it to
// this whole file if we ever want to support concurrent calls to this
diff --git a/deps/npm/node_modules/@npmcli/arborist/lib/tracker.js b/deps/npm/node_modules/@npmcli/arborist/lib/tracker.js
index 42c401e8799e85..5acb32a5a7cfd9 100644
--- a/deps/npm/node_modules/@npmcli/arborist/lib/tracker.js
+++ b/deps/npm/node_modules/@npmcli/arborist/lib/tracker.js
@@ -1,47 +1,46 @@
-const _progress = Symbol('_progress')
-const _onError = Symbol('_onError')
-const _setProgress = Symbol('_setProgess')
const npmlog = require('npmlog')
module.exports = cls => class Tracker extends cls {
+ #progress = new Map()
+ #setProgress
+
constructor (options = {}) {
super(options)
- this[_setProgress] = !!options.progress
- this[_progress] = new Map()
+ this.#setProgress = !!options.progress
}
addTracker (section, subsection = null, key = null) {
if (section === null || section === undefined) {
- this[_onError](`Tracker can't be null or undefined`)
+ this.#onError(`Tracker can't be null or undefined`)
}
if (key === null) {
key = subsection
}
- const hasTracker = this[_progress].has(section)
- const hasSubtracker = this[_progress].has(`${section}:${key}`)
+ const hasTracker = this.#progress.has(section)
+ const hasSubtracker = this.#progress.has(`${section}:${key}`)
if (hasTracker && subsection === null) {
// 0. existing tracker, no subsection
- this[_onError](`Tracker "${section}" already exists`)
+ this.#onError(`Tracker "${section}" already exists`)
} else if (!hasTracker && subsection === null) {
// 1. no existing tracker, no subsection
// Create a new tracker from npmlog
// starts progress bar
- if (this[_setProgress] && this[_progress].size === 0) {
+ if (this.#setProgress && this.#progress.size === 0) {
npmlog.enableProgress()
}
- this[_progress].set(section, npmlog.newGroup(section))
+ this.#progress.set(section, npmlog.newGroup(section))
} else if (!hasTracker && subsection !== null) {
// 2. no parent tracker and subsection
- this[_onError](`Parent tracker "${section}" does not exist`)
+ this.#onError(`Parent tracker "${section}" does not exist`)
} else if (!hasTracker || !hasSubtracker) {
// 3. existing parent tracker, no subsection tracker
- // Create a new subtracker in this[_progress] from parent tracker
- this[_progress].set(`${section}:${key}`,
- this[_progress].get(section).newGroup(`${section}:${subsection}`)
+ // Create a new subtracker in this.#progress from parent tracker
+ this.#progress.set(`${section}:${key}`,
+ this.#progress.get(section).newGroup(`${section}:${subsection}`)
)
}
// 4. existing parent tracker, existing subsection tracker
@@ -50,22 +49,22 @@ module.exports = cls => class Tracker extends cls {
finishTracker (section, subsection = null, key = null) {
if (section === null || section === undefined) {
- this[_onError](`Tracker can't be null or undefined`)
+ this.#onError(`Tracker can't be null or undefined`)
}
if (key === null) {
key = subsection
}
- const hasTracker = this[_progress].has(section)
- const hasSubtracker = this[_progress].has(`${section}:${key}`)
+ const hasTracker = this.#progress.has(section)
+ const hasSubtracker = this.#progress.has(`${section}:${key}`)
// 0. parent tracker exists, no subsection
- // Finish parent tracker and remove from this[_progress]
+ // Finish parent tracker and remove from this.#progress
if (hasTracker && subsection === null) {
// check if parent tracker does
// not have any remaining children
- const keys = this[_progress].keys()
+ const keys = this.#progress.keys()
for (const key of keys) {
if (key.match(new RegExp(section + ':'))) {
this.finishTracker(section, key)
@@ -73,28 +72,28 @@ module.exports = cls => class Tracker extends cls {
}
// remove parent tracker
- this[_progress].get(section).finish()
- this[_progress].delete(section)
+ this.#progress.get(section).finish()
+ this.#progress.delete(section)
// remove progress bar if all
// trackers are finished
- if (this[_setProgress] && this[_progress].size === 0) {
+ if (this.#setProgress && this.#progress.size === 0) {
npmlog.disableProgress()
}
} else if (!hasTracker && subsection === null) {
// 1. no existing parent tracker, no subsection
- this[_onError](`Tracker "${section}" does not exist`)
+ this.#onError(`Tracker "${section}" does not exist`)
} else if (!hasTracker || hasSubtracker) {
// 2. subtracker exists
- // Finish subtracker and remove from this[_progress]
- this[_progress].get(`${section}:${key}`).finish()
- this[_progress].delete(`${section}:${key}`)
+ // Finish subtracker and remove from this.#progress
+ this.#progress.get(`${section}:${key}`).finish()
+ this.#progress.delete(`${section}:${key}`)
}
// 3. existing parent tracker, no subsection
}
- [_onError] (msg) {
- if (this[_setProgress]) {
+ #onError (msg) {
+ if (this.#setProgress) {
npmlog.disableProgress()
}
throw new Error(msg)
diff --git a/deps/npm/node_modules/@npmcli/arborist/lib/version-from-tgz.js b/deps/npm/node_modules/@npmcli/arborist/lib/version-from-tgz.js
index be4405cee998f2..092cdbcbaf1326 100644
--- a/deps/npm/node_modules/@npmcli/arborist/lib/version-from-tgz.js
+++ b/deps/npm/node_modules/@npmcli/arborist/lib/version-from-tgz.js
@@ -1,22 +1,21 @@
-/* eslint node/no-deprecated-api: "off" */
const semver = require('semver')
const { basename } = require('path')
-const { parse } = require('url')
+const { URL } = require('url')
module.exports = (name, tgz) => {
const base = basename(tgz)
if (!base.endsWith('.tgz')) {
return null
}
- const u = parse(tgz)
- if (/^https?:/.test(u.protocol)) {
+ if (tgz.startsWith('http:/') || tgz.startsWith('https:/')) {
+ const u = new URL(tgz)
// registry url? check for most likely pattern.
// either /@foo/bar/-/bar-1.2.3.tgz or
// /foo/-/foo-1.2.3.tgz, and fall through to
// basename checking. Note that registries can
// be mounted below the root url, so /a/b/-/x/y/foo/-/foo-1.2.3.tgz
// is a potential option.
- const tfsplit = u.path.slice(1).split('/-/')
+ const tfsplit = u.pathname.slice(1).split('/-/')
if (tfsplit.length > 1) {
const afterTF = tfsplit.pop()
if (afterTF === base) {
diff --git a/deps/npm/node_modules/@npmcli/arborist/lib/vuln.js b/deps/npm/node_modules/@npmcli/arborist/lib/vuln.js
index 81b921db01ad59..2bffe54f2dacdc 100644
--- a/deps/npm/node_modules/@npmcli/arborist/lib/vuln.js
+++ b/deps/npm/node_modules/@npmcli/arborist/lib/vuln.js
@@ -16,24 +16,23 @@ const semverOpt = { loose: true, includePrerelease: true }
const localeCompare = require('@isaacs/string-locale-compare')('en')
const npa = require('npm-package-arg')
-const _range = Symbol('_range')
-const _simpleRange = Symbol('_simpleRange')
-const _fixAvailable = Symbol('_fixAvailable')
const severities = new Map([
- ['info', 0],
- ['low', 1],
- ['moderate', 2],
- ['high', 3],
- ['critical', 4],
- [null, -1],
+ ['info', 0], [0, 'info'],
+ ['low', 1], [1, 'low'],
+ ['moderate', 2], [2, 'moderate'],
+ ['high', 3], [3, 'high'],
+ ['critical', 4], [4, 'critical'],
+ [null, -1], [-1, null],
])
-for (const [name, val] of severities.entries()) {
- severities.set(val, name)
-}
-
class Vuln {
+ #range = null
+ #simpleRange = null
+ // assume a fix is available unless it hits a top node
+ // that locks it in place, setting this false or {isSemVerMajor, version}.
+ #fixAvailable = true
+
constructor ({ name, advisory }) {
this.name = name
this.via = new Set()
@@ -41,23 +40,18 @@ class Vuln {
this.severity = null
this.effects = new Set()
this.topNodes = new Set()
- this[_range] = null
- this[_simpleRange] = null
this.nodes = new Set()
- // assume a fix is available unless it hits a top node
- // that locks it in place, setting this false or {isSemVerMajor, version}.
- this[_fixAvailable] = true
this.addAdvisory(advisory)
this.packument = advisory.packument
this.versions = advisory.versions
}
get fixAvailable () {
- return this[_fixAvailable]
+ return this.#fixAvailable
}
set fixAvailable (f) {
- this[_fixAvailable] = f
+ this.#fixAvailable = f
// if there's a fix available for this at the top level, it means that
// it will also fix the vulns that led to it being there. to get there,
// we set the vias to the most "strict" of fix availables.
@@ -131,7 +125,7 @@ class Vuln {
effects: [...this.effects].map(v => v.name).sort(localeCompare),
range: this.simpleRange,
nodes: [...this.nodes].map(n => n.location).sort(localeCompare),
- fixAvailable: this[_fixAvailable],
+ fixAvailable: this.#fixAvailable,
}
}
@@ -151,8 +145,8 @@ class Vuln {
this.advisories.delete(advisory)
// make sure we have the max severity of all the vulns causing this one
this.severity = null
- this[_range] = null
- this[_simpleRange] = null
+ this.#range = null
+ this.#simpleRange = null
// refresh severity
for (const advisory of this.advisories) {
this.addAdvisory(advisory)
@@ -170,27 +164,30 @@ class Vuln {
addAdvisory (advisory) {
this.advisories.add(advisory)
const sev = severities.get(advisory.severity)
- this[_range] = null
- this[_simpleRange] = null
+ this.#range = null
+ this.#simpleRange = null
if (sev > severities.get(this.severity)) {
this.severity = advisory.severity
}
}
get range () {
- return this[_range] ||
- (this[_range] = [...this.advisories].map(v => v.range).join(' || '))
+ if (!this.#range) {
+ this.#range = [...this.advisories].map(v => v.range).join(' || ')
+ }
+ return this.#range
}
get simpleRange () {
- if (this[_simpleRange] && this[_simpleRange] === this[_range]) {
- return this[_simpleRange]
+ if (this.#simpleRange && this.#simpleRange === this.#range) {
+ return this.#simpleRange
}
const versions = [...this.advisories][0].versions
const range = this.range
- const simple = simplifyRange(versions, range, semverOpt)
- return this[_simpleRange] = this[_range] = simple
+ this.#simpleRange = simplifyRange(versions, range, semverOpt)
+ this.#range = this.#simpleRange
+ return this.#simpleRange
}
isVulnerable (node) {
diff --git a/deps/npm/node_modules/@npmcli/arborist/package.json b/deps/npm/node_modules/@npmcli/arborist/package.json
index 1ba9c92e3fdc01..c761bc10d6cec2 100644
--- a/deps/npm/node_modules/@npmcli/arborist/package.json
+++ b/deps/npm/node_modules/@npmcli/arborist/package.json
@@ -1,6 +1,6 @@
{
"name": "@npmcli/arborist",
- "version": "7.3.0",
+ "version": "7.4.0",
"description": "Manage node_modules trees",
"dependencies": {
"@isaacs/string-locale-compare": "^1.1.0",
@@ -11,7 +11,7 @@
"@npmcli/name-from-folder": "^2.0.0",
"@npmcli/node-gyp": "^3.0.0",
"@npmcli/package-json": "^5.0.0",
- "@npmcli/query": "^3.0.1",
+ "@npmcli/query": "^3.1.0",
"@npmcli/run-script": "^7.0.2",
"bin-links": "^4.0.1",
"cacache": "^18.0.0",
@@ -30,7 +30,7 @@
"parse-conflict-json": "^3.0.0",
"proc-log": "^3.0.0",
"promise-all-reject-late": "^1.0.0",
- "promise-call-limit": "^1.0.2",
+ "promise-call-limit": "^3.0.1",
"read-package-json-fast": "^3.0.2",
"semver": "^7.3.7",
"ssri": "^10.0.5",
diff --git a/deps/npm/node_modules/@npmcli/config/lib/definitions/definitions.js b/deps/npm/node_modules/@npmcli/config/lib/definitions/definitions.js
index 6f8760fce1d3e7..09b0eceeea6b21 100644
--- a/deps/npm/node_modules/@npmcli/config/lib/definitions/definitions.js
+++ b/deps/npm/node_modules/@npmcli/config/lib/definitions/definitions.js
@@ -665,6 +665,26 @@ define('engine-strict', {
flatten,
})
+define('expect-results', {
+ default: null,
+ type: [null, Boolean],
+ exclusive: ['expect-result-count'],
+ description: `
+ Tells npm whether or not to expect results from the command.
+ Can be either true (expect some results) or false (expect no results).
+ `,
+})
+
+define('expect-result-count', {
+ default: null,
+ type: [null, Number],
+ hint: '',
+ exclusive: ['expect-results'],
+ description: `
+ Tells to expect a specific number of results from the command.
+ `,
+})
+
define('fetch-retries', {
default: 2,
type: Number,
@@ -766,6 +786,8 @@ define('force', {
define('foreground-scripts', {
default: false,
+ defaultDescription: `\`false\` unless when using \`npm pack\` or \`npm publish\` where it
+ defaults to \`true\``,
type: Boolean,
description: `
Run all build scripts (ie, \`preinstall\`, \`install\`, and
diff --git a/deps/npm/node_modules/@npmcli/config/package.json b/deps/npm/node_modules/@npmcli/config/package.json
index 80eb210b19e166..28102bea2781aa 100644
--- a/deps/npm/node_modules/@npmcli/config/package.json
+++ b/deps/npm/node_modules/@npmcli/config/package.json
@@ -1,6 +1,6 @@
{
"name": "@npmcli/config",
- "version": "8.1.0",
+ "version": "8.2.0",
"files": [
"bin/",
"lib/"
diff --git a/deps/npm/node_modules/@npmcli/query/lib/index.js b/deps/npm/node_modules/@npmcli/query/lib/index.js
index c7888d5bb5de6d..db7dc345a8c754 100644
--- a/deps/npm/node_modules/@npmcli/query/lib/index.js
+++ b/deps/npm/node_modules/@npmcli/query/lib/index.js
@@ -166,6 +166,46 @@ const fixupOutdated = astNode => {
}
}
+const fixupVuln = astNode => {
+ const vulns = []
+ if (astNode.nodes.length) {
+ for (const selector of astNode.nodes) {
+ const vuln = {}
+ for (const node of selector.nodes) {
+ if (node.type !== 'attribute') {
+ throw Object.assign(
+ new Error(':vuln pseudo-class only accepts attribute matchers or "cwe" tag'),
+ { code: 'EQUERYATTR' }
+ )
+ }
+ if (!['severity', 'cwe'].includes(node._attribute)) {
+ throw Object.assign(
+ new Error(':vuln pseudo-class only matches "severity" and "cwe" attributes'),
+ { code: 'EQUERYATTR' }
+ )
+ }
+ if (!node.operator) {
+ node.operator = '='
+ node.value = '*'
+ }
+ if (node.operator !== '=') {
+ throw Object.assign(
+ new Error(':vuln pseudo-class attribute selector only accepts "=" operator', node),
+ { code: 'EQUERYATTR' }
+ )
+ }
+ if (!vuln[node._attribute]) {
+ vuln[node._attribute] = []
+ }
+ vuln[node._attribute].push(node._value)
+ }
+ vulns.push(vuln)
+ }
+ astNode.vulns = vulns
+ astNode.nodes.length = 0
+ }
+}
+
// a few of the supported ast nodes need to be tweaked in order to properly be
// interpreted as proper arborist query selectors, namely semver ranges from
// both ids and :semver pseudo-class selectors need to be translated from what
@@ -192,6 +232,8 @@ const transformAst = selector => {
return fixupTypes(nextAstNode)
case ':outdated':
return fixupOutdated(nextAstNode)
+ case ':vuln':
+ return fixupVuln(nextAstNode)
}
})
}
diff --git a/deps/npm/node_modules/@npmcli/query/package.json b/deps/npm/node_modules/@npmcli/query/package.json
index 5f9fb2744538a2..ad45c18c44cd64 100644
--- a/deps/npm/node_modules/@npmcli/query/package.json
+++ b/deps/npm/node_modules/@npmcli/query/package.json
@@ -1,11 +1,11 @@
{
"name": "@npmcli/query",
- "version": "3.0.1",
+ "version": "3.1.0",
"description": "npm query parser and tools",
"main": "lib/index.js",
"scripts": {
"test": "tap",
- "lint": "eslint \"**/*.js\"",
+ "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
"postlint": "template-oss-check",
"template-oss-apply": "template-oss-apply --force",
"lintfix": "npm run lint -- --fix",
@@ -39,12 +39,12 @@
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.18.0",
+ "version": "4.21.3",
"publish": true
},
"devDependencies": {
"@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.18.0",
+ "@npmcli/template-oss": "4.21.3",
"tap": "^16.2.0"
},
"dependencies": {
diff --git a/deps/npm/node_modules/@npmcli/run-script/lib/is-server-package.js b/deps/npm/node_modules/@npmcli/run-script/lib/is-server-package.js
index d168623247527b..c36c40d4898d5c 100644
--- a/deps/npm/node_modules/@npmcli/run-script/lib/is-server-package.js
+++ b/deps/npm/node_modules/@npmcli/run-script/lib/is-server-package.js
@@ -1,7 +1,6 @@
-const util = require('util')
-const fs = require('fs')
-const { stat } = fs.promises || { stat: util.promisify(fs.stat) }
-const { resolve } = require('path')
+const { stat } = require('node:fs/promises')
+const { resolve } = require('node:path')
+
module.exports = async path => {
try {
const st = await stat(resolve(path, 'server.js'))
diff --git a/deps/npm/node_modules/@npmcli/run-script/lib/is-windows.js b/deps/npm/node_modules/@npmcli/run-script/lib/is-windows.js
deleted file mode 100644
index 651917e6ad27ab..00000000000000
--- a/deps/npm/node_modules/@npmcli/run-script/lib/is-windows.js
+++ /dev/null
@@ -1,2 +0,0 @@
-const platform = process.env.__FAKE_TESTING_PLATFORM__ || process.platform
-module.exports = platform === 'win32'
diff --git a/deps/npm/node_modules/@npmcli/run-script/lib/make-spawn-args.js b/deps/npm/node_modules/@npmcli/run-script/lib/make-spawn-args.js
index 2b2f96a91c8d5d..8a32d7198cb2e2 100644
--- a/deps/npm/node_modules/@npmcli/run-script/lib/make-spawn-args.js
+++ b/deps/npm/node_modules/@npmcli/run-script/lib/make-spawn-args.js
@@ -9,10 +9,10 @@ const makeSpawnArgs = options => {
path,
scriptShell = true,
binPaths,
- env = {},
+ env,
stdio,
cmd,
- args = [],
+ args,
stdioString,
} = options
diff --git a/deps/npm/node_modules/@npmcli/run-script/lib/package-envs.js b/deps/npm/node_modules/@npmcli/run-script/lib/package-envs.js
index 6b538e50247fda..612f850fb076ca 100644
--- a/deps/npm/node_modules/@npmcli/run-script/lib/package-envs.js
+++ b/deps/npm/node_modules/@npmcli/run-script/lib/package-envs.js
@@ -1,26 +1,29 @@
-// https://github.com/npm/rfcs/pull/183
-
-const envVal = val => Array.isArray(val) ? val.map(v => envVal(v)).join('\n\n')
- : val === null || val === false ? ''
- : String(val)
-
-const packageEnvs = (env, vals, prefix) => {
+const packageEnvs = (vals, prefix, env = {}) => {
for (const [key, val] of Object.entries(vals)) {
if (val === undefined) {
continue
- } else if (val && !Array.isArray(val) && typeof val === 'object') {
- packageEnvs(env, val, `${prefix}${key}_`)
+ } else if (val === null || val === false) {
+ env[`${prefix}${key}`] = ''
+ } else if (Array.isArray(val)) {
+ val.forEach((item, index) => {
+ packageEnvs({ [`${key}_${index}`]: item }, `${prefix}`, env)
+ })
+ } else if (typeof val === 'object') {
+ packageEnvs(val, `${prefix}${key}_`, env)
} else {
- env[`${prefix}${key}`] = envVal(val)
+ env[`${prefix}${key}`] = String(val)
}
}
return env
}
-module.exports = (env, pkg) => packageEnvs({ ...env }, {
- name: pkg.name,
- version: pkg.version,
- config: pkg.config,
- engines: pkg.engines,
- bin: pkg.bin,
-}, 'npm_package_')
+// https://github.com/npm/rfcs/pull/183 defines which fields we put into the environment
+module.exports = pkg => {
+ return packageEnvs({
+ name: pkg.name,
+ version: pkg.version,
+ config: pkg.config,
+ engines: pkg.engines,
+ bin: pkg.bin,
+ }, 'npm_package_')
+}
diff --git a/deps/npm/node_modules/@npmcli/run-script/lib/run-script-pkg.js b/deps/npm/node_modules/@npmcli/run-script/lib/run-script-pkg.js
index a5518285d1af1b..ea33db56298586 100644
--- a/deps/npm/node_modules/@npmcli/run-script/lib/run-script-pkg.js
+++ b/deps/npm/node_modules/@npmcli/run-script/lib/run-script-pkg.js
@@ -69,7 +69,7 @@ const runScriptPkg = async options => {
path,
scriptShell,
binPaths,
- env: packageEnvs(env, pkg),
+ env: { ...env, ...packageEnvs(pkg) },
stdio,
cmd,
args,
@@ -93,6 +93,8 @@ const runScriptPkg = async options => {
return p.catch(er => {
const { signal } = er
+ // coverage disabled because win32 never emits signals
+ /* istanbul ignore next */
if (stdio === 'inherit' && signal) {
// by the time we reach here, the child has already exited. we send the
// signal back to ourselves again so that npm will exit with the same
diff --git a/deps/npm/node_modules/@npmcli/run-script/lib/run-script.js b/deps/npm/node_modules/@npmcli/run-script/lib/run-script.js
index e9d18261a2c1fd..b00304c8d6e7f5 100644
--- a/deps/npm/node_modules/@npmcli/run-script/lib/run-script.js
+++ b/deps/npm/node_modules/@npmcli/run-script/lib/run-script.js
@@ -1,14 +1,15 @@
-const rpj = require('read-package-json-fast')
+const PackageJson = require('@npmcli/package-json')
const runScriptPkg = require('./run-script-pkg.js')
const validateOptions = require('./validate-options.js')
const isServerPackage = require('./is-server-package.js')
-const runScript = options => {
+const runScript = async options => {
validateOptions(options)
- const { pkg, path } = options
- return pkg ? runScriptPkg(options)
- : rpj(path + '/package.json')
- .then(readPackage => runScriptPkg({ ...options, pkg: readPackage }))
+ if (options.pkg) {
+ return runScriptPkg(options)
+ }
+ const { content: pkg } = await PackageJson.normalize(options.path)
+ return runScriptPkg({ ...options, pkg })
}
module.exports = Object.assign(runScript, { isServerPackage })
diff --git a/deps/npm/node_modules/@npmcli/run-script/package.json b/deps/npm/node_modules/@npmcli/run-script/package.json
index c090e52cf11278..1c98b1b170e265 100644
--- a/deps/npm/node_modules/@npmcli/run-script/package.json
+++ b/deps/npm/node_modules/@npmcli/run-script/package.json
@@ -1,6 +1,6 @@
{
"name": "@npmcli/run-script",
- "version": "7.0.3",
+ "version": "7.0.4",
"description": "Run a lifecycle script for a package (descendant of npm-lifecycle)",
"author": "GitHub Inc.",
"license": "ISC",
@@ -17,14 +17,14 @@
"devDependencies": {
"@npmcli/eslint-config": "^4.0.0",
"@npmcli/template-oss": "4.21.3",
- "require-inject": "^1.4.4",
+ "spawk": "^1.8.1",
"tap": "^16.0.1"
},
"dependencies": {
"@npmcli/node-gyp": "^3.0.0",
+ "@npmcli/package-json": "^5.0.0",
"@npmcli/promise-spawn": "^7.0.0",
"node-gyp": "^10.0.0",
- "read-package-json-fast": "^3.0.0",
"which": "^4.0.0"
},
"files": [
diff --git a/deps/npm/node_modules/@sigstore/bundle/dist/bundle.js b/deps/npm/node_modules/@sigstore/bundle/dist/bundle.js
index 8c01e2d19c5ecb..60574b309c09cb 100644
--- a/deps/npm/node_modules/@sigstore/bundle/dist/bundle.js
+++ b/deps/npm/node_modules/@sigstore/bundle/dist/bundle.js
@@ -1,8 +1,9 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
-exports.isBundleWithDsseEnvelope = exports.isBundleWithMessageSignature = exports.isBundleWithPublicKey = exports.isBundleWithCertificateChain = exports.BUNDLE_V02_MEDIA_TYPE = exports.BUNDLE_V01_MEDIA_TYPE = void 0;
+exports.isBundleWithDsseEnvelope = exports.isBundleWithMessageSignature = exports.isBundleWithPublicKey = exports.isBundleWithCertificateChain = exports.BUNDLE_V03_MEDIA_TYPE = exports.BUNDLE_V02_MEDIA_TYPE = exports.BUNDLE_V01_MEDIA_TYPE = void 0;
exports.BUNDLE_V01_MEDIA_TYPE = 'application/vnd.dev.sigstore.bundle+json;version=0.1';
exports.BUNDLE_V02_MEDIA_TYPE = 'application/vnd.dev.sigstore.bundle+json;version=0.2';
+exports.BUNDLE_V03_MEDIA_TYPE = 'application/vnd.dev.sigstore.bundle+json;version=0.3';
// Type guards for bundle variants.
function isBundleWithCertificateChain(b) {
return b.verificationMaterial.content.$case === 'x509CertificateChain';
diff --git a/deps/npm/node_modules/@sigstore/bundle/dist/index.js b/deps/npm/node_modules/@sigstore/bundle/dist/index.js
index b016a16d11cc00..f2b50994e9b1f5 100644
--- a/deps/npm/node_modules/@sigstore/bundle/dist/index.js
+++ b/deps/npm/node_modules/@sigstore/bundle/dist/index.js
@@ -1,6 +1,6 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
-exports.isBundleV01 = exports.assertBundleV01 = exports.assertBundleLatest = exports.assertBundle = exports.envelopeToJSON = exports.envelopeFromJSON = exports.bundleToJSON = exports.bundleFromJSON = exports.ValidationError = exports.isBundleWithPublicKey = exports.isBundleWithMessageSignature = exports.isBundleWithDsseEnvelope = exports.isBundleWithCertificateChain = exports.BUNDLE_V02_MEDIA_TYPE = exports.BUNDLE_V01_MEDIA_TYPE = exports.toMessageSignatureBundle = exports.toDSSEBundle = void 0;
+exports.isBundleV01 = exports.assertBundleV02 = exports.assertBundleV01 = exports.assertBundleLatest = exports.assertBundle = exports.envelopeToJSON = exports.envelopeFromJSON = exports.bundleToJSON = exports.bundleFromJSON = exports.ValidationError = exports.isBundleWithPublicKey = exports.isBundleWithMessageSignature = exports.isBundleWithDsseEnvelope = exports.isBundleWithCertificateChain = exports.BUNDLE_V03_MEDIA_TYPE = exports.BUNDLE_V02_MEDIA_TYPE = exports.BUNDLE_V01_MEDIA_TYPE = exports.toMessageSignatureBundle = exports.toDSSEBundle = void 0;
/*
Copyright 2023 The Sigstore Authors.
@@ -22,6 +22,7 @@ Object.defineProperty(exports, "toMessageSignatureBundle", { enumerable: true, g
var bundle_1 = require("./bundle");
Object.defineProperty(exports, "BUNDLE_V01_MEDIA_TYPE", { enumerable: true, get: function () { return bundle_1.BUNDLE_V01_MEDIA_TYPE; } });
Object.defineProperty(exports, "BUNDLE_V02_MEDIA_TYPE", { enumerable: true, get: function () { return bundle_1.BUNDLE_V02_MEDIA_TYPE; } });
+Object.defineProperty(exports, "BUNDLE_V03_MEDIA_TYPE", { enumerable: true, get: function () { return bundle_1.BUNDLE_V03_MEDIA_TYPE; } });
Object.defineProperty(exports, "isBundleWithCertificateChain", { enumerable: true, get: function () { return bundle_1.isBundleWithCertificateChain; } });
Object.defineProperty(exports, "isBundleWithDsseEnvelope", { enumerable: true, get: function () { return bundle_1.isBundleWithDsseEnvelope; } });
Object.defineProperty(exports, "isBundleWithMessageSignature", { enumerable: true, get: function () { return bundle_1.isBundleWithMessageSignature; } });
@@ -37,4 +38,5 @@ var validate_1 = require("./validate");
Object.defineProperty(exports, "assertBundle", { enumerable: true, get: function () { return validate_1.assertBundle; } });
Object.defineProperty(exports, "assertBundleLatest", { enumerable: true, get: function () { return validate_1.assertBundleLatest; } });
Object.defineProperty(exports, "assertBundleV01", { enumerable: true, get: function () { return validate_1.assertBundleV01; } });
+Object.defineProperty(exports, "assertBundleV02", { enumerable: true, get: function () { return validate_1.assertBundleV02; } });
Object.defineProperty(exports, "isBundleV01", { enumerable: true, get: function () { return validate_1.isBundleV01; } });
diff --git a/deps/npm/node_modules/@sigstore/bundle/dist/serialized.js b/deps/npm/node_modules/@sigstore/bundle/dist/serialized.js
index f1073358cacfd7..be0d2a2d54d092 100644
--- a/deps/npm/node_modules/@sigstore/bundle/dist/serialized.js
+++ b/deps/npm/node_modules/@sigstore/bundle/dist/serialized.js
@@ -17,10 +17,21 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
const protobuf_specs_1 = require("@sigstore/protobuf-specs");
+const bundle_1 = require("./bundle");
const validate_1 = require("./validate");
const bundleFromJSON = (obj) => {
const bundle = protobuf_specs_1.Bundle.fromJSON(obj);
- (0, validate_1.assertBundle)(bundle);
+ switch (bundle.mediaType) {
+ case bundle_1.BUNDLE_V01_MEDIA_TYPE:
+ (0, validate_1.assertBundleV01)(bundle);
+ break;
+ case bundle_1.BUNDLE_V02_MEDIA_TYPE:
+ (0, validate_1.assertBundleV02)(bundle);
+ break;
+ default:
+ (0, validate_1.assertBundleLatest)(bundle);
+ break;
+ }
return bundle;
};
exports.bundleFromJSON = bundleFromJSON;
diff --git a/deps/npm/node_modules/@sigstore/bundle/dist/validate.js b/deps/npm/node_modules/@sigstore/bundle/dist/validate.js
index 015b6dfc58dd73..6a59ecc230f4ac 100644
--- a/deps/npm/node_modules/@sigstore/bundle/dist/validate.js
+++ b/deps/npm/node_modules/@sigstore/bundle/dist/validate.js
@@ -1,6 +1,6 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
-exports.assertBundleLatest = exports.isBundleV01 = exports.assertBundleV01 = exports.assertBundle = void 0;
+exports.assertBundleLatest = exports.assertBundleV02 = exports.isBundleV01 = exports.assertBundleV01 = exports.assertBundle = void 0;
/*
Copyright 2023 The Sigstore Authors.
@@ -16,13 +16,61 @@ 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.
*/
-const bundle_1 = require("./bundle");
const error_1 = require("./error");
// Performs basic validation of a Sigstore bundle to ensure that all required
// fields are populated. This is not a complete validation of the bundle, but
// rather a check that the bundle is in a valid state to be processed by the
// rest of the code.
function assertBundle(b) {
+ const invalidValues = validateBundleBase(b);
+ if (invalidValues.length > 0) {
+ throw new error_1.ValidationError('invalid bundle', invalidValues);
+ }
+}
+exports.assertBundle = assertBundle;
+// Asserts that the given bundle conforms to the v0.1 bundle format.
+function assertBundleV01(b) {
+ const invalidValues = [];
+ invalidValues.push(...validateBundleBase(b));
+ invalidValues.push(...validateInclusionPromise(b));
+ if (invalidValues.length > 0) {
+ throw new error_1.ValidationError('invalid v0.1 bundle', invalidValues);
+ }
+}
+exports.assertBundleV01 = assertBundleV01;
+// Type guard to determine if Bundle is a v0.1 bundle.
+function isBundleV01(b) {
+ try {
+ assertBundleV01(b);
+ return true;
+ }
+ catch (e) {
+ return false;
+ }
+}
+exports.isBundleV01 = isBundleV01;
+// Asserts that the given bundle conforms to the v0.2 bundle format.
+function assertBundleV02(b) {
+ const invalidValues = [];
+ invalidValues.push(...validateBundleBase(b));
+ invalidValues.push(...validateInclusionProof(b));
+ if (invalidValues.length > 0) {
+ throw new error_1.ValidationError('invalid v0.2 bundle', invalidValues);
+ }
+}
+exports.assertBundleV02 = assertBundleV02;
+// Asserts that the given bundle conforms to the newest (0.3) bundle format.
+function assertBundleLatest(b) {
+ const invalidValues = [];
+ invalidValues.push(...validateBundleBase(b));
+ invalidValues.push(...validateInclusionProof(b));
+ invalidValues.push(...validateNoCertificateChain(b));
+ if (invalidValues.length > 0) {
+ throw new error_1.ValidationError('invalid bundle', invalidValues);
+ }
+}
+exports.assertBundleLatest = assertBundleLatest;
+function validateBundleBase(b) {
const invalidValues = [];
// Media type validation
if (b.mediaType === undefined ||
@@ -84,6 +132,11 @@ function assertBundle(b) {
}
});
break;
+ case 'certificate':
+ if (b.verificationMaterial.content.certificate.rawBytes.length === 0) {
+ invalidValues.push('verificationMaterial.content.certificate.rawBytes');
+ }
+ break;
}
}
if (b.verificationMaterial.tlogEntries === undefined) {
@@ -102,17 +155,11 @@ function assertBundle(b) {
}
}
}
- if (invalidValues.length > 0) {
- throw new error_1.ValidationError('invalid bundle', invalidValues);
- }
+ return invalidValues;
}
-exports.assertBundle = assertBundle;
-// Asserts that the given bundle conforms to the v0.1 bundle format.
-function assertBundleV01(b) {
+// Necessary for V01 bundles
+function validateInclusionPromise(b) {
const invalidValues = [];
- if (b.mediaType && b.mediaType !== bundle_1.BUNDLE_V01_MEDIA_TYPE) {
- invalidValues.push('mediaType');
- }
if (b.verificationMaterial &&
b.verificationMaterial.tlogEntries?.length > 0) {
b.verificationMaterial.tlogEntries.forEach((entry, i) => {
@@ -121,24 +168,10 @@ function assertBundleV01(b) {
}
});
}
- if (invalidValues.length > 0) {
- throw new error_1.ValidationError('invalid v0.1 bundle', invalidValues);
- }
+ return invalidValues;
}
-exports.assertBundleV01 = assertBundleV01;
-// Type guard to determine if Bundle is a v0.1 bundle.
-function isBundleV01(b) {
- try {
- assertBundleV01(b);
- return true;
- }
- catch (e) {
- return false;
- }
-}
-exports.isBundleV01 = isBundleV01;
-// Asserts that the given bundle conforms to the newest (0.2) bundle format.
-function assertBundleLatest(b) {
+// Necessary for V02 and later bundles
+function validateInclusionProof(b) {
const invalidValues = [];
if (b.verificationMaterial &&
b.verificationMaterial.tlogEntries?.length > 0) {
@@ -153,8 +186,13 @@ function assertBundleLatest(b) {
}
});
}
- if (invalidValues.length > 0) {
- throw new error_1.ValidationError('invalid v0.2 bundle', invalidValues);
+ return invalidValues;
+}
+// Necessary for V03 and later bundles
+function validateNoCertificateChain(b) {
+ const invalidValues = [];
+ if (b.verificationMaterial?.content?.$case === 'x509CertificateChain') {
+ invalidValues.push('verificationMaterial.content.$case');
}
+ return invalidValues;
}
-exports.assertBundleLatest = assertBundleLatest;
diff --git a/deps/npm/node_modules/@sigstore/bundle/package.json b/deps/npm/node_modules/@sigstore/bundle/package.json
index 7e26efa11a21de..2cac185f73895b 100644
--- a/deps/npm/node_modules/@sigstore/bundle/package.json
+++ b/deps/npm/node_modules/@sigstore/bundle/package.json
@@ -1,6 +1,6 @@
{
"name": "@sigstore/bundle",
- "version": "2.1.0",
+ "version": "2.2.0",
"description": "Sigstore bundle type",
"main": "dist/index.js",
"types": "dist/index.d.ts",
@@ -27,7 +27,7 @@
"provenance": true
},
"dependencies": {
- "@sigstore/protobuf-specs": "^0.2.1"
+ "@sigstore/protobuf-specs": "^0.3.0"
},
"engines": {
"node": "^16.14.0 || >=18.0.0"
diff --git a/deps/npm/node_modules/@sigstore/core/LICENSE b/deps/npm/node_modules/@sigstore/core/LICENSE
new file mode 100644
index 00000000000000..e9e7c1679a09df
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/core/LICENSE
@@ -0,0 +1,202 @@
+
+ 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 2023 The Sigstore 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.
diff --git a/deps/npm/node_modules/sigstore/dist/util/asn1/error.js b/deps/npm/node_modules/@sigstore/core/dist/asn1/error.js
similarity index 100%
rename from deps/npm/node_modules/sigstore/dist/util/asn1/error.js
rename to deps/npm/node_modules/@sigstore/core/dist/asn1/error.js
diff --git a/deps/npm/node_modules/sigstore/dist/util/asn1/index.js b/deps/npm/node_modules/@sigstore/core/dist/asn1/index.js
similarity index 100%
rename from deps/npm/node_modules/sigstore/dist/util/asn1/index.js
rename to deps/npm/node_modules/@sigstore/core/dist/asn1/index.js
diff --git a/deps/npm/node_modules/sigstore/dist/util/asn1/length.js b/deps/npm/node_modules/@sigstore/core/dist/asn1/length.js
similarity index 100%
rename from deps/npm/node_modules/sigstore/dist/util/asn1/length.js
rename to deps/npm/node_modules/@sigstore/core/dist/asn1/length.js
diff --git a/deps/npm/node_modules/sigstore/dist/util/asn1/obj.js b/deps/npm/node_modules/@sigstore/core/dist/asn1/obj.js
similarity index 100%
rename from deps/npm/node_modules/sigstore/dist/util/asn1/obj.js
rename to deps/npm/node_modules/@sigstore/core/dist/asn1/obj.js
diff --git a/deps/npm/node_modules/sigstore/dist/util/asn1/parse.js b/deps/npm/node_modules/@sigstore/core/dist/asn1/parse.js
similarity index 99%
rename from deps/npm/node_modules/sigstore/dist/util/asn1/parse.js
rename to deps/npm/node_modules/@sigstore/core/dist/asn1/parse.js
index ad50a8f1abdc27..482c7239e83162 100644
--- a/deps/npm/node_modules/sigstore/dist/util/asn1/parse.js
+++ b/deps/npm/node_modules/@sigstore/core/dist/asn1/parse.js
@@ -16,8 +16,8 @@ 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.
*/
-const RE_TIME_SHORT_YEAR = /^(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})Z$/;
-const RE_TIME_LONG_YEAR = /^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})Z$/;
+const RE_TIME_SHORT_YEAR = /^(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\.\d{3})?Z$/;
+const RE_TIME_LONG_YEAR = /^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\.\d{3})?Z$/;
// Parse a BigInt from the DER-encoded buffer
// https://learn.microsoft.com/en-us/windows/win32/seccertenroll/about-integer
function parseInteger(buf) {
diff --git a/deps/npm/node_modules/sigstore/dist/util/asn1/tag.js b/deps/npm/node_modules/@sigstore/core/dist/asn1/tag.js
similarity index 76%
rename from deps/npm/node_modules/sigstore/dist/util/asn1/tag.js
rename to deps/npm/node_modules/@sigstore/core/dist/asn1/tag.js
index ecd4fd05362bb3..84dd938d049aa5 100644
--- a/deps/npm/node_modules/sigstore/dist/util/asn1/tag.js
+++ b/deps/npm/node_modules/@sigstore/core/dist/asn1/tag.js
@@ -1,6 +1,6 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
-exports.ASN1Tag = exports.UNIVERSAL_TAG = void 0;
+exports.ASN1Tag = void 0;
/*
Copyright 2023 The Sigstore Authors.
@@ -17,7 +17,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
const error_1 = require("./error");
-exports.UNIVERSAL_TAG = {
+const UNIVERSAL_TAG = {
BOOLEAN: 0x01,
INTEGER: 0x02,
BIT_STRING: 0x03,
@@ -59,25 +59,25 @@ class ASN1Tag {
return num !== undefined ? res && this.number === num : res;
}
isBoolean() {
- return this.isUniversal() && this.number === exports.UNIVERSAL_TAG.BOOLEAN;
+ return this.isUniversal() && this.number === UNIVERSAL_TAG.BOOLEAN;
}
isInteger() {
- return this.isUniversal() && this.number === exports.UNIVERSAL_TAG.INTEGER;
+ return this.isUniversal() && this.number === UNIVERSAL_TAG.INTEGER;
}
isBitString() {
- return this.isUniversal() && this.number === exports.UNIVERSAL_TAG.BIT_STRING;
+ return this.isUniversal() && this.number === UNIVERSAL_TAG.BIT_STRING;
}
isOctetString() {
- return this.isUniversal() && this.number === exports.UNIVERSAL_TAG.OCTET_STRING;
+ return this.isUniversal() && this.number === UNIVERSAL_TAG.OCTET_STRING;
}
isOID() {
- return (this.isUniversal() && this.number === exports.UNIVERSAL_TAG.OBJECT_IDENTIFIER);
+ return (this.isUniversal() && this.number === UNIVERSAL_TAG.OBJECT_IDENTIFIER);
}
isUTCTime() {
- return this.isUniversal() && this.number === exports.UNIVERSAL_TAG.UTC_TIME;
+ return this.isUniversal() && this.number === UNIVERSAL_TAG.UTC_TIME;
}
isGeneralizedTime() {
- return this.isUniversal() && this.number === exports.UNIVERSAL_TAG.GENERALIZED_TIME;
+ return this.isUniversal() && this.number === UNIVERSAL_TAG.GENERALIZED_TIME;
}
toDER() {
return this.number | (this.constructed ? 0x20 : 0x00) | (this.class << 6);
diff --git a/deps/npm/node_modules/sigstore/dist/util/crypto.js b/deps/npm/node_modules/@sigstore/core/dist/crypto.js
similarity index 74%
rename from deps/npm/node_modules/sigstore/dist/util/crypto.js
rename to deps/npm/node_modules/@sigstore/core/dist/crypto.js
index c26de091ecdb62..c5d899d003e1d4 100644
--- a/deps/npm/node_modules/sigstore/dist/util/crypto.js
+++ b/deps/npm/node_modules/@sigstore/core/dist/crypto.js
@@ -3,9 +3,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
-exports.bufferEqual = exports.randomBytes = exports.hash = exports.verifyBlob = exports.createPublicKey = void 0;
+exports.bufferEqual = exports.verify = exports.hash = exports.digest = exports.createPublicKey = void 0;
/*
-Copyright 2022 The Sigstore Authors.
+Copyright 2023 The Sigstore Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -30,7 +30,24 @@ function createPublicKey(key) {
}
}
exports.createPublicKey = createPublicKey;
-function verifyBlob(data, key, signature, algorithm) {
+function digest(algorithm, ...data) {
+ const hash = crypto_1.default.createHash(algorithm);
+ for (const d of data) {
+ hash.update(d);
+ }
+ return hash.digest();
+}
+exports.digest = digest;
+// TODO: deprecate this in favor of digest()
+function hash(...data) {
+ const hash = crypto_1.default.createHash(SHA256_ALGORITHM);
+ for (const d of data) {
+ hash.update(d);
+ }
+ return hash.digest();
+}
+exports.hash = hash;
+function verify(data, key, signature, algorithm) {
// The try/catch is to work around an issue in Node 14.x where verify throws
// an error in some scenarios if the signature is invalid.
try {
@@ -41,16 +58,7 @@ function verifyBlob(data, key, signature, algorithm) {
return false;
}
}
-exports.verifyBlob = verifyBlob;
-function hash(data) {
- const hash = crypto_1.default.createHash(SHA256_ALGORITHM);
- return hash.update(data).digest();
-}
-exports.hash = hash;
-function randomBytes(count) {
- return crypto_1.default.randomBytes(count);
-}
-exports.randomBytes = randomBytes;
+exports.verify = verify;
function bufferEqual(a, b) {
try {
return crypto_1.default.timingSafeEqual(a, b);
diff --git a/deps/npm/node_modules/@sigstore/sign/dist/util/dsse.js b/deps/npm/node_modules/@sigstore/core/dist/dsse.js
similarity index 79%
rename from deps/npm/node_modules/@sigstore/sign/dist/util/dsse.js
rename to deps/npm/node_modules/@sigstore/core/dist/dsse.js
index befcdbdc14ec81..a78783c919a256 100644
--- a/deps/npm/node_modules/@sigstore/sign/dist/util/dsse.js
+++ b/deps/npm/node_modules/@sigstore/core/dist/dsse.js
@@ -19,7 +19,13 @@ limitations under the License.
const PAE_PREFIX = 'DSSEv1';
// DSSE Pre-Authentication Encoding
function preAuthEncoding(payloadType, payload) {
- const prefix = Buffer.from(`${PAE_PREFIX} ${payloadType.length} ${payloadType} ${payload.length} `, 'ascii');
- return Buffer.concat([prefix, payload]);
+ const prefix = [
+ PAE_PREFIX,
+ payloadType.length,
+ payloadType,
+ payload.length,
+ '',
+ ].join(' ');
+ return Buffer.concat([Buffer.from(prefix, 'ascii'), payload]);
}
exports.preAuthEncoding = preAuthEncoding;
diff --git a/deps/npm/node_modules/@sigstore/sign/dist/util/encoding.js b/deps/npm/node_modules/@sigstore/core/dist/encoding.js
similarity index 100%
rename from deps/npm/node_modules/@sigstore/sign/dist/util/encoding.js
rename to deps/npm/node_modules/@sigstore/core/dist/encoding.js
diff --git a/deps/npm/node_modules/sigstore/dist/util/index.js b/deps/npm/node_modules/@sigstore/core/dist/index.js
similarity index 62%
rename from deps/npm/node_modules/sigstore/dist/util/index.js
rename to deps/npm/node_modules/@sigstore/core/dist/index.js
index ff4cec375af8f8..ac35e86a8df7d0 100644
--- a/deps/npm/node_modules/sigstore/dist/util/index.js
+++ b/deps/npm/node_modules/@sigstore/core/dist/index.js
@@ -23,9 +23,9 @@ var __importStar = (this && this.__importStar) || function (mod) {
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
-exports.pem = exports.json = exports.encoding = exports.dsse = exports.crypto = exports.asn1 = void 0;
+exports.X509SCTExtension = exports.X509Certificate = exports.EXTENSION_OID_SCT = exports.ByteStream = exports.RFC3161Timestamp = exports.pem = exports.json = exports.encoding = exports.dsse = exports.crypto = exports.ASN1Obj = void 0;
/*
-Copyright 2022 The Sigstore Authors.
+Copyright 2023 The Sigstore Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -39,9 +39,18 @@ 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.
*/
-exports.asn1 = __importStar(require("./asn1"));
+var asn1_1 = require("./asn1");
+Object.defineProperty(exports, "ASN1Obj", { enumerable: true, get: function () { return asn1_1.ASN1Obj; } });
exports.crypto = __importStar(require("./crypto"));
exports.dsse = __importStar(require("./dsse"));
exports.encoding = __importStar(require("./encoding"));
exports.json = __importStar(require("./json"));
exports.pem = __importStar(require("./pem"));
+var rfc3161_1 = require("./rfc3161");
+Object.defineProperty(exports, "RFC3161Timestamp", { enumerable: true, get: function () { return rfc3161_1.RFC3161Timestamp; } });
+var stream_1 = require("./stream");
+Object.defineProperty(exports, "ByteStream", { enumerable: true, get: function () { return stream_1.ByteStream; } });
+var x509_1 = require("./x509");
+Object.defineProperty(exports, "EXTENSION_OID_SCT", { enumerable: true, get: function () { return x509_1.EXTENSION_OID_SCT; } });
+Object.defineProperty(exports, "X509Certificate", { enumerable: true, get: function () { return x509_1.X509Certificate; } });
+Object.defineProperty(exports, "X509SCTExtension", { enumerable: true, get: function () { return x509_1.X509SCTExtension; } });
diff --git a/deps/npm/node_modules/sigstore/dist/util/json.js b/deps/npm/node_modules/@sigstore/core/dist/json.js
similarity index 100%
rename from deps/npm/node_modules/sigstore/dist/util/json.js
rename to deps/npm/node_modules/@sigstore/core/dist/json.js
index 69176ad731eb78..a50df7233c7c58 100644
--- a/deps/npm/node_modules/sigstore/dist/util/json.js
+++ b/deps/npm/node_modules/@sigstore/core/dist/json.js
@@ -1,6 +1,4 @@
"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.canonicalize = void 0;
/*
Copyright 2023 The Sigstore Authors.
@@ -16,6 +14,8 @@ 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.
*/
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.canonicalize = void 0;
// JSON canonicalization per https://github.com/cyberphone/json-canonicalization
// eslint-disable-next-line @typescript-eslint/no-explicit-any
function canonicalize(object) {
diff --git a/deps/npm/node_modules/@sigstore/core/dist/oid.js b/deps/npm/node_modules/@sigstore/core/dist/oid.js
new file mode 100644
index 00000000000000..ac7a643067ad02
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/core/dist/oid.js
@@ -0,0 +1,14 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.SHA2_HASH_ALGOS = exports.ECDSA_SIGNATURE_ALGOS = void 0;
+exports.ECDSA_SIGNATURE_ALGOS = {
+ '1.2.840.10045.4.3.1': 'sha224',
+ '1.2.840.10045.4.3.2': 'sha256',
+ '1.2.840.10045.4.3.3': 'sha384',
+ '1.2.840.10045.4.3.4': 'sha512',
+};
+exports.SHA2_HASH_ALGOS = {
+ '2.16.840.1.101.3.4.2.1': 'sha256',
+ '2.16.840.1.101.3.4.2.2': 'sha384',
+ '2.16.840.1.101.3.4.2.3': 'sha512',
+};
diff --git a/deps/npm/node_modules/sigstore/dist/util/pem.js b/deps/npm/node_modules/@sigstore/core/dist/pem.js
similarity index 97%
rename from deps/npm/node_modules/sigstore/dist/util/pem.js
rename to deps/npm/node_modules/@sigstore/core/dist/pem.js
index 8b03b364cd7efb..f35bc3835bbd10 100644
--- a/deps/npm/node_modules/sigstore/dist/util/pem.js
+++ b/deps/npm/node_modules/@sigstore/core/dist/pem.js
@@ -2,7 +2,7 @@
Object.defineProperty(exports, "__esModule", { value: true });
exports.fromDER = exports.toDER = void 0;
/*
-Copyright 2022 The Sigstore Authors.
+Copyright 2023 The Sigstore Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/deps/npm/node_modules/sigstore/dist/types/utility.js b/deps/npm/node_modules/@sigstore/core/dist/rfc3161/error.js
similarity index 72%
rename from deps/npm/node_modules/sigstore/dist/types/utility.js
rename to deps/npm/node_modules/@sigstore/core/dist/rfc3161/error.js
index 77c91b1923ca08..b9b549b0bb3235 100644
--- a/deps/npm/node_modules/sigstore/dist/types/utility.js
+++ b/deps/npm/node_modules/@sigstore/core/dist/rfc3161/error.js
@@ -1,6 +1,8 @@
"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.RFC3161TimestampVerificationError = void 0;
/*
-Copyright 2022 The Sigstore Authors.
+Copyright 2023 The Sigstore Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,4 +16,6 @@ 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.
*/
-Object.defineProperty(exports, "__esModule", { value: true });
+class RFC3161TimestampVerificationError extends Error {
+}
+exports.RFC3161TimestampVerificationError = RFC3161TimestampVerificationError;
diff --git a/deps/npm/node_modules/@sigstore/sign/dist/util/pem.js b/deps/npm/node_modules/@sigstore/core/dist/rfc3161/index.js
similarity index 64%
rename from deps/npm/node_modules/@sigstore/sign/dist/util/pem.js
rename to deps/npm/node_modules/@sigstore/core/dist/rfc3161/index.js
index 36eeebd2052f5e..b77ecf1c7d50c2 100644
--- a/deps/npm/node_modules/@sigstore/sign/dist/util/pem.js
+++ b/deps/npm/node_modules/@sigstore/core/dist/rfc3161/index.js
@@ -1,6 +1,4 @@
"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.toDER = void 0;
/*
Copyright 2023 The Sigstore Authors.
@@ -16,12 +14,7 @@ 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.
*/
-const PEM_HEADER = /-----BEGIN (.*)-----/;
-const PEM_FOOTER = /-----END (.*)-----/;
-function toDER(certificate) {
- const lines = certificate
- .split('\n')
- .map((line) => line.match(PEM_HEADER) || line.match(PEM_FOOTER) ? '' : line);
- return Buffer.from(lines.join(''), 'base64');
-}
-exports.toDER = toDER;
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.RFC3161Timestamp = void 0;
+var timestamp_1 = require("./timestamp");
+Object.defineProperty(exports, "RFC3161Timestamp", { enumerable: true, get: function () { return timestamp_1.RFC3161Timestamp; } });
diff --git a/deps/npm/node_modules/@sigstore/core/dist/rfc3161/timestamp.js b/deps/npm/node_modules/@sigstore/core/dist/rfc3161/timestamp.js
new file mode 100644
index 00000000000000..3e61fc1a4e1692
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/core/dist/rfc3161/timestamp.js
@@ -0,0 +1,201 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.RFC3161Timestamp = void 0;
+/*
+Copyright 2023 The Sigstore 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.
+*/
+const asn1_1 = require("../asn1");
+const crypto = __importStar(require("../crypto"));
+const oid_1 = require("../oid");
+const error_1 = require("./error");
+const tstinfo_1 = require("./tstinfo");
+const OID_PKCS9_CONTENT_TYPE_SIGNED_DATA = '1.2.840.113549.1.7.2';
+const OID_PKCS9_CONTENT_TYPE_TSTINFO = '1.2.840.113549.1.9.16.1.4';
+const OID_PKCS9_MESSAGE_DIGEST_KEY = '1.2.840.113549.1.9.4';
+class RFC3161Timestamp {
+ constructor(asn1) {
+ this.root = asn1;
+ }
+ static parse(der) {
+ const asn1 = asn1_1.ASN1Obj.parseBuffer(der);
+ return new RFC3161Timestamp(asn1);
+ }
+ get status() {
+ return this.pkiStatusInfoObj.subs[0].toInteger();
+ }
+ get contentType() {
+ return this.contentTypeObj.toOID();
+ }
+ get eContentType() {
+ return this.eContentTypeObj.toOID();
+ }
+ get signingTime() {
+ return this.tstInfo.genTime;
+ }
+ get signerIssuer() {
+ return this.signerSidObj.subs[0].value;
+ }
+ get signerSerialNumber() {
+ return this.signerSidObj.subs[1].value;
+ }
+ get signerDigestAlgorithm() {
+ const oid = this.signerDigestAlgorithmObj.subs[0].toOID();
+ return oid_1.SHA2_HASH_ALGOS[oid];
+ }
+ get signatureAlgorithm() {
+ const oid = this.signatureAlgorithmObj.subs[0].toOID();
+ return oid_1.ECDSA_SIGNATURE_ALGOS[oid];
+ }
+ get signatureValue() {
+ return this.signatureValueObj.value;
+ }
+ get tstInfo() {
+ // Need to unpack tstInfo from an OCTET STRING
+ return new tstinfo_1.TSTInfo(this.eContentObj.subs[0].subs[0]);
+ }
+ verify(data, publicKey) {
+ if (!this.timeStampTokenObj) {
+ throw new error_1.RFC3161TimestampVerificationError('timeStampToken is missing');
+ }
+ // Check for expected ContentInfo content type
+ if (this.contentType !== OID_PKCS9_CONTENT_TYPE_SIGNED_DATA) {
+ throw new error_1.RFC3161TimestampVerificationError(`incorrect content type: ${this.contentType}`);
+ }
+ // Check for expected encapsulated content type
+ if (this.eContentType !== OID_PKCS9_CONTENT_TYPE_TSTINFO) {
+ throw new error_1.RFC3161TimestampVerificationError(`incorrect encapsulated content type: ${this.eContentType}`);
+ }
+ // Check that the tstInfo references the correct artifact
+ this.tstInfo.verify(data);
+ // Check that the signed message digest matches the tstInfo
+ this.verifyMessageDigest();
+ // Check that the signature is valid for the signed attributes
+ this.verifySignature(publicKey);
+ }
+ verifyMessageDigest() {
+ // Check that the tstInfo matches the signed data
+ const tstInfoDigest = crypto.digest(this.signerDigestAlgorithm, this.tstInfo.raw);
+ const expectedDigest = this.messageDigestAttributeObj.subs[1].subs[0].value;
+ if (!crypto.bufferEqual(tstInfoDigest, expectedDigest)) {
+ throw new error_1.RFC3161TimestampVerificationError('signed data does not match tstInfo');
+ }
+ }
+ verifySignature(key) {
+ // Encode the signed attributes for verification
+ const signedAttrs = this.signedAttrsObj.toDER();
+ signedAttrs[0] = 0x31; // Change context-specific tag to SET
+ // Check that the signature is valid for the signed attributes
+ const verified = crypto.verify(signedAttrs, key, this.signatureValue, this.signatureAlgorithm);
+ if (!verified) {
+ throw new error_1.RFC3161TimestampVerificationError('signature verification failed');
+ }
+ }
+ // https://www.rfc-editor.org/rfc/rfc3161#section-2.4.2
+ get pkiStatusInfoObj() {
+ // pkiStatusInfo is the first element of the timestamp response sequence
+ return this.root.subs[0];
+ }
+ // https://www.rfc-editor.org/rfc/rfc3161#section-2.4.2
+ get timeStampTokenObj() {
+ // timeStampToken is the first element of the timestamp response sequence
+ return this.root.subs[1];
+ }
+ // https://datatracker.ietf.org/doc/html/rfc5652#section-3
+ get contentTypeObj() {
+ return this.timeStampTokenObj.subs[0];
+ }
+ // https://www.rfc-editor.org/rfc/rfc5652#section-3
+ get signedDataObj() {
+ const obj = this.timeStampTokenObj.subs.find((sub) => sub.tag.isContextSpecific(0x00));
+ return obj.subs[0];
+ }
+ // https://datatracker.ietf.org/doc/html/rfc5652#section-5.1
+ get encapContentInfoObj() {
+ return this.signedDataObj.subs[2];
+ }
+ // https://datatracker.ietf.org/doc/html/rfc5652#section-5.1
+ get signerInfosObj() {
+ // SignerInfos is the last element of the signed data sequence
+ const sd = this.signedDataObj;
+ return sd.subs[sd.subs.length - 1];
+ }
+ // https://www.rfc-editor.org/rfc/rfc5652#section-5.1
+ get signerInfoObj() {
+ // Only supporting one signer
+ return this.signerInfosObj.subs[0];
+ }
+ // https://datatracker.ietf.org/doc/html/rfc5652#section-5.2
+ get eContentTypeObj() {
+ return this.encapContentInfoObj.subs[0];
+ }
+ // https://datatracker.ietf.org/doc/html/rfc5652#section-5.2
+ get eContentObj() {
+ return this.encapContentInfoObj.subs[1];
+ }
+ // https://datatracker.ietf.org/doc/html/rfc5652#section-5.3
+ get signedAttrsObj() {
+ const signedAttrs = this.signerInfoObj.subs.find((sub) => sub.tag.isContextSpecific(0x00));
+ return signedAttrs;
+ }
+ // https://datatracker.ietf.org/doc/html/rfc5652#section-5.3
+ get messageDigestAttributeObj() {
+ const messageDigest = this.signedAttrsObj.subs.find((sub) => sub.subs[0].tag.isOID() &&
+ sub.subs[0].toOID() === OID_PKCS9_MESSAGE_DIGEST_KEY);
+ return messageDigest;
+ }
+ // https://datatracker.ietf.org/doc/html/rfc5652#section-5.3
+ get signerSidObj() {
+ return this.signerInfoObj.subs[1];
+ }
+ // https://datatracker.ietf.org/doc/html/rfc5652#section-5.3
+ get signerDigestAlgorithmObj() {
+ // Signature is the 2nd element of the signerInfoObj object
+ return this.signerInfoObj.subs[2];
+ }
+ // https://datatracker.ietf.org/doc/html/rfc5652#section-5.3
+ get signatureAlgorithmObj() {
+ // Signature is the 4th element of the signerInfoObj object
+ return this.signerInfoObj.subs[4];
+ }
+ // https://datatracker.ietf.org/doc/html/rfc5652#section-5.3
+ get signatureValueObj() {
+ // Signature is the 6th element of the signerInfoObj object
+ return this.signerInfoObj.subs[5];
+ }
+}
+exports.RFC3161Timestamp = RFC3161Timestamp;
diff --git a/deps/npm/node_modules/@sigstore/core/dist/rfc3161/tstinfo.js b/deps/npm/node_modules/@sigstore/core/dist/rfc3161/tstinfo.js
new file mode 100644
index 00000000000000..dc8e4fb339383c
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/core/dist/rfc3161/tstinfo.js
@@ -0,0 +1,61 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.TSTInfo = void 0;
+const crypto = __importStar(require("../crypto"));
+const oid_1 = require("../oid");
+const error_1 = require("./error");
+class TSTInfo {
+ constructor(asn1) {
+ this.root = asn1;
+ }
+ get version() {
+ return this.root.subs[0].toInteger();
+ }
+ get genTime() {
+ return this.root.subs[4].toDate();
+ }
+ get messageImprintHashAlgorithm() {
+ const oid = this.messageImprintObj.subs[0].subs[0].toOID();
+ return oid_1.SHA2_HASH_ALGOS[oid];
+ }
+ get messageImprintHashedMessage() {
+ return this.messageImprintObj.subs[1].value;
+ }
+ get raw() {
+ return this.root.toDER();
+ }
+ verify(data) {
+ const digest = crypto.digest(this.messageImprintHashAlgorithm, data);
+ if (!crypto.bufferEqual(digest, this.messageImprintHashedMessage)) {
+ throw new error_1.RFC3161TimestampVerificationError('message imprint does not match artifact');
+ }
+ }
+ // https://www.rfc-editor.org/rfc/rfc3161#section-2.4.2
+ get messageImprintObj() {
+ return this.root.subs[2];
+ }
+}
+exports.TSTInfo = TSTInfo;
diff --git a/deps/npm/node_modules/sigstore/dist/util/stream.js b/deps/npm/node_modules/@sigstore/core/dist/stream.js
similarity index 97%
rename from deps/npm/node_modules/sigstore/dist/util/stream.js
rename to deps/npm/node_modules/@sigstore/core/dist/stream.js
index b5c881bb388d43..0a24f8582eb23a 100644
--- a/deps/npm/node_modules/sigstore/dist/util/stream.js
+++ b/deps/npm/node_modules/@sigstore/core/dist/stream.js
@@ -1,6 +1,6 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
-exports.ByteStream = exports.StreamError = void 0;
+exports.ByteStream = void 0;
/*
Copyright 2023 The Sigstore Authors.
@@ -18,7 +18,6 @@ limitations under the License.
*/
class StreamError extends Error {
}
-exports.StreamError = StreamError;
class ByteStream {
constructor(buffer) {
this.start = 0;
diff --git a/deps/npm/node_modules/sigstore/dist/x509/cert.js b/deps/npm/node_modules/@sigstore/core/dist/x509/cert.js
similarity index 56%
rename from deps/npm/node_modules/sigstore/dist/x509/cert.js
rename to deps/npm/node_modules/@sigstore/core/dist/x509/cert.js
index ec14b5f47369da..16c0c40d858d8a 100644
--- a/deps/npm/node_modules/sigstore/dist/x509/cert.js
+++ b/deps/npm/node_modules/@sigstore/core/dist/x509/cert.js
@@ -1,40 +1,63 @@
"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
Object.defineProperty(exports, "__esModule", { value: true });
-exports.x509Certificate = void 0;
-const util_1 = require("../util");
-const asn1_1 = require("../util/asn1");
-const stream_1 = require("../util/stream");
+exports.X509Certificate = exports.EXTENSION_OID_SCT = void 0;
+/*
+Copyright 2023 The Sigstore 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.
+*/
+const asn1_1 = require("../asn1");
+const crypto = __importStar(require("../crypto"));
+const oid_1 = require("../oid");
+const pem = __importStar(require("../pem"));
const ext_1 = require("./ext");
const EXTENSION_OID_SUBJECT_KEY_ID = '2.5.29.14';
const EXTENSION_OID_KEY_USAGE = '2.5.29.15';
const EXTENSION_OID_SUBJECT_ALT_NAME = '2.5.29.17';
const EXTENSION_OID_BASIC_CONSTRAINTS = '2.5.29.19';
const EXTENSION_OID_AUTHORITY_KEY_ID = '2.5.29.35';
-const EXTENSION_OID_SCT = '1.3.6.1.4.1.11129.2.4.2';
-// List of recognized critical extensions
-// https://www.rfc-editor.org/rfc/rfc5280#section-4.2
-const RECOGNIZED_EXTENSIONS = [
- EXTENSION_OID_KEY_USAGE,
- EXTENSION_OID_BASIC_CONSTRAINTS,
- EXTENSION_OID_SUBJECT_ALT_NAME,
-];
-const ECDSA_SIGNATURE_ALGOS = {
- '1.2.840.10045.4.3.1': 'sha224',
- '1.2.840.10045.4.3.2': 'sha256',
- '1.2.840.10045.4.3.3': 'sha384',
- '1.2.840.10045.4.3.4': 'sha512',
-};
-class x509Certificate {
+exports.EXTENSION_OID_SCT = '1.3.6.1.4.1.11129.2.4.2';
+class X509Certificate {
constructor(asn1) {
this.root = asn1;
- if (!this.checkRecognizedExtensions()) {
- throw new Error('Certificate contains unrecognized critical extensions');
- }
}
static parse(cert) {
- const der = typeof cert === 'string' ? util_1.pem.toDER(cert) : cert;
+ const der = typeof cert === 'string' ? pem.toDER(cert) : cert;
const asn1 = asn1_1.ASN1Obj.parseBuffer(der);
- return new x509Certificate(asn1);
+ return new X509Certificate(asn1);
}
get tbsCertificate() {
return this.tbsCertificateObj;
@@ -44,6 +67,9 @@ class x509Certificate {
const ver = this.versionObj.subs[0].toInteger();
return `v${(ver + BigInt(1)).toString()}`;
}
+ get serialNumber() {
+ return this.serialNumberObj.value;
+ }
get notBefore() {
// notBefore is the first element of the validity sequence
return this.validityObj.subs[0].toDate();
@@ -63,41 +89,47 @@ class x509Certificate {
}
get signatureAlgorithm() {
const oid = this.signatureAlgorithmObj.subs[0].toOID();
- return ECDSA_SIGNATURE_ALGOS[oid];
+ return oid_1.ECDSA_SIGNATURE_ALGOS[oid];
}
get signatureValue() {
// Signature value is a bit string, so we need to skip the first byte
return this.signatureValueObj.value.subarray(1);
}
+ get subjectAltName() {
+ const ext = this.extSubjectAltName;
+ return ext?.uri || ext?.rfc822Name;
+ }
get extensions() {
// The extension list is the first (and only) element of the extensions
// context specific tag
const extSeq = this.extensionsObj?.subs[0];
- return extSeq?.subs || [];
+ return extSeq?.subs || /* istanbul ignore next */ [];
}
get extKeyUsage() {
const ext = this.findExtension(EXTENSION_OID_KEY_USAGE);
- return ext ? new ext_1.x509KeyUsageExtension(ext) : undefined;
+ return ext ? new ext_1.X509KeyUsageExtension(ext) : undefined;
}
get extBasicConstraints() {
const ext = this.findExtension(EXTENSION_OID_BASIC_CONSTRAINTS);
- return ext ? new ext_1.x509BasicConstraintsExtension(ext) : undefined;
+ return ext ? new ext_1.X509BasicConstraintsExtension(ext) : undefined;
}
get extSubjectAltName() {
const ext = this.findExtension(EXTENSION_OID_SUBJECT_ALT_NAME);
- return ext ? new ext_1.x509SubjectAlternativeNameExtension(ext) : undefined;
+ return ext ? new ext_1.X509SubjectAlternativeNameExtension(ext) : undefined;
}
get extAuthorityKeyID() {
const ext = this.findExtension(EXTENSION_OID_AUTHORITY_KEY_ID);
- return ext ? new ext_1.x509AuthorityKeyIDExtension(ext) : undefined;
+ return ext ? new ext_1.X509AuthorityKeyIDExtension(ext) : undefined;
}
get extSubjectKeyID() {
const ext = this.findExtension(EXTENSION_OID_SUBJECT_KEY_ID);
- return ext ? new ext_1.x509SubjectKeyIDExtension(ext) : undefined;
+ return ext
+ ? new ext_1.X509SubjectKeyIDExtension(ext)
+ : /* istanbul ignore next */ undefined;
}
get extSCT() {
- const ext = this.findExtension(EXTENSION_OID_SCT);
- return ext ? new ext_1.x509SCTExtension(ext) : undefined;
+ const ext = this.findExtension(exports.EXTENSION_OID_SCT);
+ return ext ? new ext_1.X509SCTExtension(ext) : undefined;
}
get isCA() {
const ca = this.extBasicConstraints?.isCA || false;
@@ -109,13 +141,13 @@ class x509Certificate {
}
extension(oid) {
const ext = this.findExtension(oid);
- return ext ? new ext_1.x509Extension(ext) : undefined;
+ return ext ? new ext_1.X509Extension(ext) : undefined;
}
verify(issuerCertificate) {
// Use the issuer's public key if provided, otherwise use the subject's
const publicKey = issuerCertificate?.publicKey || this.publicKey;
- const key = util_1.crypto.createPublicKey(publicKey);
- return util_1.crypto.verifyBlob(this.tbsCertificate.toDER(), key, this.signatureValue, this.signatureAlgorithm);
+ const key = crypto.createPublicKey(publicKey);
+ return crypto.verify(this.tbsCertificate.toDER(), key, this.signatureValue, this.signatureAlgorithm);
}
validForDate(date) {
return this.notBefore <= date && date <= this.notAfter;
@@ -123,71 +155,18 @@ class x509Certificate {
equals(other) {
return this.root.toDER().equals(other.root.toDER());
}
- verifySCTs(issuer, logs) {
- let extSCT;
- // Verifying the SCT requires that we remove the SCT extension and
- // re-encode the TBS structure to DER -- this value is part of the data
- // over which the signature is calculated. Since this is a destructive action
- // we create a copy of the certificate so we can remove the SCT extension
- // without affecting the original certificate.
- const clone = this.clone();
- // Intentionally not using the findExtension method here because we want to
- // remove the the SCT extension from the certificate before calculating the
- // PreCert structure
- for (let i = 0; i < clone.extensions.length; i++) {
- const ext = clone.extensions[i];
- if (ext.subs[0].toOID() === EXTENSION_OID_SCT) {
- extSCT = new ext_1.x509SCTExtension(ext);
- // Remove the extension from the certificate
- clone.extensions.splice(i, 1);
- break;
- }
- }
- if (!extSCT) {
- throw new Error('Certificate does not contain SCT extension');
- }
- if (extSCT?.signedCertificateTimestamps?.length === 0) {
- throw new Error('Certificate does not contain any SCTs');
- }
- // Construct the PreCert structure
- // https://www.rfc-editor.org/rfc/rfc6962#section-3.2
- const preCert = new stream_1.ByteStream();
- // Calculate hash of the issuer's public key
- const issuerId = util_1.crypto.hash(issuer.publicKey);
- preCert.appendView(issuerId);
- // Re-encodes the certificate to DER after removing the SCT extension
- const tbs = clone.tbsCertificate.toDER();
- preCert.appendUint24(tbs.length);
- preCert.appendView(tbs);
- // Calculate and return the verification results for each SCT
- return extSCT.signedCertificateTimestamps.map((sct) => ({
- logID: sct.logID,
- verified: sct.verify(preCert.buffer, logs),
- }));
- }
// Creates a copy of the certificate with a new buffer
clone() {
const der = this.root.toDER();
const clone = Buffer.alloc(der.length);
der.copy(clone);
- return x509Certificate.parse(clone);
+ return X509Certificate.parse(clone);
}
findExtension(oid) {
// Find the extension with the given OID. The OID will always be the first
// element of the extension sequence
return this.extensions.find((ext) => ext.subs[0].toOID() === oid);
}
- // A certificate should be considered invalid if it contains critical
- // extensions that are not recognized
- checkRecognizedExtensions() {
- // The extension list is the first (and only) element of the extensions
- // context specific tag
- const extSeq = this.extensionsObj?.subs[0];
- const exts = extSeq?.subs.map((ext) => new ext_1.x509Extension(ext));
- // Check for unrecognized critical extensions
- return (!exts ||
- exts.every((ext) => !ext.critical || RECOGNIZED_EXTENSIONS.includes(ext.oid)));
- }
/////////////////////////////////////////////////////////////////////////////
// The following properties use the documented x509 structure to locate the
// desired ASN.1 object
@@ -212,6 +191,11 @@ class x509Certificate {
// version is the first element of the tbsCertificate sequence
return this.tbsCertificateObj.subs[0];
}
+ // https://www.rfc-editor.org/rfc/rfc5280#section-4.1.2.2
+ get serialNumberObj() {
+ // serialNumber is the second element of the tbsCertificate sequence
+ return this.tbsCertificateObj.subs[1];
+ }
// https://www.rfc-editor.org/rfc/rfc5280#section-4.1.2.4
get issuerObj() {
// issuer is the fourth element of the tbsCertificate sequence
@@ -239,4 +223,4 @@ class x509Certificate {
return this.tbsCertificateObj.subs.find((sub) => sub.tag.isContextSpecific(0x03));
}
}
-exports.x509Certificate = x509Certificate;
+exports.X509Certificate = X509Certificate;
diff --git a/deps/npm/node_modules/sigstore/dist/x509/ext.js b/deps/npm/node_modules/@sigstore/core/dist/x509/ext.js
similarity index 80%
rename from deps/npm/node_modules/sigstore/dist/x509/ext.js
rename to deps/npm/node_modules/@sigstore/core/dist/x509/ext.js
index 246aeb095802fb..1d481261b0aa69 100644
--- a/deps/npm/node_modules/sigstore/dist/x509/ext.js
+++ b/deps/npm/node_modules/@sigstore/core/dist/x509/ext.js
@@ -1,10 +1,10 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
-exports.x509SCTExtension = exports.x509SubjectKeyIDExtension = exports.x509AuthorityKeyIDExtension = exports.x509SubjectAlternativeNameExtension = exports.x509KeyUsageExtension = exports.x509BasicConstraintsExtension = exports.x509Extension = void 0;
-const stream_1 = require("../util/stream");
+exports.X509SCTExtension = exports.X509SubjectKeyIDExtension = exports.X509AuthorityKeyIDExtension = exports.X509SubjectAlternativeNameExtension = exports.X509KeyUsageExtension = exports.X509BasicConstraintsExtension = exports.X509Extension = void 0;
+const stream_1 = require("../stream");
const sct_1 = require("./sct");
// https://www.rfc-editor.org/rfc/rfc5280#section-4.1
-class x509Extension {
+class X509Extension {
constructor(asn1) {
this.root = asn1;
}
@@ -27,11 +27,11 @@ class x509Extension {
return this.root.subs[this.root.subs.length - 1];
}
}
-exports.x509Extension = x509Extension;
+exports.X509Extension = X509Extension;
// https://www.rfc-editor.org/rfc/rfc5280#section-4.2.1.9
-class x509BasicConstraintsExtension extends x509Extension {
+class X509BasicConstraintsExtension extends X509Extension {
get isCA() {
- return this.sequence.subs[0].toBoolean();
+ return this.sequence.subs[0]?.toBoolean() ?? false;
}
get pathLenConstraint() {
return this.sequence.subs.length > 1
@@ -44,9 +44,9 @@ class x509BasicConstraintsExtension extends x509Extension {
return this.extnValueObj.subs[0];
}
}
-exports.x509BasicConstraintsExtension = x509BasicConstraintsExtension;
+exports.X509BasicConstraintsExtension = X509BasicConstraintsExtension;
// https://www.rfc-editor.org/rfc/rfc5280#section-4.2.1.3
-class x509KeyUsageExtension extends x509Extension {
+class X509KeyUsageExtension extends X509Extension {
get digitalSignature() {
return this.bitString[0] === 1;
}
@@ -62,9 +62,9 @@ class x509KeyUsageExtension extends x509Extension {
return this.extnValueObj.subs[0].toBitString();
}
}
-exports.x509KeyUsageExtension = x509KeyUsageExtension;
+exports.X509KeyUsageExtension = X509KeyUsageExtension;
// https://www.rfc-editor.org/rfc/rfc5280#section-4.2.1.6
-class x509SubjectAlternativeNameExtension extends x509Extension {
+class X509SubjectAlternativeNameExtension extends X509Extension {
get rfc822Name() {
return this.findGeneralName(0x01)?.value.toString('ascii');
}
@@ -95,9 +95,9 @@ class x509SubjectAlternativeNameExtension extends x509Extension {
return this.extnValueObj.subs[0].subs;
}
}
-exports.x509SubjectAlternativeNameExtension = x509SubjectAlternativeNameExtension;
+exports.X509SubjectAlternativeNameExtension = X509SubjectAlternativeNameExtension;
// https://www.rfc-editor.org/rfc/rfc5280#section-4.2.1.1
-class x509AuthorityKeyIDExtension extends x509Extension {
+class X509AuthorityKeyIDExtension extends X509Extension {
get keyIdentifier() {
return this.findSequenceMember(0x00)?.value;
}
@@ -109,16 +109,16 @@ class x509AuthorityKeyIDExtension extends x509Extension {
return this.extnValueObj.subs[0];
}
}
-exports.x509AuthorityKeyIDExtension = x509AuthorityKeyIDExtension;
+exports.X509AuthorityKeyIDExtension = X509AuthorityKeyIDExtension;
// https://www.rfc-editor.org/rfc/rfc5280#section-4.2.1.2
-class x509SubjectKeyIDExtension extends x509Extension {
+class X509SubjectKeyIDExtension extends X509Extension {
get keyIdentifier() {
return this.extnValueObj.subs[0].value;
}
}
-exports.x509SubjectKeyIDExtension = x509SubjectKeyIDExtension;
+exports.X509SubjectKeyIDExtension = X509SubjectKeyIDExtension;
// https://www.rfc-editor.org/rfc/rfc6962#section-3.3
-class x509SCTExtension extends x509Extension {
+class X509SCTExtension extends X509Extension {
constructor(asn1) {
super(asn1);
}
@@ -142,4 +142,4 @@ class x509SCTExtension extends x509Extension {
return sctList;
}
}
-exports.x509SCTExtension = x509SCTExtension;
+exports.X509SCTExtension = X509SCTExtension;
diff --git a/deps/npm/node_modules/@sigstore/sign/dist/util/crypto.js b/deps/npm/node_modules/@sigstore/core/dist/x509/index.js
similarity index 54%
rename from deps/npm/node_modules/@sigstore/sign/dist/util/crypto.js
rename to deps/npm/node_modules/@sigstore/core/dist/x509/index.js
index 11aad2fb6ff8b0..cdd77e58f37d5a 100644
--- a/deps/npm/node_modules/@sigstore/sign/dist/util/crypto.js
+++ b/deps/npm/node_modules/@sigstore/core/dist/x509/index.js
@@ -1,9 +1,4 @@
"use strict";
-var __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.hash = void 0;
/*
Copyright 2023 The Sigstore Authors.
@@ -19,9 +14,10 @@ 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.
*/
-const crypto_1 = __importDefault(require("crypto"));
-const SHA256_ALGORITHM = 'sha256';
-function hash(data, algorithm = SHA256_ALGORITHM) {
- return crypto_1.default.createHash(algorithm).update(data).digest();
-}
-exports.hash = hash;
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.X509SCTExtension = exports.X509Certificate = exports.EXTENSION_OID_SCT = void 0;
+var cert_1 = require("./cert");
+Object.defineProperty(exports, "EXTENSION_OID_SCT", { enumerable: true, get: function () { return cert_1.EXTENSION_OID_SCT; } });
+Object.defineProperty(exports, "X509Certificate", { enumerable: true, get: function () { return cert_1.X509Certificate; } });
+var ext_1 = require("./ext");
+Object.defineProperty(exports, "X509SCTExtension", { enumerable: true, get: function () { return ext_1.X509SCTExtension; } });
diff --git a/deps/npm/node_modules/sigstore/dist/x509/sct.js b/deps/npm/node_modules/@sigstore/core/dist/x509/sct.js
similarity index 62%
rename from deps/npm/node_modules/sigstore/dist/x509/sct.js
rename to deps/npm/node_modules/@sigstore/core/dist/x509/sct.js
index 72528dd3a2077c..1603059c0d1ace 100644
--- a/deps/npm/node_modules/sigstore/dist/x509/sct.js
+++ b/deps/npm/node_modules/@sigstore/core/dist/x509/sct.js
@@ -1,8 +1,46 @@
"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
Object.defineProperty(exports, "__esModule", { value: true });
exports.SignedCertificateTimestamp = void 0;
-const util_1 = require("../util");
-const stream_1 = require("../util/stream");
+/*
+Copyright 2023 The Sigstore 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.
+*/
+const crypto = __importStar(require("../crypto"));
+const stream_1 = require("../stream");
class SignedCertificateTimestamp {
constructor(options) {
this.version = options.version;
@@ -20,31 +58,32 @@ class SignedCertificateTimestamp {
// https://www.rfc-editor.org/rfc/rfc5246#section-7.4.1.4.1
get algorithm() {
switch (this.hashAlgorithm) {
+ /* istanbul ignore next */
case 0:
return 'none';
+ /* istanbul ignore next */
case 1:
return 'md5';
+ /* istanbul ignore next */
case 2:
return 'sha1';
+ /* istanbul ignore next */
case 3:
return 'sha224';
case 4:
return 'sha256';
+ /* istanbul ignore next */
case 5:
return 'sha384';
+ /* istanbul ignore next */
case 6:
return 'sha512';
+ /* istanbul ignore next */
default:
return 'unknown';
}
}
- verify(preCert, logs) {
- // Find key for the log reponsible for this signature
- const log = logs.find((log) => log.logId?.keyId.equals(this.logID));
- if (!log?.publicKey?.rawBytes) {
- throw new Error(`No key found for log: ${this.logID.toString('base64')}`);
- }
- const publicKey = util_1.crypto.createPublicKey(log.publicKey.rawBytes);
+ verify(preCert, key) {
// Assemble the digitally-signed struct (the data over which the signature
// was generated).
// https://www.rfc-editor.org/rfc/rfc6962#section-3.2
@@ -55,10 +94,11 @@ class SignedCertificateTimestamp {
stream.appendUint16(0x01); // LogEntryType = precert_entry(1)
stream.appendView(preCert);
stream.appendUint16(this.extensions.byteLength);
+ /* istanbul ignore next - extensions are very uncommon */
if (this.extensions.byteLength > 0) {
stream.appendView(this.extensions);
}
- return util_1.crypto.verifyBlob(stream.buffer, publicKey, this.signature, this.algorithm);
+ return crypto.verify(stream.buffer, key, this.signature, this.algorithm);
}
// Parses a SignedCertificateTimestamp from a buffer. SCTs are encoded using
// TLS encoding which means the fields and lengths of most fields are
diff --git a/deps/npm/node_modules/@sigstore/core/package.json b/deps/npm/node_modules/@sigstore/core/package.json
new file mode 100644
index 00000000000000..b9f901652ef0fd
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/core/package.json
@@ -0,0 +1,31 @@
+{
+ "name": "@sigstore/core",
+ "version": "1.0.0",
+ "description": "Base library for Sigstore",
+ "main": "dist/index.js",
+ "types": "dist/index.d.ts",
+ "scripts": {
+ "clean": "shx rm -rf dist *.tsbuildinfo",
+ "build": "tsc --build",
+ "test": "jest"
+ },
+ "files": [
+ "dist"
+ ],
+ "author": "bdehamer@github.com",
+ "license": "Apache-2.0",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/sigstore/sigstore-js.git"
+ },
+ "bugs": {
+ "url": "https://github.com/sigstore/sigstore-js/issues"
+ },
+ "homepage": "https://github.com/sigstore/sigstore-js/tree/main/packages/core#readme",
+ "publishConfig": {
+ "provenance": true
+ },
+ "engines": {
+ "node": "^16.14.0 || >=18.0.0"
+ }
+}
diff --git a/deps/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/sigstore_bundle.js b/deps/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/sigstore_bundle.js
index 1ef3e1b3356b7c..3773867f5426a3 100644
--- a/deps/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/sigstore_bundle.js
+++ b/deps/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/sigstore_bundle.js
@@ -40,7 +40,9 @@ exports.VerificationMaterial = {
$case: "x509CertificateChain",
x509CertificateChain: sigstore_common_1.X509CertificateChain.fromJSON(object.x509CertificateChain),
}
- : undefined,
+ : isSet(object.certificate)
+ ? { $case: "certificate", certificate: sigstore_common_1.X509Certificate.fromJSON(object.certificate) }
+ : undefined,
tlogEntries: Array.isArray(object?.tlogEntries)
? object.tlogEntries.map((e) => sigstore_rekor_1.TransparencyLogEntry.fromJSON(e))
: [],
@@ -57,6 +59,10 @@ exports.VerificationMaterial = {
(obj.x509CertificateChain = message.content?.x509CertificateChain
? sigstore_common_1.X509CertificateChain.toJSON(message.content?.x509CertificateChain)
: undefined);
+ message.content?.$case === "certificate" &&
+ (obj.certificate = message.content?.certificate
+ ? sigstore_common_1.X509Certificate.toJSON(message.content?.certificate)
+ : undefined);
if (message.tlogEntries) {
obj.tlogEntries = message.tlogEntries.map((e) => e ? sigstore_rekor_1.TransparencyLogEntry.toJSON(e) : undefined);
}
diff --git a/deps/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/sigstore_common.js b/deps/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/sigstore_common.js
index bcd654e9154b92..c6f9baa91fff21 100644
--- a/deps/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/sigstore_common.js
+++ b/deps/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/sigstore_common.js
@@ -16,6 +16,10 @@ var HashAlgorithm;
(function (HashAlgorithm) {
HashAlgorithm[HashAlgorithm["HASH_ALGORITHM_UNSPECIFIED"] = 0] = "HASH_ALGORITHM_UNSPECIFIED";
HashAlgorithm[HashAlgorithm["SHA2_256"] = 1] = "SHA2_256";
+ HashAlgorithm[HashAlgorithm["SHA2_384"] = 2] = "SHA2_384";
+ HashAlgorithm[HashAlgorithm["SHA2_512"] = 3] = "SHA2_512";
+ HashAlgorithm[HashAlgorithm["SHA3_256"] = 4] = "SHA3_256";
+ HashAlgorithm[HashAlgorithm["SHA3_384"] = 5] = "SHA3_384";
})(HashAlgorithm = exports.HashAlgorithm || (exports.HashAlgorithm = {}));
function hashAlgorithmFromJSON(object) {
switch (object) {
@@ -25,6 +29,18 @@ function hashAlgorithmFromJSON(object) {
case 1:
case "SHA2_256":
return HashAlgorithm.SHA2_256;
+ case 2:
+ case "SHA2_384":
+ return HashAlgorithm.SHA2_384;
+ case 3:
+ case "SHA2_512":
+ return HashAlgorithm.SHA2_512;
+ case 4:
+ case "SHA3_256":
+ return HashAlgorithm.SHA3_256;
+ case 5:
+ case "SHA3_384":
+ return HashAlgorithm.SHA3_384;
default:
throw new tsProtoGlobalThis.Error("Unrecognized enum value " + object + " for enum HashAlgorithm");
}
@@ -36,6 +52,14 @@ function hashAlgorithmToJSON(object) {
return "HASH_ALGORITHM_UNSPECIFIED";
case HashAlgorithm.SHA2_256:
return "SHA2_256";
+ case HashAlgorithm.SHA2_384:
+ return "SHA2_384";
+ case HashAlgorithm.SHA2_512:
+ return "SHA2_512";
+ case HashAlgorithm.SHA3_256:
+ return "SHA3_256";
+ case HashAlgorithm.SHA3_384:
+ return "SHA3_384";
default:
throw new tsProtoGlobalThis.Error("Unrecognized enum value " + object + " for enum HashAlgorithm");
}
@@ -44,6 +68,16 @@ exports.hashAlgorithmToJSON = hashAlgorithmToJSON;
/**
* Details of a specific public key, capturing the the key encoding method,
* and signature algorithm.
+ *
+ * PublicKeyDetails captures the public key/hash algorithm combinations
+ * recommended in the Sigstore ecosystem.
+ *
+ * This is modelled as a linear set as we want to provide a small number of
+ * opinionated options instead of allowing every possible permutation.
+ *
+ * Any changes to this enum MUST be reflected in the algorithm registry.
+ * See: docs/algorithm-registry.md
+ *
* To avoid the possibility of contradicting formats such as PKCS1 with
* ED25519 the valid permutations are listed as a linear set instead of a
* cartesian set (i.e one combined variable instead of two, one for encoding
@@ -52,18 +86,60 @@ exports.hashAlgorithmToJSON = hashAlgorithmToJSON;
var PublicKeyDetails;
(function (PublicKeyDetails) {
PublicKeyDetails[PublicKeyDetails["PUBLIC_KEY_DETAILS_UNSPECIFIED"] = 0] = "PUBLIC_KEY_DETAILS_UNSPECIFIED";
- /** PKCS1_RSA_PKCS1V5 - RSA */
+ /**
+ * PKCS1_RSA_PKCS1V5 - RSA
+ *
+ * @deprecated
+ */
PublicKeyDetails[PublicKeyDetails["PKCS1_RSA_PKCS1V5"] = 1] = "PKCS1_RSA_PKCS1V5";
- /** PKCS1_RSA_PSS - See RFC8017 */
+ /**
+ * PKCS1_RSA_PSS - See RFC8017
+ *
+ * @deprecated
+ */
PublicKeyDetails[PublicKeyDetails["PKCS1_RSA_PSS"] = 2] = "PKCS1_RSA_PSS";
+ /** @deprecated */
PublicKeyDetails[PublicKeyDetails["PKIX_RSA_PKCS1V5"] = 3] = "PKIX_RSA_PKCS1V5";
+ /** @deprecated */
PublicKeyDetails[PublicKeyDetails["PKIX_RSA_PSS"] = 4] = "PKIX_RSA_PSS";
- /** PKIX_ECDSA_P256_SHA_256 - ECDSA */
- PublicKeyDetails[PublicKeyDetails["PKIX_ECDSA_P256_SHA_256"] = 5] = "PKIX_ECDSA_P256_SHA_256";
- /** PKIX_ECDSA_P256_HMAC_SHA_256 - See RFC6979 */
+ /** PKIX_RSA_PKCS1V15_2048_SHA256 - RSA public key in PKIX format, PKCS#1v1.5 signature */
+ PublicKeyDetails[PublicKeyDetails["PKIX_RSA_PKCS1V15_2048_SHA256"] = 9] = "PKIX_RSA_PKCS1V15_2048_SHA256";
+ PublicKeyDetails[PublicKeyDetails["PKIX_RSA_PKCS1V15_3072_SHA256"] = 10] = "PKIX_RSA_PKCS1V15_3072_SHA256";
+ PublicKeyDetails[PublicKeyDetails["PKIX_RSA_PKCS1V15_4096_SHA256"] = 11] = "PKIX_RSA_PKCS1V15_4096_SHA256";
+ /** PKIX_RSA_PSS_2048_SHA256 - RSA public key in PKIX format, RSASSA-PSS signature */
+ PublicKeyDetails[PublicKeyDetails["PKIX_RSA_PSS_2048_SHA256"] = 16] = "PKIX_RSA_PSS_2048_SHA256";
+ PublicKeyDetails[PublicKeyDetails["PKIX_RSA_PSS_3072_SHA256"] = 17] = "PKIX_RSA_PSS_3072_SHA256";
+ PublicKeyDetails[PublicKeyDetails["PKIX_RSA_PSS_4096_SHA256"] = 18] = "PKIX_RSA_PSS_4096_SHA256";
+ /**
+ * PKIX_ECDSA_P256_HMAC_SHA_256 - ECDSA
+ *
+ * @deprecated
+ */
PublicKeyDetails[PublicKeyDetails["PKIX_ECDSA_P256_HMAC_SHA_256"] = 6] = "PKIX_ECDSA_P256_HMAC_SHA_256";
+ /** PKIX_ECDSA_P256_SHA_256 - See NIST FIPS 186-4 */
+ PublicKeyDetails[PublicKeyDetails["PKIX_ECDSA_P256_SHA_256"] = 5] = "PKIX_ECDSA_P256_SHA_256";
+ PublicKeyDetails[PublicKeyDetails["PKIX_ECDSA_P384_SHA_384"] = 12] = "PKIX_ECDSA_P384_SHA_384";
+ PublicKeyDetails[PublicKeyDetails["PKIX_ECDSA_P521_SHA_512"] = 13] = "PKIX_ECDSA_P521_SHA_512";
/** PKIX_ED25519 - Ed 25519 */
PublicKeyDetails[PublicKeyDetails["PKIX_ED25519"] = 7] = "PKIX_ED25519";
+ PublicKeyDetails[PublicKeyDetails["PKIX_ED25519_PH"] = 8] = "PKIX_ED25519_PH";
+ /**
+ * LMS_SHA256 - LMS and LM-OTS
+ *
+ * These keys and signatures may be used by private Sigstore
+ * deployments, but are not currently supported by the public
+ * good instance.
+ *
+ * USER WARNING: LMS and LM-OTS are both stateful signature schemes.
+ * Using them correctly requires discretion and careful consideration
+ * to ensure that individual secret keys are not used more than once.
+ * In addition, LM-OTS is a single-use scheme, meaning that it
+ * MUST NOT be used for more than one signature per LM-OTS key.
+ * If you cannot maintain these invariants, you MUST NOT use these
+ * schemes.
+ */
+ PublicKeyDetails[PublicKeyDetails["LMS_SHA256"] = 14] = "LMS_SHA256";
+ PublicKeyDetails[PublicKeyDetails["LMOTS_SHA256"] = 15] = "LMOTS_SHA256";
})(PublicKeyDetails = exports.PublicKeyDetails || (exports.PublicKeyDetails = {}));
function publicKeyDetailsFromJSON(object) {
switch (object) {
@@ -82,15 +158,48 @@ function publicKeyDetailsFromJSON(object) {
case 4:
case "PKIX_RSA_PSS":
return PublicKeyDetails.PKIX_RSA_PSS;
- case 5:
- case "PKIX_ECDSA_P256_SHA_256":
- return PublicKeyDetails.PKIX_ECDSA_P256_SHA_256;
+ case 9:
+ case "PKIX_RSA_PKCS1V15_2048_SHA256":
+ return PublicKeyDetails.PKIX_RSA_PKCS1V15_2048_SHA256;
+ case 10:
+ case "PKIX_RSA_PKCS1V15_3072_SHA256":
+ return PublicKeyDetails.PKIX_RSA_PKCS1V15_3072_SHA256;
+ case 11:
+ case "PKIX_RSA_PKCS1V15_4096_SHA256":
+ return PublicKeyDetails.PKIX_RSA_PKCS1V15_4096_SHA256;
+ case 16:
+ case "PKIX_RSA_PSS_2048_SHA256":
+ return PublicKeyDetails.PKIX_RSA_PSS_2048_SHA256;
+ case 17:
+ case "PKIX_RSA_PSS_3072_SHA256":
+ return PublicKeyDetails.PKIX_RSA_PSS_3072_SHA256;
+ case 18:
+ case "PKIX_RSA_PSS_4096_SHA256":
+ return PublicKeyDetails.PKIX_RSA_PSS_4096_SHA256;
case 6:
case "PKIX_ECDSA_P256_HMAC_SHA_256":
return PublicKeyDetails.PKIX_ECDSA_P256_HMAC_SHA_256;
+ case 5:
+ case "PKIX_ECDSA_P256_SHA_256":
+ return PublicKeyDetails.PKIX_ECDSA_P256_SHA_256;
+ case 12:
+ case "PKIX_ECDSA_P384_SHA_384":
+ return PublicKeyDetails.PKIX_ECDSA_P384_SHA_384;
+ case 13:
+ case "PKIX_ECDSA_P521_SHA_512":
+ return PublicKeyDetails.PKIX_ECDSA_P521_SHA_512;
case 7:
case "PKIX_ED25519":
return PublicKeyDetails.PKIX_ED25519;
+ case 8:
+ case "PKIX_ED25519_PH":
+ return PublicKeyDetails.PKIX_ED25519_PH;
+ case 14:
+ case "LMS_SHA256":
+ return PublicKeyDetails.LMS_SHA256;
+ case 15:
+ case "LMOTS_SHA256":
+ return PublicKeyDetails.LMOTS_SHA256;
default:
throw new tsProtoGlobalThis.Error("Unrecognized enum value " + object + " for enum PublicKeyDetails");
}
@@ -108,12 +217,34 @@ function publicKeyDetailsToJSON(object) {
return "PKIX_RSA_PKCS1V5";
case PublicKeyDetails.PKIX_RSA_PSS:
return "PKIX_RSA_PSS";
- case PublicKeyDetails.PKIX_ECDSA_P256_SHA_256:
- return "PKIX_ECDSA_P256_SHA_256";
+ case PublicKeyDetails.PKIX_RSA_PKCS1V15_2048_SHA256:
+ return "PKIX_RSA_PKCS1V15_2048_SHA256";
+ case PublicKeyDetails.PKIX_RSA_PKCS1V15_3072_SHA256:
+ return "PKIX_RSA_PKCS1V15_3072_SHA256";
+ case PublicKeyDetails.PKIX_RSA_PKCS1V15_4096_SHA256:
+ return "PKIX_RSA_PKCS1V15_4096_SHA256";
+ case PublicKeyDetails.PKIX_RSA_PSS_2048_SHA256:
+ return "PKIX_RSA_PSS_2048_SHA256";
+ case PublicKeyDetails.PKIX_RSA_PSS_3072_SHA256:
+ return "PKIX_RSA_PSS_3072_SHA256";
+ case PublicKeyDetails.PKIX_RSA_PSS_4096_SHA256:
+ return "PKIX_RSA_PSS_4096_SHA256";
case PublicKeyDetails.PKIX_ECDSA_P256_HMAC_SHA_256:
return "PKIX_ECDSA_P256_HMAC_SHA_256";
+ case PublicKeyDetails.PKIX_ECDSA_P256_SHA_256:
+ return "PKIX_ECDSA_P256_SHA_256";
+ case PublicKeyDetails.PKIX_ECDSA_P384_SHA_384:
+ return "PKIX_ECDSA_P384_SHA_384";
+ case PublicKeyDetails.PKIX_ECDSA_P521_SHA_512:
+ return "PKIX_ECDSA_P521_SHA_512";
case PublicKeyDetails.PKIX_ED25519:
return "PKIX_ED25519";
+ case PublicKeyDetails.PKIX_ED25519_PH:
+ return "PKIX_ED25519_PH";
+ case PublicKeyDetails.LMS_SHA256:
+ return "LMS_SHA256";
+ case PublicKeyDetails.LMOTS_SHA256:
+ return "LMOTS_SHA256";
default:
throw new tsProtoGlobalThis.Error("Unrecognized enum value " + object + " for enum PublicKeyDetails");
}
diff --git a/deps/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/sigstore_verification.js b/deps/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/sigstore_verification.js
index 8a72b897618697..4af83c5a546607 100644
--- a/deps/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/sigstore_verification.js
+++ b/deps/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/sigstore_verification.js
@@ -1,6 +1,6 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
-exports.Input = exports.Artifact = exports.ArtifactVerificationOptions_TimestampAuthorityOptions = exports.ArtifactVerificationOptions_CtlogOptions = exports.ArtifactVerificationOptions_TlogOptions = exports.ArtifactVerificationOptions = exports.PublicKeyIdentities = exports.CertificateIdentities = exports.CertificateIdentity = void 0;
+exports.Input = exports.Artifact = exports.ArtifactVerificationOptions_ObserverTimestampOptions = exports.ArtifactVerificationOptions_TlogIntegratedTimestampOptions = exports.ArtifactVerificationOptions_TimestampAuthorityOptions = exports.ArtifactVerificationOptions_CtlogOptions = exports.ArtifactVerificationOptions_TlogOptions = exports.ArtifactVerificationOptions = exports.PublicKeyIdentities = exports.CertificateIdentities = exports.CertificateIdentity = void 0;
/* eslint-disable */
const sigstore_bundle_1 = require("./sigstore_bundle");
const sigstore_common_1 = require("./sigstore_common");
@@ -72,7 +72,14 @@ exports.PublicKeyIdentities = {
},
};
function createBaseArtifactVerificationOptions() {
- return { signers: undefined, tlogOptions: undefined, ctlogOptions: undefined, tsaOptions: undefined };
+ return {
+ signers: undefined,
+ tlogOptions: undefined,
+ ctlogOptions: undefined,
+ tsaOptions: undefined,
+ integratedTsOptions: undefined,
+ observerOptions: undefined,
+ };
}
exports.ArtifactVerificationOptions = {
fromJSON(object) {
@@ -94,6 +101,12 @@ exports.ArtifactVerificationOptions = {
tsaOptions: isSet(object.tsaOptions)
? exports.ArtifactVerificationOptions_TimestampAuthorityOptions.fromJSON(object.tsaOptions)
: undefined,
+ integratedTsOptions: isSet(object.integratedTsOptions)
+ ? exports.ArtifactVerificationOptions_TlogIntegratedTimestampOptions.fromJSON(object.integratedTsOptions)
+ : undefined,
+ observerOptions: isSet(object.observerOptions)
+ ? exports.ArtifactVerificationOptions_ObserverTimestampOptions.fromJSON(object.observerOptions)
+ : undefined,
};
},
toJSON(message) {
@@ -114,6 +127,12 @@ exports.ArtifactVerificationOptions = {
message.tsaOptions !== undefined && (obj.tsaOptions = message.tsaOptions
? exports.ArtifactVerificationOptions_TimestampAuthorityOptions.toJSON(message.tsaOptions)
: undefined);
+ message.integratedTsOptions !== undefined && (obj.integratedTsOptions = message.integratedTsOptions
+ ? exports.ArtifactVerificationOptions_TlogIntegratedTimestampOptions.toJSON(message.integratedTsOptions)
+ : undefined);
+ message.observerOptions !== undefined && (obj.observerOptions = message.observerOptions
+ ? exports.ArtifactVerificationOptions_ObserverTimestampOptions.toJSON(message.observerOptions)
+ : undefined);
return obj;
},
};
@@ -140,20 +159,18 @@ exports.ArtifactVerificationOptions_TlogOptions = {
},
};
function createBaseArtifactVerificationOptions_CtlogOptions() {
- return { threshold: 0, detachedSct: false, disable: false };
+ return { threshold: 0, disable: false };
}
exports.ArtifactVerificationOptions_CtlogOptions = {
fromJSON(object) {
return {
threshold: isSet(object.threshold) ? Number(object.threshold) : 0,
- detachedSct: isSet(object.detachedSct) ? Boolean(object.detachedSct) : false,
disable: isSet(object.disable) ? Boolean(object.disable) : false,
};
},
toJSON(message) {
const obj = {};
message.threshold !== undefined && (obj.threshold = Math.round(message.threshold));
- message.detachedSct !== undefined && (obj.detachedSct = message.detachedSct);
message.disable !== undefined && (obj.disable = message.disable);
return obj;
},
@@ -175,6 +192,40 @@ exports.ArtifactVerificationOptions_TimestampAuthorityOptions = {
return obj;
},
};
+function createBaseArtifactVerificationOptions_TlogIntegratedTimestampOptions() {
+ return { threshold: 0, disable: false };
+}
+exports.ArtifactVerificationOptions_TlogIntegratedTimestampOptions = {
+ fromJSON(object) {
+ return {
+ threshold: isSet(object.threshold) ? Number(object.threshold) : 0,
+ disable: isSet(object.disable) ? Boolean(object.disable) : false,
+ };
+ },
+ toJSON(message) {
+ const obj = {};
+ message.threshold !== undefined && (obj.threshold = Math.round(message.threshold));
+ message.disable !== undefined && (obj.disable = message.disable);
+ return obj;
+ },
+};
+function createBaseArtifactVerificationOptions_ObserverTimestampOptions() {
+ return { threshold: 0, disable: false };
+}
+exports.ArtifactVerificationOptions_ObserverTimestampOptions = {
+ fromJSON(object) {
+ return {
+ threshold: isSet(object.threshold) ? Number(object.threshold) : 0,
+ disable: isSet(object.disable) ? Boolean(object.disable) : false,
+ };
+ },
+ toJSON(message) {
+ const obj = {};
+ message.threshold !== undefined && (obj.threshold = Math.round(message.threshold));
+ message.disable !== undefined && (obj.disable = message.disable);
+ return obj;
+ },
+};
function createBaseArtifact() {
return { data: undefined };
}
diff --git a/deps/npm/node_modules/@sigstore/protobuf-specs/package.json b/deps/npm/node_modules/@sigstore/protobuf-specs/package.json
index 450abb157f31ab..047a67a7a2e208 100644
--- a/deps/npm/node_modules/@sigstore/protobuf-specs/package.json
+++ b/deps/npm/node_modules/@sigstore/protobuf-specs/package.json
@@ -1,6 +1,6 @@
{
"name": "@sigstore/protobuf-specs",
- "version": "0.2.1",
+ "version": "0.3.0",
"description": "code-signing for npm packages",
"main": "dist/index.js",
"types": "dist/index.d.ts",
diff --git a/deps/npm/node_modules/@sigstore/sign/dist/signer/index.js b/deps/npm/node_modules/@sigstore/sign/dist/signer/index.js
index 06ec9dbe72fe14..e2087767b81c19 100644
--- a/deps/npm/node_modules/@sigstore/sign/dist/signer/index.js
+++ b/deps/npm/node_modules/@sigstore/sign/dist/signer/index.js
@@ -1,4 +1,5 @@
"use strict";
+/* istanbul ignore file */
Object.defineProperty(exports, "__esModule", { value: true });
exports.FulcioSigner = exports.DEFAULT_FULCIO_URL = void 0;
/*
diff --git a/deps/npm/node_modules/@sigstore/sign/dist/util/index.js b/deps/npm/node_modules/@sigstore/sign/dist/util/index.js
index 567e5dbf6e04c7..f467c9150c348f 100644
--- a/deps/npm/node_modules/@sigstore/sign/dist/util/index.js
+++ b/deps/npm/node_modules/@sigstore/sign/dist/util/index.js
@@ -23,7 +23,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
-exports.ua = exports.pem = exports.oidc = exports.json = exports.encoding = exports.dsse = exports.crypto = void 0;
+exports.ua = exports.oidc = exports.pem = exports.json = exports.encoding = exports.dsse = exports.crypto = void 0;
/*
Copyright 2023 The Sigstore Authors.
@@ -39,10 +39,11 @@ 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.
*/
-exports.crypto = __importStar(require("./crypto"));
-exports.dsse = __importStar(require("./dsse"));
-exports.encoding = __importStar(require("./encoding"));
-exports.json = __importStar(require("./json"));
+var core_1 = require("@sigstore/core");
+Object.defineProperty(exports, "crypto", { enumerable: true, get: function () { return core_1.crypto; } });
+Object.defineProperty(exports, "dsse", { enumerable: true, get: function () { return core_1.dsse; } });
+Object.defineProperty(exports, "encoding", { enumerable: true, get: function () { return core_1.encoding; } });
+Object.defineProperty(exports, "json", { enumerable: true, get: function () { return core_1.json; } });
+Object.defineProperty(exports, "pem", { enumerable: true, get: function () { return core_1.pem; } });
exports.oidc = __importStar(require("./oidc"));
-exports.pem = __importStar(require("./pem"));
exports.ua = __importStar(require("./ua"));
diff --git a/deps/npm/node_modules/@sigstore/sign/dist/util/json.js b/deps/npm/node_modules/@sigstore/sign/dist/util/json.js
deleted file mode 100644
index 69176ad731eb78..00000000000000
--- a/deps/npm/node_modules/@sigstore/sign/dist/util/json.js
+++ /dev/null
@@ -1,61 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.canonicalize = void 0;
-/*
-Copyright 2023 The Sigstore 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.
-*/
-// JSON canonicalization per https://github.com/cyberphone/json-canonicalization
-// eslint-disable-next-line @typescript-eslint/no-explicit-any
-function canonicalize(object) {
- let buffer = '';
- if (object === null || typeof object !== 'object' || object.toJSON != null) {
- // Primitives or toJSONable objects
- buffer += JSON.stringify(object);
- }
- else if (Array.isArray(object)) {
- // Array - maintain element order
- buffer += '[';
- let first = true;
- object.forEach((element) => {
- if (!first) {
- buffer += ',';
- }
- first = false;
- // recursive call
- buffer += canonicalize(element);
- });
- buffer += ']';
- }
- else {
- // Object - Sort properties before serializing
- buffer += '{';
- let first = true;
- Object.keys(object)
- .sort()
- .forEach((property) => {
- if (!first) {
- buffer += ',';
- }
- first = false;
- buffer += JSON.stringify(property);
- buffer += ':';
- // recursive call
- buffer += canonicalize(object[property]);
- });
- buffer += '}';
- }
- return buffer;
-}
-exports.canonicalize = canonicalize;
diff --git a/deps/npm/node_modules/@sigstore/sign/dist/util/oidc.js b/deps/npm/node_modules/@sigstore/sign/dist/util/oidc.js
index 8b49f3bbe84401..2f5947d7b6b878 100644
--- a/deps/npm/node_modules/@sigstore/sign/dist/util/oidc.js
+++ b/deps/npm/node_modules/@sigstore/sign/dist/util/oidc.js
@@ -1,27 +1,4 @@
"use strict";
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- var desc = Object.getOwnPropertyDescriptor(m, k);
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
- desc = { enumerable: true, get: function() { return m[k]; } };
- }
- Object.defineProperty(o, k2, desc);
-}) : (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
- Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
- o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
- if (mod && mod.__esModule) return mod;
- var result = {};
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
- __setModuleDefault(result, mod);
- return result;
-};
Object.defineProperty(exports, "__esModule", { value: true });
exports.extractJWTSubject = void 0;
/*
@@ -39,10 +16,10 @@ 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.
*/
-const enc = __importStar(require("./encoding"));
+const core_1 = require("@sigstore/core");
function extractJWTSubject(jwt) {
const parts = jwt.split('.', 3);
- const payload = JSON.parse(enc.base64Decode(parts[1]));
+ const payload = JSON.parse(core_1.encoding.base64Decode(parts[1]));
switch (payload.iss) {
case 'https://accounts.google.com':
case 'https://oauth2.sigstore.dev/auth':
diff --git a/deps/npm/node_modules/@sigstore/sign/dist/witness/index.js b/deps/npm/node_modules/@sigstore/sign/dist/witness/index.js
index e200d0638350bb..72677c399caa7f 100644
--- a/deps/npm/node_modules/@sigstore/sign/dist/witness/index.js
+++ b/deps/npm/node_modules/@sigstore/sign/dist/witness/index.js
@@ -1,4 +1,5 @@
"use strict";
+/* istanbul ignore file */
Object.defineProperty(exports, "__esModule", { value: true });
exports.TSAWitness = exports.RekorWitness = exports.DEFAULT_REKOR_URL = void 0;
/*
diff --git a/deps/npm/node_modules/@sigstore/sign/package.json b/deps/npm/node_modules/@sigstore/sign/package.json
index 7075ee16aeb0dc..4302f6e07a2a82 100644
--- a/deps/npm/node_modules/@sigstore/sign/package.json
+++ b/deps/npm/node_modules/@sigstore/sign/package.json
@@ -1,6 +1,6 @@
{
"name": "@sigstore/sign",
- "version": "2.2.0",
+ "version": "2.2.3",
"description": "Sigstore signing library",
"main": "dist/index.js",
"types": "dist/index.d.ts",
@@ -27,13 +27,14 @@
},
"devDependencies": {
"@sigstore/jest": "^0.0.0",
- "@sigstore/mock": "^0.6.0",
+ "@sigstore/mock": "^0.6.5",
"@sigstore/rekor-types": "^2.0.0",
- "@types/make-fetch-happen": "^10.0.3"
+ "@types/make-fetch-happen": "^10.0.4"
},
"dependencies": {
- "@sigstore/bundle": "^2.1.0",
- "@sigstore/protobuf-specs": "^0.2.1",
+ "@sigstore/bundle": "^2.2.0",
+ "@sigstore/core": "^1.0.0",
+ "@sigstore/protobuf-specs": "^0.3.0",
"make-fetch-happen": "^13.0.0"
},
"engines": {
diff --git a/deps/npm/node_modules/@sigstore/tuf/dist/client.js b/deps/npm/node_modules/@sigstore/tuf/dist/client.js
index 865d52b73027ed..2019c1fd30f886 100644
--- a/deps/npm/node_modules/@sigstore/tuf/dist/client.js
+++ b/deps/npm/node_modules/@sigstore/tuf/dist/client.js
@@ -22,12 +22,28 @@ limitations under the License.
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const tuf_js_1 = require("tuf-js");
+const _1 = require(".");
const target_1 = require("./target");
+const TARGETS_DIR_NAME = 'targets';
class TUFClient {
constructor(options) {
- initTufCache(options);
- const remote = initRemoteConfig(options);
- this.updater = initClient(options.cachePath, remote, options);
+ const url = new URL(options.mirrorURL);
+ const repoName = encodeURIComponent(url.host + url.pathname.replace(/\/$/, ''));
+ const cachePath = path_1.default.join(options.cachePath, repoName);
+ initTufCache(cachePath);
+ seedCache({
+ cachePath,
+ mirrorURL: options.mirrorURL,
+ tufRootPath: options.rootPath,
+ forceInit: options.forceInit,
+ });
+ this.updater = initClient({
+ mirrorURL: options.mirrorURL,
+ cachePath,
+ forceCache: options.forceCache,
+ retry: options.retry,
+ timeout: options.timeout,
+ });
}
async refresh() {
return this.updater.refresh();
@@ -42,53 +58,55 @@ exports.TUFClient = TUFClient;
// created. If the targets directory does not exist, it will be created.
// If the root.json file does not exist, it will be copied from the
// rootPath argument.
-function initTufCache({ cachePath, rootPath: tufRootPath, force, }) {
- const targetsPath = path_1.default.join(cachePath, 'targets');
- const cachedRootPath = path_1.default.join(cachePath, 'root.json');
+function initTufCache(cachePath) {
+ const targetsPath = path_1.default.join(cachePath, TARGETS_DIR_NAME);
if (!fs_1.default.existsSync(cachePath)) {
fs_1.default.mkdirSync(cachePath, { recursive: true });
}
if (!fs_1.default.existsSync(targetsPath)) {
fs_1.default.mkdirSync(targetsPath);
}
- // If the root.json file does not exist (or we're forcing re-initialization),
- // copy it from the rootPath argument
- if (!fs_1.default.existsSync(cachedRootPath) || force) {
- fs_1.default.copyFileSync(tufRootPath, cachedRootPath);
- }
- return cachePath;
}
-// Initializes the remote.json file, which contains the URL of the TUF
-// repository. If the file does not exist, it will be created. If the file
-// exists, it will be parsed and returned.
-function initRemoteConfig({ cachePath, mirrorURL, force, }) {
- let remoteConfig;
- const remoteConfigPath = path_1.default.join(cachePath, 'remote.json');
- // If the remote config file exists, read it and parse it (skip if force is
- // true)
- if (!force && fs_1.default.existsSync(remoteConfigPath)) {
- const data = fs_1.default.readFileSync(remoteConfigPath, 'utf-8');
- remoteConfig = JSON.parse(data);
- }
- // If the remote config file does not exist (or we're forcing initialization),
- // create it
- if (!remoteConfig || force) {
- remoteConfig = { mirror: mirrorURL };
- fs_1.default.writeFileSync(remoteConfigPath, JSON.stringify(remoteConfig));
+// Populates the TUF cache with the initial root.json file. If the root.json
+// file does not exist (or we're forcing re-initialization), copy it from either
+// the rootPath argument or from one of the repo seeds.
+function seedCache({ cachePath, mirrorURL, tufRootPath, forceInit, }) {
+ const cachedRootPath = path_1.default.join(cachePath, 'root.json');
+ // If the root.json file does not exist (or we're forcing re-initialization),
+ // populate it either from the supplied rootPath or from one of the repo seeds.
+ if (!fs_1.default.existsSync(cachedRootPath) || forceInit) {
+ if (tufRootPath) {
+ fs_1.default.copyFileSync(tufRootPath, cachedRootPath);
+ }
+ else {
+ /* eslint-disable @typescript-eslint/no-var-requires */
+ const seeds = require('../seeds.json');
+ const repoSeed = seeds[mirrorURL];
+ if (!repoSeed) {
+ throw new _1.TUFError({
+ code: 'TUF_INIT_CACHE_ERROR',
+ message: `No root.json found for mirror: ${mirrorURL}`,
+ });
+ }
+ fs_1.default.writeFileSync(cachedRootPath, Buffer.from(repoSeed['root.json'], 'base64'));
+ // Copy any seed targets into the cache
+ Object.entries(repoSeed.targets).forEach(([targetName, target]) => {
+ fs_1.default.writeFileSync(path_1.default.join(cachePath, TARGETS_DIR_NAME, targetName), Buffer.from(target, 'base64'));
+ });
+ }
}
- return remoteConfig;
}
-function initClient(cachePath, remote, options) {
- const baseURL = remote.mirror;
+function initClient(options) {
const config = {
fetchTimeout: options.timeout,
fetchRetry: options.retry,
};
return new tuf_js_1.Updater({
- metadataBaseUrl: baseURL,
- targetBaseUrl: `${baseURL}/targets`,
- metadataDir: cachePath,
- targetDir: path_1.default.join(cachePath, 'targets'),
+ metadataBaseUrl: options.mirrorURL,
+ targetBaseUrl: `${options.mirrorURL}/targets`,
+ metadataDir: options.cachePath,
+ targetDir: path_1.default.join(options.cachePath, TARGETS_DIR_NAME),
+ forceCache: options.forceCache,
config,
});
}
diff --git a/deps/npm/node_modules/@sigstore/tuf/dist/index.js b/deps/npm/node_modules/@sigstore/tuf/dist/index.js
index 297c7231408c25..678c81d45d21ed 100644
--- a/deps/npm/node_modules/@sigstore/tuf/dist/index.js
+++ b/deps/npm/node_modules/@sigstore/tuf/dist/index.js
@@ -21,7 +21,6 @@ const appdata_1 = require("./appdata");
const client_1 = require("./client");
exports.DEFAULT_MIRROR_URL = 'https://tuf-repo-cdn.sigstore.dev';
const DEFAULT_CACHE_DIR = 'sigstore-js';
-const DEFAULT_TUF_ROOT_PATH = '../store/public-good-instance-root.json';
const DEFAULT_RETRY = { retries: 2 };
const DEFAULT_TIMEOUT = 5000;
const TRUSTED_ROOT_TARGET = 'trusted_root.json';
@@ -45,11 +44,12 @@ function createClient(options) {
/* istanbul ignore next */
return new client_1.TUFClient({
cachePath: options.cachePath || (0, appdata_1.appDataPath)(DEFAULT_CACHE_DIR),
- rootPath: options.rootPath || require.resolve(DEFAULT_TUF_ROOT_PATH),
+ rootPath: options.rootPath,
mirrorURL: options.mirrorURL || exports.DEFAULT_MIRROR_URL,
retry: options.retry ?? DEFAULT_RETRY,
timeout: options.timeout ?? DEFAULT_TIMEOUT,
- force: options.force ?? false,
+ forceCache: options.forceCache ?? false,
+ forceInit: options.forceInit ?? options.force ?? false,
});
}
var error_1 = require("./error");
diff --git a/deps/npm/node_modules/@sigstore/tuf/package.json b/deps/npm/node_modules/@sigstore/tuf/package.json
index 38d5a03ad5be1c..0e5fab2a2762d8 100644
--- a/deps/npm/node_modules/@sigstore/tuf/package.json
+++ b/deps/npm/node_modules/@sigstore/tuf/package.json
@@ -1,6 +1,6 @@
{
"name": "@sigstore/tuf",
- "version": "2.2.0",
+ "version": "2.3.1",
"description": "Client for the Sigstore TUF repository",
"main": "dist/index.js",
"types": "dist/index.d.ts",
@@ -11,7 +11,7 @@
},
"files": [
"dist",
- "store"
+ "seeds.json"
],
"author": "bdehamer@github.com",
"license": "Apache-2.0",
@@ -29,11 +29,11 @@
"devDependencies": {
"@sigstore/jest": "^0.0.0",
"@tufjs/repo-mock": "^2.0.0",
- "@types/make-fetch-happen": "^10.0.0"
+ "@types/make-fetch-happen": "^10.0.4"
},
"dependencies": {
- "@sigstore/protobuf-specs": "^0.2.1",
- "tuf-js": "^2.1.0"
+ "@sigstore/protobuf-specs": "^0.3.0",
+ "tuf-js": "^2.2.0"
},
"engines": {
"node": "^16.14.0 || >=18.0.0"
diff --git a/deps/npm/node_modules/@sigstore/tuf/seeds.json b/deps/npm/node_modules/@sigstore/tuf/seeds.json
new file mode 100644
index 00000000000000..a0051cea67b7b5
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/tuf/seeds.json
@@ -0,0 +1 @@
+{"https://tuf-repo-cdn.sigstore.dev":{"root.json":"ewoJInNpZ25lZCI6IHsKCQkiX3R5cGUiOiAicm9vdCIsCgkJInNwZWNfdmVyc2lvbiI6ICIxLjAiLAoJCSJ2ZXJzaW9uIjogOCwKCQkiZXhwaXJlcyI6ICIyMDI0LTAzLTI2VDA0OjM4OjU1WiIsCgkJImtleXMiOiB7CgkJCSIyNWEwZWI0NTBmZDNlZTJiZDc5MjE4Yzk2M2RjZTNmMWNjNjExOGJhZGYyNTFiZjE0OWYwYmQwN2Q1Y2FiZTk5IjogewoJCQkJImtleXR5cGUiOiAiZWNkc2Etc2hhMi1uaXN0cDI1NiIsCgkJCQkic2NoZW1lIjogImVjZHNhLXNoYTItbmlzdHAyNTYiLAoJCQkJImtleWlkX2hhc2hfYWxnb3JpdGhtcyI6IFsKCQkJCQkic2hhMjU2IiwKCQkJCQkic2hhNTEyIgoJCQkJXSwKCQkJCSJrZXl2YWwiOiB7CgkJCQkJInB1YmxpYyI6ICItLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLVxuTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFRVhzejNTWlhGYjhqTVY0Mmo2cEpseWpialI4S1xuTjNCd29jZXhxNkxNSWI1cXNXS09RdkxOMTZOVWVmTGM0SHN3T291bVJzVlZhYWpTcFFTNmZvYmtSdz09XG4tLS0tLUVORCBQVUJMSUMgS0VZLS0tLS1cbiIKCQkJCX0KCQkJfSwKCQkJIjJlNjFjZDBjYmY0YThmNDU4MDliZGE5ZjdmNzhjMGQzM2FkMTE4NDJmZjk0YWUzNDA4NzNlMjY2NGRjODQzZGUiOiB7CgkJCQkia2V5dHlwZSI6ICJlY2RzYS1zaGEyLW5pc3RwMjU2IiwKCQkJCSJzY2hlbWUiOiAiZWNkc2Etc2hhMi1uaXN0cDI1NiIsCgkJCQkia2V5aWRfaGFzaF9hbGdvcml0aG1zIjogWwoJCQkJCSJzaGEyNTYiLAoJCQkJCSJzaGE1MTIiCgkJCQldLAoJCQkJImtleXZhbCI6IHsKCQkJCQkicHVibGljIjogIi0tLS0tQkVHSU4gUFVCTElDIEtFWS0tLS0tXG5NRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUwZ2hyaDkyTHcxWXIzaWRHVjVXcUN0TURCOEN4XG4rRDhoZEM0dzJaTE5JcGxWUm9WR0xza1lhM2doZU15T2ppSjhrUGkxNWFRMi8vN1Arb2o3VXZKUEd3PT1cbi0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLVxuIgoJCQkJfQoJCQl9LAoJCQkiNDViMjgzODI1ZWIxODRjYWJkNTgyZWIxN2I3NGZjOGVkNDA0ZjY4Y2Y0NTJhY2FiZGFkMmVkNmY5MGNlMjE2YiI6IHsKCQkJCSJrZXl0eXBlIjogImVjZHNhLXNoYTItbmlzdHAyNTYiLAoJCQkJInNjaGVtZSI6ICJlY2RzYS1zaGEyLW5pc3RwMjU2IiwKCQkJCSJrZXlpZF9oYXNoX2FsZ29yaXRobXMiOiBbCgkJCQkJInNoYTI1NiIsCgkJCQkJInNoYTUxMiIKCQkJCV0sCgkJCQkia2V5dmFsIjogewoJCQkJCSJwdWJsaWMiOiAiLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS1cbk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRUxyV3ZOdDk0djRSMDg1RUxlZUNNeEhwN1BsZEZcbjAvVDFHeHVrVWgyT0R1Z2dMR0pFMHBjMWU4Q1NCZjZDUzkxRndvOUZVT3VSc2pCVWxkK1ZxU3lDZFE9PVxuLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tXG4iCgkJCQl9CgkJCX0sCgkJCSI3Zjc1MTNiMjU0MjlhNjQ0NzNlMTBjZTNhZDJmM2RhMzcyYmJkZDE0YjY1ZDA3YmJhZjU0N2U3YzhiYmJlNjJiIjogewoJCQkJImtleXR5cGUiOiAiZWNkc2Etc2hhMi1uaXN0cDI1NiIsCgkJCQkic2NoZW1lIjogImVjZHNhLXNoYTItbmlzdHAyNTYiLAoJCQkJImtleWlkX2hhc2hfYWxnb3JpdGhtcyI6IFsKCQkJCQkic2hhMjU2IiwKCQkJCQkic2hhNTEyIgoJCQkJXSwKCQkJCSJrZXl2YWwiOiB7CgkJCQkJInB1YmxpYyI6ICItLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLVxuTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFaW5pa1NzQVFtWWtOZUg1ZVlxL0NuSXpMYWFjT1xueGxTYWF3UURPd3FLeS90Q3F4cTV4eFBTSmMyMUs0V0loczlHeU9rS2Z6dWVZM0dJTHpjTUpaNGNXdz09XG4tLS0tLUVORCBQVUJMSUMgS0VZLS0tLS1cbiIKCQkJCX0KCQkJfSwKCQkJImUxODYzYmEwMjA3MDMyMmViYzYyNmRjZWNmOWQ4ODFhM2EzOGMzNWMzYjQxYTgzNzY1YjZhZDZjMzdlYWVjMmEiOiB7CgkJCQkia2V5dHlwZSI6ICJlY2RzYS1zaGEyLW5pc3RwMjU2IiwKCQkJCSJzY2hlbWUiOiAiZWNkc2Etc2hhMi1uaXN0cDI1NiIsCgkJCQkia2V5aWRfaGFzaF9hbGdvcml0aG1zIjogWwoJCQkJCSJzaGEyNTYiLAoJCQkJCSJzaGE1MTIiCgkJCQldLAoJCQkJImtleXZhbCI6IHsKCQkJCQkicHVibGljIjogIi0tLS0tQkVHSU4gUFVCTElDIEtFWS0tLS0tXG5NRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVXUmlHcjUraiszSjVTc0grWnRyNW5FMkgyd083XG5CVituTzNzOTNnTGNhMThxVE96SFkxb1d5QUdEeWtNU3NHVFVCU3Q5RCtBbjBLZktzRDJtZlNNNDJRPT1cbi0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLVxuIgoJCQkJfQoJCQl9LAoJCQkiZjUzMTJmNTQyYzIxMjczZDk0ODVhNDkzOTQzODZjNDU3NTgwNDc3MDY2N2YyZGRiNTliM2JmMDY2OWZkZGQyZiI6IHsKCQkJCSJrZXl0eXBlIjogImVjZHNhLXNoYTItbmlzdHAyNTYiLAoJCQkJInNjaGVtZSI6ICJlY2RzYS1zaGEyLW5pc3RwMjU2IiwKCQkJCSJrZXlpZF9oYXNoX2FsZ29yaXRobXMiOiBbCgkJCQkJInNoYTI1NiIsCgkJCQkJInNoYTUxMiIKCQkJCV0sCgkJCQkia2V5dmFsIjogewoJCQkJCSJwdWJsaWMiOiAiLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS1cbk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRXpCelZPbUhDUG9qTVZMU0kzNjRXaWlWOE5QckRcbjZJZ1J4Vmxpc2t6L3YreTNKRVI1bWNWR2NPTmxpRGNXTUM1SjJsZkhtalBOUGhiNEg3eG04THpmU0E9PVxuLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tXG4iCgkJCQl9CgkJCX0sCgkJCSJmZjUxZTE3ZmNmMjUzMTE5YjcwMzNmNmY1NzUxMjYzMWRhNGEwOTY5NDQyYWZjZjlmYzhiMTQxYzdmMmJlOTljIjogewoJCQkJImtleXR5cGUiOiAiZWNkc2Etc2hhMi1uaXN0cDI1NiIsCgkJCQkic2NoZW1lIjogImVjZHNhLXNoYTItbmlzdHAyNTYiLAoJCQkJImtleWlkX2hhc2hfYWxnb3JpdGhtcyI6IFsKCQkJCQkic2hhMjU2IiwKCQkJCQkic2hhNTEyIgoJCQkJXSwKCQkJCSJrZXl2YWwiOiB7CgkJCQkJInB1YmxpYyI6ICItLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLVxuTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFeThYS3NtaEJZREk4SmMwR3d6QnhlS2F4MGNtNVxuU1RLRVU2NUhQRnVuVW40MXNUOHBpMEZqTTRJa0h6L1lVbXdtTFVPMFd0N2x4aGo2QmtMSUs0cVlBdz09XG4tLS0tLUVORCBQVUJMSUMgS0VZLS0tLS1cbiIKCQkJCX0KCQkJfQoJCX0sCgkJInJvbGVzIjogewoJCQkicm9vdCI6IHsKCQkJCSJrZXlpZHMiOiBbCgkJCQkJImZmNTFlMTdmY2YyNTMxMTliNzAzM2Y2ZjU3NTEyNjMxZGE0YTA5Njk0NDJhZmNmOWZjOGIxNDFjN2YyYmU5OWMiLAoJCQkJCSIyNWEwZWI0NTBmZDNlZTJiZDc5MjE4Yzk2M2RjZTNmMWNjNjExOGJhZGYyNTFiZjE0OWYwYmQwN2Q1Y2FiZTk5IiwKCQkJCQkiZjUzMTJmNTQyYzIxMjczZDk0ODVhNDkzOTQzODZjNDU3NTgwNDc3MDY2N2YyZGRiNTliM2JmMDY2OWZkZGQyZiIsCgkJCQkJIjdmNzUxM2IyNTQyOWE2NDQ3M2UxMGNlM2FkMmYzZGEzNzJiYmRkMTRiNjVkMDdiYmFmNTQ3ZTdjOGJiYmU2MmIiLAoJCQkJCSIyZTYxY2QwY2JmNGE4ZjQ1ODA5YmRhOWY3Zjc4YzBkMzNhZDExODQyZmY5NGFlMzQwODczZTI2NjRkYzg0M2RlIgoJCQkJXSwKCQkJCSJ0aHJlc2hvbGQiOiAzCgkJCX0sCgkJCSJzbmFwc2hvdCI6IHsKCQkJCSJrZXlpZHMiOiBbCgkJCQkJIjQ1YjI4MzgyNWViMTg0Y2FiZDU4MmViMTdiNzRmYzhlZDQwNGY2OGNmNDUyYWNhYmRhZDJlZDZmOTBjZTIxNmIiCgkJCQldLAoJCQkJInRocmVzaG9sZCI6IDEKCQkJfSwKCQkJInRhcmdldHMiOiB7CgkJCQkia2V5aWRzIjogWwoJCQkJCSJmZjUxZTE3ZmNmMjUzMTE5YjcwMzNmNmY1NzUxMjYzMWRhNGEwOTY5NDQyYWZjZjlmYzhiMTQxYzdmMmJlOTljIiwKCQkJCQkiMjVhMGViNDUwZmQzZWUyYmQ3OTIxOGM5NjNkY2UzZjFjYzYxMThiYWRmMjUxYmYxNDlmMGJkMDdkNWNhYmU5OSIsCgkJCQkJImY1MzEyZjU0MmMyMTI3M2Q5NDg1YTQ5Mzk0Mzg2YzQ1NzU4MDQ3NzA2NjdmMmRkYjU5YjNiZjA2NjlmZGRkMmYiLAoJCQkJCSI3Zjc1MTNiMjU0MjlhNjQ0NzNlMTBjZTNhZDJmM2RhMzcyYmJkZDE0YjY1ZDA3YmJhZjU0N2U3YzhiYmJlNjJiIiwKCQkJCQkiMmU2MWNkMGNiZjRhOGY0NTgwOWJkYTlmN2Y3OGMwZDMzYWQxMTg0MmZmOTRhZTM0MDg3M2UyNjY0ZGM4NDNkZSIKCQkJCV0sCgkJCQkidGhyZXNob2xkIjogMwoJCQl9LAoJCQkidGltZXN0YW1wIjogewoJCQkJImtleWlkcyI6IFsKCQkJCQkiZTE4NjNiYTAyMDcwMzIyZWJjNjI2ZGNlY2Y5ZDg4MWEzYTM4YzM1YzNiNDFhODM3NjViNmFkNmMzN2VhZWMyYSIKCQkJCV0sCgkJCQkidGhyZXNob2xkIjogMQoJCQl9CgkJfSwKCQkiY29uc2lzdGVudF9zbmFwc2hvdCI6IHRydWUKCX0sCgkic2lnbmF0dXJlcyI6IFsKCQl7CgkJCSJrZXlpZCI6ICJmNTMxMmY1NDJjMjEyNzNkOTQ4NWE0OTM5NDM4NmM0NTc1ODA0NzcwNjY3ZjJkZGI1OWIzYmYwNjY5ZmRkZDJmIiwKCQkJInNpZyI6ICIzMDQ0MDIyMDI0YjgwMzZiMzc0ZjcwNzE3MjNmM2YyY2IxOTc5YzQyZTVkYTE5MTBmMGIxNzg4MzVhZDU0NmUzYzM2MDgzNjMwMjIwNzE0MGNjZDQwOGFmY2Y4NzIwZGQ5YmVhN2YwMDMyNTc2OGMzYWE0N2MyMmQ1MzFjODQ5Yzk3NGZkNTBlNDVkZCIKCQl9LAoJCXsKCQkJImtleWlkIjogIjdmNzUxM2IyNTQyOWE2NDQ3M2UxMGNlM2FkMmYzZGEzNzJiYmRkMTRiNjVkMDdiYmFmNTQ3ZTdjOGJiYmU2MmIiLAoJCQkic2lnIjogIjMwNDYwMjIxMDBkY2IxYTk2ZWNiZmMwNTc2OGEzYzczNzI2YTkyZDY4MWRhNzhlYWVjMDY4YTlhMGNmZTEzYTEyZGI2NzJlNDRiMDIyMTAwYTBkYWU3YmMyZTZiOTUzZTIxNWY1N2NjNjE0ZWI3MTY2MGI5NDYxZDZkYzg2MjY0YjBiNzRhNGYyZTEzMDdlMSIKCQl9LAoJCXsKCQkJImtleWlkIjogIjJlNjFjZDBjYmY0YThmNDU4MDliZGE5ZjdmNzhjMGQzM2FkMTE4NDJmZjk0YWUzNDA4NzNlMjY2NGRjODQzZGUiLAoJCQkic2lnIjogIjMwNDYwMjIxMDBjNDcwOGQ5NDA3N2NiM2Q2ZGQ2MGViZDJkZDY2NTQ1ZTdhZmIwNDY0Y2UyNTkzYTVmMjNmNmUzNjA0YjlmMjFlMDIyMTAwOTkyZTk2OWNkNTA2OWVhYjE3NDM5YjJiYTYwNzQzZmU0MjI4NzdiYzFhMWM0NmU5MzVhNmQ1Y2I0N2IzY2ZjNiIKCQl9LAoJCXsKCQkJImtleWlkIjogIjI1YTBlYjQ1MGZkM2VlMmJkNzkyMThjOTYzZGNlM2YxY2M2MTE4YmFkZjI1MWJmMTQ5ZjBiZDA3ZDVjYWJlOTkiLAoJCQkic2lnIjogIjMwNDUwMjIwNTFmYWE2YjZmYzM3MzczMGI5N2MxYTRjZDkyZDAzZWZkOThiODNkNGM5YzkzYmY0ZjQwNGQxZjg4ZWEyZWIxODAyMjEwMGY3MWFjMWNkNzNkY2JhOTUwZjQyMTBiMTJmOWEwNWI4MTQwYjA0OTAyNDdjNTMzOTE5MWU4NDJiODY4MTU1YjQiCgkJfQoJXQp9","targets":{"trusted_root.json":"ewogICJtZWRpYVR5cGUiOiAiYXBwbGljYXRpb24vdm5kLmRldi5zaWdzdG9yZS50cnVzdGVkcm9vdCtqc29uO3ZlcnNpb249MC4xIiwKICAidGxvZ3MiOiBbCiAgICB7CiAgICAgICJiYXNlVXJsIjogImh0dHBzOi8vcmVrb3Iuc2lnc3RvcmUuZGV2IiwKICAgICAgImhhc2hBbGdvcml0aG0iOiAiU0hBMl8yNTYiLAogICAgICAicHVibGljS2V5IjogewogICAgICAgICJyYXdCeXRlcyI6ICJNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUyRzJZKzJ0YWJkVFY1QmNHaUJJeDBhOWZBRndya0JibUxTR3RrczRMM3FYNnlZWTB6dWZCbmhDOFVyL2l5NTVHaFdQLzlBL2JZMkxoQzMwTTkrUll0dz09IiwKICAgICAgICAia2V5RGV0YWlscyI6ICJQS0lYX0VDRFNBX1AyNTZfU0hBXzI1NiIsCiAgICAgICAgInZhbGlkRm9yIjogewogICAgICAgICAgInN0YXJ0IjogIjIwMjEtMDEtMTJUMTE6NTM6MjcuMDAwWiIKICAgICAgICB9CiAgICAgIH0sCiAgICAgICJsb2dJZCI6IHsKICAgICAgICAia2V5SWQiOiAid05JOWF0UUdseitWV2ZPNkxSeWdINFFVZlkvOFc0UkZ3aVQ1aTVXUmdCMD0iCiAgICAgIH0KICAgIH0KICBdLAogICJjZXJ0aWZpY2F0ZUF1dGhvcml0aWVzIjogWwogICAgewogICAgICAic3ViamVjdCI6IHsKICAgICAgICAib3JnYW5pemF0aW9uIjogInNpZ3N0b3JlLmRldiIsCiAgICAgICAgImNvbW1vbk5hbWUiOiAic2lnc3RvcmUiCiAgICAgIH0sCiAgICAgICJ1cmkiOiAiaHR0cHM6Ly9mdWxjaW8uc2lnc3RvcmUuZGV2IiwKICAgICAgImNlcnRDaGFpbiI6IHsKICAgICAgICAiY2VydGlmaWNhdGVzIjogWwogICAgICAgICAgewogICAgICAgICAgICAicmF3Qnl0ZXMiOiAiTUlJQitEQ0NBWDZnQXdJQkFnSVROVmtEWm9DaW9mUERzeTdkZm02Z2VMYnVoekFLQmdncWhrak9QUVFEQXpBcU1SVXdFd1lEVlFRS0V3eHphV2R6ZEc5eVpTNWtaWFl4RVRBUEJnTlZCQU1UQ0hOcFozTjBiM0psTUI0WERUSXhNRE13TnpBek1qQXlPVm9YRFRNeE1ESXlNekF6TWpBeU9Wb3dLakVWTUJNR0ExVUVDaE1NYzJsbmMzUnZjbVV1WkdWMk1SRXdEd1lEVlFRREV3aHphV2R6ZEc5eVpUQjJNQkFHQnlxR1NNNDlBZ0VHQlN1QkJBQWlBMklBQkxTeUE3SWk1aytwTk84WkVXWTB5bGVtV0Rvd09rTmEza0wrR1pFNVo1R1dlaEw5L0E5YlJOQTNSYnJzWjVpMEpjYXN0YVJMN1NwNWZwL2pENWR4cWMvVWRUVm5sdlMxNmFuKzJZZnN3ZS9RdUxvbFJVQ3JjT0UyKzJpQTUrdHpkNk5tTUdRd0RnWURWUjBQQVFIL0JBUURBZ0VHTUJJR0ExVWRFd0VCL3dRSU1BWUJBZjhDQVFFd0hRWURWUjBPQkJZRUZNakZIUUJCbWlRcE1sRWs2dzJ1U3UxS0J0UHNNQjhHQTFVZEl3UVlNQmFBRk1qRkhRQkJtaVFwTWxFazZ3MnVTdTFLQnRQc01Bb0dDQ3FHU000OUJBTURBMmdBTUdVQ01IOGxpV0pmTXVpNnZYWEJoakRnWTRNd3NsbU4vVEp4VmUvODNXckZvbXdtTmYwNTZ5MVg0OEY5YzRtM2Ezb3pYQUl4QUtqUmF5NS9hai9qc0tLR0lrbVFhdGpJOHV1cEhyLytDeEZ2YUpXbXBZcU5rTERHUlUrOW9yemg1aEkyUnJjdWFRPT0iCiAgICAgICAgICB9CiAgICAgICAgXQogICAgICB9LAogICAgICAidmFsaWRGb3IiOiB7CiAgICAgICAgInN0YXJ0IjogIjIwMjEtMDMtMDdUMDM6MjA6MjkuMDAwWiIsCiAgICAgICAgImVuZCI6ICIyMDIyLTEyLTMxVDIzOjU5OjU5Ljk5OVoiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJzdWJqZWN0IjogewogICAgICAgICJvcmdhbml6YXRpb24iOiAic2lnc3RvcmUuZGV2IiwKICAgICAgICAiY29tbW9uTmFtZSI6ICJzaWdzdG9yZSIKICAgICAgfSwKICAgICAgInVyaSI6ICJodHRwczovL2Z1bGNpby5zaWdzdG9yZS5kZXYiLAogICAgICAiY2VydENoYWluIjogewogICAgICAgICJjZXJ0aWZpY2F0ZXMiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJyYXdCeXRlcyI6ICJNSUlDR2pDQ0FhR2dBd0lCQWdJVUFMblZpVmZuVTBickphc21Sa0hybi9VbmZhUXdDZ1lJS29aSXpqMEVBd013S2pFVk1CTUdBMVVFQ2hNTWMybG5jM1J2Y21VdVpHVjJNUkV3RHdZRFZRUURFd2h6YVdkemRHOXlaVEFlRncweU1qQTBNVE15TURBMk1UVmFGdzB6TVRFd01EVXhNelUyTlRoYU1EY3hGVEFUQmdOVkJBb1RESE5wWjNOMGIzSmxMbVJsZGpFZU1Cd0dBMVVFQXhNVmMybG5jM1J2Y21VdGFXNTBaWEp0WldScFlYUmxNSFl3RUFZSEtvWkl6ajBDQVFZRks0RUVBQ0lEWWdBRThSVlMveXNIK05PdnVEWnlQSVp0aWxnVUY5TmxhcllwQWQ5SFAxdkJCSDFVNUNWNzdMU1M3czBaaUg0bkU3SHY3cHRTNkx2dlIvU1RrNzk4TFZnTXpMbEo0SGVJZkYzdEhTYWV4TGNZcFNBU3Ixa1MwTi9SZ0JKei85aldDaVhubzNzd2VUQU9CZ05WSFE4QkFmOEVCQU1DQVFZd0V3WURWUjBsQkF3d0NnWUlLd1lCQlFVSEF3TXdFZ1lEVlIwVEFRSC9CQWd3QmdFQi93SUJBREFkQmdOVkhRNEVGZ1FVMzlQcHoxWWtFWmI1cU5qcEtGV2l4aTRZWkQ4d0h3WURWUjBqQkJnd0ZvQVVXTUFlWDVGRnBXYXBlc3lRb1pNaTBDckZ4Zm93Q2dZSUtvWkl6ajBFQXdNRFp3QXdaQUl3UENzUUs0RFlpWllEUElhRGk1SEZLbmZ4WHg2QVNTVm1FUmZzeW5ZQmlYMlg2U0pSblpVODQvOURaZG5GdnZ4bUFqQk90NlFwQmxjNEovMER4dmtUQ3FwY2x2emlMNkJDQ1BuamRsSUIzUHUzQnhzUG15Z1VZN0lpMnpiZENkbGlpb3c9IgogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgInJhd0J5dGVzIjogIk1JSUI5ekNDQVh5Z0F3SUJBZ0lVQUxaTkFQRmR4SFB3amVEbG9Ed3lZQ2hBTy80d0NnWUlLb1pJemowRUF3TXdLakVWTUJNR0ExVUVDaE1NYzJsbmMzUnZjbVV1WkdWMk1SRXdEd1lEVlFRREV3aHphV2R6ZEc5eVpUQWVGdzB5TVRFd01EY3hNelUyTlRsYUZ3MHpNVEV3TURVeE16VTJOVGhhTUNveEZUQVRCZ05WQkFvVERITnBaM04wYjNKbExtUmxkakVSTUE4R0ExVUVBeE1JYzJsbmMzUnZjbVV3ZGpBUUJnY3Foa2pPUFFJQkJnVXJnUVFBSWdOaUFBVDdYZUZUNHJiM1BRR3dTNElhanRMazMvT2xucGdhbmdhQmNsWXBzWUJyNWkrNHluQjA3Y2ViM0xQME9JT1pkeGV4WDY5YzVpVnV5SlJRK0h6MDV5aStVRjN1QldBbEhwaVM1c2gwK0gyR0hFN1NYcmsxRUM1bTFUcjE5TDlnZzkyall6QmhNQTRHQTFVZER3RUIvd1FFQXdJQkJqQVBCZ05WSFJNQkFmOEVCVEFEQVFIL01CMEdBMVVkRGdRV0JCUll3QjVma1VXbFpxbDZ6SkNoa3lMUUtzWEYrakFmQmdOVkhTTUVHREFXZ0JSWXdCNWZrVVdsWnFsNnpKQ2hreUxRS3NYRitqQUtCZ2dxaGtqT1BRUURBd05wQURCbUFqRUFqMW5IZVhacCsxM05XQk5hK0VEc0RQOEcxV1dnMXRDTVdQL1dIUHFwYVZvMGpoc3dlTkZaZ1NzMGVFN3dZSTRxQWpFQTJXQjlvdDk4c0lrb0YzdlpZZGQzL1Z0V0I1YjlUTk1lYTdJeC9zdEo1VGZjTExlQUJMRTRCTkpPc1E0dm5CSEoiCiAgICAgICAgICB9CiAgICAgICAgXQogICAgICB9LAogICAgICAidmFsaWRGb3IiOiB7CiAgICAgICAgInN0YXJ0IjogIjIwMjItMDQtMTNUMjA6MDY6MTUuMDAwWiIKICAgICAgfQogICAgfQogIF0sCiAgImN0bG9ncyI6IFsKICAgIHsKICAgICAgImJhc2VVcmwiOiAiaHR0cHM6Ly9jdGZlLnNpZ3N0b3JlLmRldi90ZXN0IiwKICAgICAgImhhc2hBbGdvcml0aG0iOiAiU0hBMl8yNTYiLAogICAgICAicHVibGljS2V5IjogewogICAgICAgICJyYXdCeXRlcyI6ICJNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUViZndSK1JKdWRYc2NnUkJScEtYMVhGRHkzUHl1ZER4ei9TZm5SaTFmVDhla3BmQmQyTzF1b3o3anIzWjhuS3p4QTY5RVVRK2VGQ0ZJM3pldWJQV1U3dz09IiwKICAgICAgICAia2V5RGV0YWlscyI6ICJQS0lYX0VDRFNBX1AyNTZfU0hBXzI1NiIsCiAgICAgICAgInZhbGlkRm9yIjogewogICAgICAgICAgInN0YXJ0IjogIjIwMjEtMDMtMTRUMDA6MDA6MDAuMDAwWiIsCiAgICAgICAgICAiZW5kIjogIjIwMjItMTAtMzFUMjM6NTk6NTkuOTk5WiIKICAgICAgICB9CiAgICAgIH0sCiAgICAgICJsb2dJZCI6IHsKICAgICAgICAia2V5SWQiOiAiQ0dDUzhDaFMvMmhGMGRGcko0U2NSV2NZckJZOXd6alNiZWE4SWdZMmIzST0iCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJiYXNlVXJsIjogImh0dHBzOi8vY3RmZS5zaWdzdG9yZS5kZXYvMjAyMiIsCiAgICAgICJoYXNoQWxnb3JpdGhtIjogIlNIQTJfMjU2IiwKICAgICAgInB1YmxpY0tleSI6IHsKICAgICAgICAicmF3Qnl0ZXMiOiAiTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFaVBTbEZpMENtRlRmRWpDVXFGOUh1Q0VjWVhOS0FhWWFsSUptQlo4eXllelBqVHFoeHJLQnBNbmFvY1Z0TEpCSTFlTTN1WG5RelFHQUpkSjRnczlGeXc9PSIsCiAgICAgICAgImtleURldGFpbHMiOiAiUEtJWF9FQ0RTQV9QMjU2X1NIQV8yNTYiLAogICAgICAgICJ2YWxpZEZvciI6IHsKICAgICAgICAgICJzdGFydCI6ICIyMDIyLTEwLTIwVDAwOjAwOjAwLjAwMFoiCiAgICAgICAgfQogICAgICB9LAogICAgICAibG9nSWQiOiB7CiAgICAgICAgImtleUlkIjogIjNUMHdhc2JIRVRKakdSNGNtV2MzQXFKS1hyamVQSzMvaDRweWdDOHA3bzQ9IgogICAgICB9CiAgICB9CiAgXSwKICAidGltZXN0YW1wQXV0aG9yaXRpZXMiOiBbCiAgICB7CiAgICAgICJzdWJqZWN0IjogewogICAgICAgICJvcmdhbml6YXRpb24iOiAiR2l0SHViLCBJbmMuIiwKICAgICAgICAiY29tbW9uTmFtZSI6ICJJbnRlcm5hbCBTZXJ2aWNlcyBSb290IgogICAgICB9LAogICAgICAiY2VydENoYWluIjogewogICAgICAgICJjZXJ0aWZpY2F0ZXMiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJyYXdCeXRlcyI6ICJNSUlCM0RDQ0FXS2dBd0lCQWdJVWNoa05zSDM2WGEwNGIxTHFJYytxcjlEVmVjTXdDZ1lJS29aSXpqMEVBd013TWpFVk1CTUdBMVVFQ2hNTVIybDBTSFZpTENCSmJtTXVNUmt3RndZRFZRUURFeEJVVTBFZ2FXNTBaWEp0WldScFlYUmxNQjRYRFRJek1EUXhOREF3TURBd01Gb1hEVEkwTURReE16QXdNREF3TUZvd01qRVZNQk1HQTFVRUNoTU1SMmwwU0hWaUxDQkpibU11TVJrd0Z3WURWUVFERXhCVVUwRWdWR2x0WlhOMFlXMXdhVzVuTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFVUQ1Wk5iU3FZTWQ2cjhxcE9PRVg5aWJHblpUOUdzdVhPaHIvZjhVOUZKdWdCR0V4S1lwNDBPVUxTMGVyalpXN3hWOXhWNTJObkpmNU9lRHE0ZTVaS3FOV01GUXdEZ1lEVlIwUEFRSC9CQVFEQWdlQU1CTUdBMVVkSlFRTU1Bb0dDQ3NHQVFVRkJ3TUlNQXdHQTFVZEV3RUIvd1FDTUFBd0h3WURWUjBqQkJnd0ZvQVVhVzFSdWRPZ1Z0MGxlcVkwV0tZYnVQcjQ3d0F3Q2dZSUtvWkl6ajBFQXdNRGFBQXdaUUl3YlVIOUh2RDRlakNaSk9XUW5xQWxrcVVSbGx2dTlNOCtWcUxiaVJLK3pTZlpDWndzaWxqUm44TVFRUlNrWEVFNUFqRUFnK1Z4cXRvamZWZnU4RGh6emhDeDlHS0VUYkpIYjE5aVY3Mm1NS1ViREFGbXpaNmJROGI1NFpiOHRpZHk1YVdlIgogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgInJhd0J5dGVzIjogIk1JSUNFRENDQVpXZ0F3SUJBZ0lVWDhaTzVRWFA3dk40ZE1RNWU5c1UzbnViOE9nd0NnWUlLb1pJemowRUF3TXdPREVWTUJNR0ExVUVDaE1NUjJsMFNIVmlMQ0JKYm1NdU1SOHdIUVlEVlFRREV4WkpiblJsY201aGJDQlRaWEoyYVdObGN5QlNiMjkwTUI0WERUSXpNRFF4TkRBd01EQXdNRm9YRFRJNE1EUXhNakF3TURBd01Gb3dNakVWTUJNR0ExVUVDaE1NUjJsMFNIVmlMQ0JKYm1NdU1Sa3dGd1lEVlFRREV4QlVVMEVnYVc1MFpYSnRaV1JwWVhSbE1IWXdFQVlIS29aSXpqMENBUVlGSzRFRUFDSURZZ0FFdk1MWS9kVFZidklKWUFOQXVzekV3Sm5RRTFsbGZ0eW55TUtJTWhoNDhIbXFiVnI1eWd5YnpzTFJMVktiQldPZFoyMWFlSnorZ1ppeXRaZXRxY3lGOVdsRVI1TkVNZjZKVjdaTm9qUXB4SHE0UkhHb0dTY2VRdi9xdlRpWnhFREtvMll3WkRBT0JnTlZIUThCQWY4RUJBTUNBUVl3RWdZRFZSMFRBUUgvQkFnd0JnRUIvd0lCQURBZEJnTlZIUTRFRmdRVWFXMVJ1ZE9nVnQwbGVxWTBXS1lidVByNDd3QXdId1lEVlIwakJCZ3dGb0FVOU5ZWWxvYm5BRzRjMC9xanh5SC9scS93eitRd0NnWUlLb1pJemowRUF3TURhUUF3WmdJeEFLMUIxODV5Z0NySVlGbElzM0dqc3dqbndTTUc2TFk4d29MVmRha0tEWnhWYThmOGNxTXMxRGhjeEowKzA5dzk1UUl4QU8rdEJ6Wms3dmpVSjlpSmdENFI2WldUeFFXS3FObTc0ak85OW8rbzlzdjRGSS9TWlRaVEZ5TW4wSUpFSGRObXlBPT0iCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAicmF3Qnl0ZXMiOiAiTUlJQjlEQ0NBWHFnQXdJQkFnSVVhL0pBa2RVaks0SlV3c3F0YWlSSkdXaHFMU293Q2dZSUtvWkl6ajBFQXdNd09ERVZNQk1HQTFVRUNoTU1SMmwwU0hWaUxDQkpibU11TVI4d0hRWURWUVFERXhaSmJuUmxjbTVoYkNCVFpYSjJhV05sY3lCU2IyOTBNQjRYRFRJek1EUXhOREF3TURBd01Gb1hEVE16TURReE1UQXdNREF3TUZvd09ERVZNQk1HQTFVRUNoTU1SMmwwU0hWaUxDQkpibU11TVI4d0hRWURWUVFERXhaSmJuUmxjbTVoYkNCVFpYSjJhV05sY3lCU2IyOTBNSFl3RUFZSEtvWkl6ajBDQVFZRks0RUVBQ0lEWWdBRWY5akZBWHh6NGt4NjhBSFJNT2tGQmhmbERjTVR2emFYejR4L0ZDY1hqSi8xcUVLb24vcVBJR25hVVJza0R0eU5iTkRPcGVKVERERnF0NDhpTVBybnpweDZJWndxZW1mVUpONHhCRVpmemErcFl0L2l5b2QrOXRacjIwUlJXU3YvbzBVd1F6QU9CZ05WSFE4QkFmOEVCQU1DQVFZd0VnWURWUjBUQVFIL0JBZ3dCZ0VCL3dJQkFqQWRCZ05WSFE0RUZnUVU5TllZbG9ibkFHNGMwL3FqeHlIL2xxL3d6K1F3Q2dZSUtvWkl6ajBFQXdNRGFBQXdaUUl4QUxaTFo4QmdSWHpLeExNTU45VklsTytlNGhyQm5OQmdGN3R6N0hucm93djJOZXRaRXJJQUNLRnltQmx2V0R2dE1BSXdaTytraTZzc1ExYnNabzk4TzhtRUFmMk5aN2lpQ2dERFUwVndqZWNvNnp5ZWgwekJUczkvN2dWNkFITlE1M3hEIgogICAgICAgICAgfQogICAgICAgIF0KICAgICAgfSwKICAgICAgInZhbGlkRm9yIjogewogICAgICAgICJzdGFydCI6ICIyMDIzLTA0LTE0VDAwOjAwOjAwLjAwMFoiCiAgICAgIH0KICAgIH0KICBdCn0K","registry.npmjs.org%2Fkeys.json":"ewogICAgImtleXMiOiBbCiAgICAgICAgewogICAgICAgICAgICAia2V5SWQiOiAiU0hBMjU2OmpsM2J3c3d1ODBQampva0NnaDBvMnc1YzJVNExoUUFFNTdnajljejFrekEiLAogICAgICAgICAgICAia2V5VXNhZ2UiOiAibnBtOnNpZ25hdHVyZXMiLAogICAgICAgICAgICAicHVibGljS2V5IjogewogICAgICAgICAgICAgICAgInJhd0J5dGVzIjogIk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRTFPbGIzek1BRkZ4WEtIaUlrUU81Y0ozWWhsNWk2VVBwK0lodXRlQkpidUhjQTVVb2dLbzBFV3RsV3dXNktTYUtvVE5FWUw3SmxDUWlWbmtoQmt0VWdnPT0iLAogICAgICAgICAgICAgICAgImtleURldGFpbHMiOiAiUEtJWF9FQ0RTQV9QMjU2X1NIQV8yNTYiLAogICAgICAgICAgICAgICAgInZhbGlkRm9yIjogewogICAgICAgICAgICAgICAgICAgICJzdGFydCI6ICIxOTk5LTAxLTAxVDAwOjAwOjAwLjAwMFoiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgImtleUlkIjogIlNIQTI1NjpqbDNid3N3dTgwUGpqb2tDZ2gwbzJ3NWMyVTRMaFFBRTU3Z2o5Y3oxa3pBIiwKICAgICAgICAgICAgImtleVVzYWdlIjogIm5wbTphdHRlc3RhdGlvbnMiLAogICAgICAgICAgICAicHVibGljS2V5IjogewogICAgICAgICAgICAgICAgInJhd0J5dGVzIjogIk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRTFPbGIzek1BRkZ4WEtIaUlrUU81Y0ozWWhsNWk2VVBwK0lodXRlQkpidUhjQTVVb2dLbzBFV3RsV3dXNktTYUtvVE5FWUw3SmxDUWlWbmtoQmt0VWdnPT0iLAogICAgICAgICAgICAgICAgImtleURldGFpbHMiOiAiUEtJWF9FQ0RTQV9QMjU2X1NIQV8yNTYiLAogICAgICAgICAgICAgICAgInZhbGlkRm9yIjogewogICAgICAgICAgICAgICAgICAgICJzdGFydCI6ICIyMDIyLTEyLTAxVDAwOjAwOjAwLjAwMFoiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICBdCn0K"}}}
diff --git a/deps/npm/node_modules/@sigstore/tuf/store/public-good-instance-root.json b/deps/npm/node_modules/@sigstore/tuf/store/public-good-instance-root.json
deleted file mode 100644
index e95c7e88cdf092..00000000000000
--- a/deps/npm/node_modules/@sigstore/tuf/store/public-good-instance-root.json
+++ /dev/null
@@ -1 +0,0 @@
-{"signed":{"_type":"root","spec_version":"1.0","version":7,"expires":"2023-10-04T13:08:11Z","keys":{"25a0eb450fd3ee2bd79218c963dce3f1cc6118badf251bf149f0bd07d5cabe99":{"keytype":"ecdsa-sha2-nistp256","scheme":"ecdsa-sha2-nistp256","keyid_hash_algorithms":["sha256","sha512"],"keyval":{"public":"-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEEXsz3SZXFb8jMV42j6pJlyjbjR8K\nN3Bwocexq6LMIb5qsWKOQvLN16NUefLc4HswOoumRsVVaajSpQS6fobkRw==\n-----END PUBLIC KEY-----\n"}},"2e61cd0cbf4a8f45809bda9f7f78c0d33ad11842ff94ae340873e2664dc843de":{"keytype":"ecdsa-sha2-nistp256","scheme":"ecdsa-sha2-nistp256","keyid_hash_algorithms":["sha256","sha512"],"keyval":{"public":"-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE0ghrh92Lw1Yr3idGV5WqCtMDB8Cx\n+D8hdC4w2ZLNIplVRoVGLskYa3gheMyOjiJ8kPi15aQ2//7P+oj7UvJPGw==\n-----END PUBLIC KEY-----\n"}},"45b283825eb184cabd582eb17b74fc8ed404f68cf452acabdad2ed6f90ce216b":{"keytype":"ecdsa-sha2-nistp256","scheme":"ecdsa-sha2-nistp256","keyid_hash_algorithms":["sha256","sha512"],"keyval":{"public":"-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAELrWvNt94v4R085ELeeCMxHp7PldF\n0/T1GxukUh2ODuggLGJE0pc1e8CSBf6CS91Fwo9FUOuRsjBUld+VqSyCdQ==\n-----END PUBLIC KEY-----\n"}},"7f7513b25429a64473e10ce3ad2f3da372bbdd14b65d07bbaf547e7c8bbbe62b":{"keytype":"ecdsa-sha2-nistp256","scheme":"ecdsa-sha2-nistp256","keyid_hash_algorithms":["sha256","sha512"],"keyval":{"public":"-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEinikSsAQmYkNeH5eYq/CnIzLaacO\nxlSaawQDOwqKy/tCqxq5xxPSJc21K4WIhs9GyOkKfzueY3GILzcMJZ4cWw==\n-----END PUBLIC KEY-----\n"}},"e1863ba02070322ebc626dcecf9d881a3a38c35c3b41a83765b6ad6c37eaec2a":{"keytype":"ecdsa-sha2-nistp256","scheme":"ecdsa-sha2-nistp256","keyid_hash_algorithms":["sha256","sha512"],"keyval":{"public":"-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWRiGr5+j+3J5SsH+Ztr5nE2H2wO7\nBV+nO3s93gLca18qTOzHY1oWyAGDykMSsGTUBSt9D+An0KfKsD2mfSM42Q==\n-----END PUBLIC KEY-----\n"}},"f5312f542c21273d9485a49394386c4575804770667f2ddb59b3bf0669fddd2f":{"keytype":"ecdsa-sha2-nistp256","scheme":"ecdsa-sha2-nistp256","keyid_hash_algorithms":["sha256","sha512"],"keyval":{"public":"-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEzBzVOmHCPojMVLSI364WiiV8NPrD\n6IgRxVliskz/v+y3JER5mcVGcONliDcWMC5J2lfHmjPNPhb4H7xm8LzfSA==\n-----END PUBLIC KEY-----\n"}},"ff51e17fcf253119b7033f6f57512631da4a0969442afcf9fc8b141c7f2be99c":{"keytype":"ecdsa-sha2-nistp256","scheme":"ecdsa-sha2-nistp256","keyid_hash_algorithms":["sha256","sha512"],"keyval":{"public":"-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEy8XKsmhBYDI8Jc0GwzBxeKax0cm5\nSTKEU65HPFunUn41sT8pi0FjM4IkHz/YUmwmLUO0Wt7lxhj6BkLIK4qYAw==\n-----END PUBLIC KEY-----\n"}}},"roles":{"root":{"keyids":["ff51e17fcf253119b7033f6f57512631da4a0969442afcf9fc8b141c7f2be99c","25a0eb450fd3ee2bd79218c963dce3f1cc6118badf251bf149f0bd07d5cabe99","f5312f542c21273d9485a49394386c4575804770667f2ddb59b3bf0669fddd2f","7f7513b25429a64473e10ce3ad2f3da372bbdd14b65d07bbaf547e7c8bbbe62b","2e61cd0cbf4a8f45809bda9f7f78c0d33ad11842ff94ae340873e2664dc843de"],"threshold":3},"snapshot":{"keyids":["45b283825eb184cabd582eb17b74fc8ed404f68cf452acabdad2ed6f90ce216b"],"threshold":1},"targets":{"keyids":["ff51e17fcf253119b7033f6f57512631da4a0969442afcf9fc8b141c7f2be99c","25a0eb450fd3ee2bd79218c963dce3f1cc6118badf251bf149f0bd07d5cabe99","f5312f542c21273d9485a49394386c4575804770667f2ddb59b3bf0669fddd2f","7f7513b25429a64473e10ce3ad2f3da372bbdd14b65d07bbaf547e7c8bbbe62b","2e61cd0cbf4a8f45809bda9f7f78c0d33ad11842ff94ae340873e2664dc843de"],"threshold":3},"timestamp":{"keyids":["e1863ba02070322ebc626dcecf9d881a3a38c35c3b41a83765b6ad6c37eaec2a"],"threshold":1}},"consistent_snapshot":true},"signatures":[{"keyid":"25a0eb450fd3ee2bd79218c963dce3f1cc6118badf251bf149f0bd07d5cabe99","sig":"3046022100c0610c0055ce5c4a52d054d7322e7b514d55baf44423d63aa4daa077cc60fd1f022100a097f2803f090fb66c42ead915a2c46ebe7db53a32bf18f2188275cc936f8bdd"},{"keyid":"f5312f542c21273d9485a49394386c4575804770667f2ddb59b3bf0669fddd2f","sig":"304502203134f0468810299d5493a867c40630b341296b92e59c29821311d353343bb3a4022100e667ae3d304e7e3da0894c7425f6b9ecd917106841280e5cf6f3496ad5f8f68e"},{"keyid":"7f7513b25429a64473e10ce3ad2f3da372bbdd14b65d07bbaf547e7c8bbbe62b","sig":"3045022037fe5f45426f21eaaf4730d2136f2b1611d6379688f79b9d1e3f61719997135c022100b63b022d7b79d4694b96f416d88aa4d7b1a3bff8a01f4fb51e0f42137c7d2d06"},{"keyid":"2e61cd0cbf4a8f45809bda9f7f78c0d33ad11842ff94ae340873e2664dc843de","sig":"3044022007cc8fcc4940809f2751ad5b535f4c5f53f5b4952f5b5696b09668e743306ac1022006dfcdf94e94c92163eeb1b47796db62cedaa730aa13aa61b573fe23714730f2"}]}
diff --git a/deps/npm/node_modules/@sigstore/verify/dist/bundle/dsse.js b/deps/npm/node_modules/@sigstore/verify/dist/bundle/dsse.js
new file mode 100644
index 00000000000000..193f875fd1014e
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/verify/dist/bundle/dsse.js
@@ -0,0 +1,43 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.DSSESignatureContent = void 0;
+/*
+Copyright 2023 The Sigstore 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.
+*/
+const core_1 = require("@sigstore/core");
+class DSSESignatureContent {
+ constructor(env) {
+ this.env = env;
+ }
+ compareDigest(digest) {
+ return core_1.crypto.bufferEqual(digest, core_1.crypto.hash(this.env.payload));
+ }
+ compareSignature(signature) {
+ return core_1.crypto.bufferEqual(signature, this.signature);
+ }
+ verifySignature(key) {
+ return core_1.crypto.verify(this.preAuthEncoding, key, this.signature);
+ }
+ get signature() {
+ return this.env.signatures.length > 0
+ ? this.env.signatures[0].sig
+ : Buffer.from('');
+ }
+ // DSSE Pre-Authentication Encoding
+ get preAuthEncoding() {
+ return core_1.dsse.preAuthEncoding(this.env.payloadType, this.env.payload);
+ }
+}
+exports.DSSESignatureContent = DSSESignatureContent;
diff --git a/deps/npm/node_modules/@sigstore/verify/dist/bundle/index.js b/deps/npm/node_modules/@sigstore/verify/dist/bundle/index.js
new file mode 100644
index 00000000000000..63f8d4c4998811
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/verify/dist/bundle/index.js
@@ -0,0 +1,58 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.signatureContent = exports.toSignedEntity = void 0;
+const core_1 = require("@sigstore/core");
+const dsse_1 = require("./dsse");
+const message_1 = require("./message");
+function toSignedEntity(bundle, artifact) {
+ const { tlogEntries, timestampVerificationData } = bundle.verificationMaterial;
+ const timestamps = [];
+ for (const entry of tlogEntries) {
+ timestamps.push({
+ $case: 'transparency-log',
+ tlogEntry: entry,
+ });
+ }
+ for (const ts of timestampVerificationData?.rfc3161Timestamps ?? []) {
+ timestamps.push({
+ $case: 'timestamp-authority',
+ timestamp: core_1.RFC3161Timestamp.parse(ts.signedTimestamp),
+ });
+ }
+ return {
+ signature: signatureContent(bundle, artifact),
+ key: key(bundle),
+ tlogEntries,
+ timestamps,
+ };
+}
+exports.toSignedEntity = toSignedEntity;
+function signatureContent(bundle, artifact) {
+ switch (bundle.content.$case) {
+ case 'dsseEnvelope':
+ return new dsse_1.DSSESignatureContent(bundle.content.dsseEnvelope);
+ case 'messageSignature':
+ return new message_1.MessageSignatureContent(bundle.content.messageSignature, artifact);
+ }
+}
+exports.signatureContent = signatureContent;
+function key(bundle) {
+ switch (bundle.verificationMaterial.content.$case) {
+ case 'publicKey':
+ return {
+ $case: 'public-key',
+ hint: bundle.verificationMaterial.content.publicKey.hint,
+ };
+ case 'x509CertificateChain':
+ return {
+ $case: 'certificate',
+ certificate: core_1.X509Certificate.parse(bundle.verificationMaterial.content.x509CertificateChain
+ .certificates[0].rawBytes),
+ };
+ case 'certificate':
+ return {
+ $case: 'certificate',
+ certificate: core_1.X509Certificate.parse(bundle.verificationMaterial.content.certificate.rawBytes),
+ };
+ }
+}
diff --git a/deps/npm/node_modules/@sigstore/verify/dist/bundle/message.js b/deps/npm/node_modules/@sigstore/verify/dist/bundle/message.js
new file mode 100644
index 00000000000000..836148c68a8b66
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/verify/dist/bundle/message.js
@@ -0,0 +1,36 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.MessageSignatureContent = void 0;
+/*
+Copyright 2023 The Sigstore 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.
+*/
+const core_1 = require("@sigstore/core");
+class MessageSignatureContent {
+ constructor(messageSignature, artifact) {
+ this.signature = messageSignature.signature;
+ this.messageDigest = messageSignature.messageDigest.digest;
+ this.artifact = artifact;
+ }
+ compareSignature(signature) {
+ return core_1.crypto.bufferEqual(signature, this.signature);
+ }
+ compareDigest(digest) {
+ return core_1.crypto.bufferEqual(digest, this.messageDigest);
+ }
+ verifySignature(key) {
+ return core_1.crypto.verify(this.artifact, key, this.signature);
+ }
+}
+exports.MessageSignatureContent = MessageSignatureContent;
diff --git a/deps/npm/node_modules/sigstore/dist/error.js b/deps/npm/node_modules/@sigstore/verify/dist/error.js
similarity index 92%
rename from deps/npm/node_modules/sigstore/dist/error.js
rename to deps/npm/node_modules/@sigstore/verify/dist/error.js
index b0a7dbc83f7105..6cb1cd41213435 100644
--- a/deps/npm/node_modules/sigstore/dist/error.js
+++ b/deps/npm/node_modules/@sigstore/verify/dist/error.js
@@ -1,4 +1,6 @@
"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.PolicyError = exports.VerificationError = void 0;
/*
Copyright 2023 The Sigstore Authors.
@@ -14,20 +16,15 @@ 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.
*/
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.PolicyError = exports.VerificationError = void 0;
class BaseError extends Error {
constructor({ code, message, cause, }) {
super(message);
- this.name = this.constructor.name;
this.code = code;
this.cause = cause;
+ this.name = this.constructor.name;
}
}
class VerificationError extends BaseError {
- constructor(message) {
- super({ code: 'VERIFICATION_ERROR', message });
- }
}
exports.VerificationError = VerificationError;
class PolicyError extends BaseError {
diff --git a/deps/npm/node_modules/@sigstore/verify/dist/index.js b/deps/npm/node_modules/@sigstore/verify/dist/index.js
new file mode 100644
index 00000000000000..3222876fcd68b7
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/verify/dist/index.js
@@ -0,0 +1,28 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.Verifier = exports.toTrustMaterial = exports.VerificationError = exports.PolicyError = exports.toSignedEntity = void 0;
+/* istanbul ignore file */
+/*
+Copyright 2023 The Sigstore 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.
+*/
+var bundle_1 = require("./bundle");
+Object.defineProperty(exports, "toSignedEntity", { enumerable: true, get: function () { return bundle_1.toSignedEntity; } });
+var error_1 = require("./error");
+Object.defineProperty(exports, "PolicyError", { enumerable: true, get: function () { return error_1.PolicyError; } });
+Object.defineProperty(exports, "VerificationError", { enumerable: true, get: function () { return error_1.VerificationError; } });
+var trust_1 = require("./trust");
+Object.defineProperty(exports, "toTrustMaterial", { enumerable: true, get: function () { return trust_1.toTrustMaterial; } });
+var verifier_1 = require("./verifier");
+Object.defineProperty(exports, "Verifier", { enumerable: true, get: function () { return verifier_1.Verifier; } });
diff --git a/deps/npm/node_modules/sigstore/dist/x509/verify.js b/deps/npm/node_modules/@sigstore/verify/dist/key/certificate.js
similarity index 71%
rename from deps/npm/node_modules/sigstore/dist/x509/verify.js
rename to deps/npm/node_modules/@sigstore/verify/dist/key/certificate.js
index b4c7f39912a847..c9140dd98d58a6 100644
--- a/deps/npm/node_modules/sigstore/dist/x509/verify.js
+++ b/deps/npm/node_modules/@sigstore/verify/dist/key/certificate.js
@@ -1,25 +1,36 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
-exports.verifyCertificateChain = void 0;
-/*
-Copyright 2023 The Sigstore 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.
-*/
+exports.CertificateChainVerifier = exports.verifyCertificateChain = void 0;
const error_1 = require("../error");
-function verifyCertificateChain(opts) {
- const verifier = new CertificateChainVerifier(opts);
- return verifier.verify();
+const trust_1 = require("../trust");
+function verifyCertificateChain(leaf, certificateAuthorities) {
+ // Filter list of trusted CAs to those which are valid for the given
+ // leaf certificate.
+ const cas = (0, trust_1.filterCertAuthorities)(certificateAuthorities, {
+ start: leaf.notBefore,
+ end: leaf.notAfter,
+ });
+ /* eslint-disable-next-line @typescript-eslint/no-explicit-any */
+ let error;
+ for (const ca of cas) {
+ try {
+ const verifier = new CertificateChainVerifier({
+ trustedCerts: ca.certChain,
+ untrustedCert: leaf,
+ });
+ return verifier.verify();
+ }
+ catch (err) {
+ error = err;
+ }
+ }
+ // If we failed to verify the certificate chain for all of the trusted
+ // CAs, throw the last error we encountered.
+ throw new error_1.VerificationError({
+ code: 'CERTIFICATE_ERROR',
+ message: 'Failed to verify certificate chain',
+ cause: error,
+ });
}
exports.verifyCertificateChain = verifyCertificateChain;
class CertificateChainVerifier {
@@ -30,7 +41,6 @@ class CertificateChainVerifier {
...opts.trustedCerts,
opts.untrustedCert,
]);
- this.validAt = opts.validAt || new Date();
}
verify() {
// Construct certificate path from leaf to root
@@ -47,9 +57,13 @@ class CertificateChainVerifier {
// Filter for paths which contain a trusted certificate
paths = paths.filter((path) => path.some((cert) => this.trustedCerts.includes(cert)));
if (paths.length === 0) {
- throw new error_1.VerificationError('No trusted certificate path found');
+ throw new error_1.VerificationError({
+ code: 'CERTIFICATE_ERROR',
+ message: 'no trusted certificate path found',
+ });
}
// Find the shortest of possible paths
+ /* istanbul ignore next */
const path = paths.reduce((prev, curr) => prev.length < curr.length ? prev : curr);
// Construct chain from shortest path
// Removes the last certificate in the path, which will be a second copy
@@ -61,7 +75,10 @@ class CertificateChainVerifier {
const paths = [];
const issuers = this.findIssuer(certificate);
if (issuers.length === 0) {
- throw new error_1.VerificationError('No valid certificate path found');
+ throw new error_1.VerificationError({
+ code: 'CERTIFICATE_ERROR',
+ message: 'no valid certificate path found',
+ });
}
for (let i = 0; i < issuers.length; i++) {
const issuer = issuers[i];
@@ -119,30 +136,37 @@ class CertificateChainVerifier {
return certificate.verify(issuer);
}
catch (ex) {
+ /* istanbul ignore next - should never error */
return false;
}
});
return issuers;
}
checkPath(path) {
+ /* istanbul ignore if */
if (path.length < 1) {
- throw new error_1.VerificationError('Certificate chain must contain at least one certificate');
- }
- // Check that all certificates are valid at the check date
- const validForDate = path.every((cert) => cert.validForDate(this.validAt));
- if (!validForDate) {
- throw new error_1.VerificationError('Certificate is not valid or expired at the specified date');
+ throw new error_1.VerificationError({
+ code: 'CERTIFICATE_ERROR',
+ message: 'certificate chain must contain at least one certificate',
+ });
}
// Ensure that all certificates beyond the leaf are CAs
const validCAs = path.slice(1).every((cert) => cert.isCA);
if (!validCAs) {
- throw new error_1.VerificationError('Intermediate certificate is not a CA');
+ throw new error_1.VerificationError({
+ code: 'CERTIFICATE_ERROR',
+ message: 'intermediate certificate is not a CA',
+ });
}
// Certificate's issuer must match the subject of the next certificate
// in the chain
for (let i = path.length - 2; i >= 0; i--) {
+ /* istanbul ignore if */
if (!path[i].issuer.equals(path[i + 1].subject)) {
- throw new error_1.VerificationError('Incorrect certificate name chaining');
+ throw new error_1.VerificationError({
+ code: 'CERTIFICATE_ERROR',
+ message: 'incorrect certificate name chaining',
+ });
}
}
// Check pathlength constraints
@@ -157,12 +181,16 @@ class CertificateChainVerifier {
// greater than or equal to it's own depth in the chain (with an
// adjustment for the leaf certificate)
if (pathLength !== undefined && pathLength < i - 1) {
- throw new error_1.VerificationError('Path length constraint exceeded');
+ throw new error_1.VerificationError({
+ code: 'CERTIFICATE_ERROR',
+ message: 'path length constraint exceeded',
+ });
}
}
}
}
}
+exports.CertificateChainVerifier = CertificateChainVerifier;
// Remove duplicate certificates from the array
function dedupeCertificates(certs) {
for (let i = 0; i < certs.length; i++) {
diff --git a/deps/npm/node_modules/@sigstore/verify/dist/key/index.js b/deps/npm/node_modules/@sigstore/verify/dist/key/index.js
new file mode 100644
index 00000000000000..682a306803a991
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/verify/dist/key/index.js
@@ -0,0 +1,72 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.verifyCertificate = exports.verifyPublicKey = void 0;
+/*
+Copyright 2023 The Sigstore 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.
+*/
+const core_1 = require("@sigstore/core");
+const error_1 = require("../error");
+const certificate_1 = require("./certificate");
+const sct_1 = require("./sct");
+const OID_FULCIO_ISSUER_V1 = '1.3.6.1.4.1.57264.1.1';
+const OID_FULCIO_ISSUER_V2 = '1.3.6.1.4.1.57264.1.8';
+function verifyPublicKey(hint, timestamps, trustMaterial) {
+ const key = trustMaterial.publicKey(hint);
+ timestamps.forEach((timestamp) => {
+ if (!key.validFor(timestamp)) {
+ throw new error_1.VerificationError({
+ code: 'PUBLIC_KEY_ERROR',
+ message: `Public key is not valid for timestamp: ${timestamp.toISOString()}`,
+ });
+ }
+ });
+ return { key: key.publicKey };
+}
+exports.verifyPublicKey = verifyPublicKey;
+function verifyCertificate(leaf, timestamps, trustMaterial) {
+ // Check that leaf certificate chains to a trusted CA
+ const path = (0, certificate_1.verifyCertificateChain)(leaf, trustMaterial.certificateAuthorities);
+ // Check that ALL certificates are valid for ALL of the timestamps
+ const validForDate = timestamps.every((timestamp) => path.every((cert) => cert.validForDate(timestamp)));
+ if (!validForDate) {
+ throw new error_1.VerificationError({
+ code: 'CERTIFICATE_ERROR',
+ message: 'certificate is not valid or expired at the specified date',
+ });
+ }
+ return {
+ scts: (0, sct_1.verifySCTs)(path[0], path[1], trustMaterial.ctlogs),
+ signer: getSigner(path[0]),
+ };
+}
+exports.verifyCertificate = verifyCertificate;
+function getSigner(cert) {
+ let issuer;
+ const issuerExtension = cert.extension(OID_FULCIO_ISSUER_V2);
+ if (issuerExtension) {
+ issuer = issuerExtension.valueObj.subs?.[0]?.value.toString('ascii');
+ }
+ else {
+ issuer = cert.extension(OID_FULCIO_ISSUER_V1)?.value.toString('ascii');
+ }
+ const identity = {
+ extensions: { issuer },
+ subjectAlternativeName: cert.subjectAltName,
+ };
+ return {
+ key: core_1.crypto.createPublicKey(cert.publicKey),
+ identity,
+ };
+}
diff --git a/deps/npm/node_modules/@sigstore/verify/dist/key/sct.js b/deps/npm/node_modules/@sigstore/verify/dist/key/sct.js
new file mode 100644
index 00000000000000..aea412840e1039
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/verify/dist/key/sct.js
@@ -0,0 +1,79 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.verifySCTs = void 0;
+/*
+Copyright 2023 The Sigstore 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.
+*/
+const core_1 = require("@sigstore/core");
+const error_1 = require("../error");
+const trust_1 = require("../trust");
+function verifySCTs(cert, issuer, ctlogs) {
+ let extSCT;
+ // Verifying the SCT requires that we remove the SCT extension and
+ // re-encode the TBS structure to DER -- this value is part of the data
+ // over which the signature is calculated. Since this is a destructive action
+ // we create a copy of the certificate so we can remove the SCT extension
+ // without affecting the original certificate.
+ const clone = cert.clone();
+ // Intentionally not using the findExtension method here because we want to
+ // remove the the SCT extension from the certificate before calculating the
+ // PreCert structure
+ for (let i = 0; i < clone.extensions.length; i++) {
+ const ext = clone.extensions[i];
+ if (ext.subs[0].toOID() === core_1.EXTENSION_OID_SCT) {
+ extSCT = new core_1.X509SCTExtension(ext);
+ // Remove the extension from the certificate
+ clone.extensions.splice(i, 1);
+ break;
+ }
+ }
+ // No SCT extension found to verify
+ if (!extSCT) {
+ return [];
+ }
+ // Found an SCT extension but it has no SCTs
+ /* istanbul ignore if -- too difficult to fabricate test case for this */
+ if (extSCT.signedCertificateTimestamps.length === 0) {
+ return [];
+ }
+ // Construct the PreCert structure
+ // https://www.rfc-editor.org/rfc/rfc6962#section-3.2
+ const preCert = new core_1.ByteStream();
+ // Calculate hash of the issuer's public key
+ const issuerId = core_1.crypto.hash(issuer.publicKey);
+ preCert.appendView(issuerId);
+ // Re-encodes the certificate to DER after removing the SCT extension
+ const tbs = clone.tbsCertificate.toDER();
+ preCert.appendUint24(tbs.length);
+ preCert.appendView(tbs);
+ // Calculate and return the verification results for each SCT
+ return extSCT.signedCertificateTimestamps.map((sct) => {
+ // Find the ctlog instance that corresponds to the SCT's logID
+ const validCTLogs = (0, trust_1.filterTLogAuthorities)(ctlogs, {
+ logID: sct.logID,
+ targetDate: sct.datetime,
+ });
+ // See if the SCT is valid for any of the CT logs
+ const verified = validCTLogs.some((log) => sct.verify(preCert.buffer, log.publicKey));
+ if (!verified) {
+ throw new error_1.VerificationError({
+ code: 'CERTIFICATE_ERROR',
+ message: 'SCT verification failed',
+ });
+ }
+ return sct.logID;
+ });
+}
+exports.verifySCTs = verifySCTs;
diff --git a/deps/npm/node_modules/@sigstore/verify/dist/policy.js b/deps/npm/node_modules/@sigstore/verify/dist/policy.js
new file mode 100644
index 00000000000000..731e5c83328475
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/verify/dist/policy.js
@@ -0,0 +1,25 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.verifyExtensions = exports.verifySubjectAlternativeName = void 0;
+const error_1 = require("./error");
+function verifySubjectAlternativeName(policyIdentity, signerIdentity) {
+ if (signerIdentity === undefined || !signerIdentity.match(policyIdentity)) {
+ throw new error_1.PolicyError({
+ code: 'UNTRUSTED_SIGNER_ERROR',
+ message: `certificate identity error - expected ${policyIdentity}, got ${signerIdentity}`,
+ });
+ }
+}
+exports.verifySubjectAlternativeName = verifySubjectAlternativeName;
+function verifyExtensions(policyExtensions, signerExtensions = {}) {
+ let key;
+ for (key in policyExtensions) {
+ if (signerExtensions[key] !== policyExtensions[key]) {
+ throw new error_1.PolicyError({
+ code: 'UNTRUSTED_SIGNER_ERROR',
+ message: `invalid certificate extension - expected ${key}=${policyExtensions[key]}, got ${key}=${signerExtensions[key]}`,
+ });
+ }
+ }
+}
+exports.verifyExtensions = verifyExtensions;
diff --git a/deps/npm/node_modules/sigstore/dist/types/fetch.js b/deps/npm/node_modules/@sigstore/verify/dist/shared.types.js
similarity index 100%
rename from deps/npm/node_modules/sigstore/dist/types/fetch.js
rename to deps/npm/node_modules/@sigstore/verify/dist/shared.types.js
diff --git a/deps/npm/node_modules/sigstore/dist/tlog/verify/checkpoint.js b/deps/npm/node_modules/@sigstore/verify/dist/timestamp/checkpoint.js
similarity index 58%
rename from deps/npm/node_modules/sigstore/dist/tlog/verify/checkpoint.js
rename to deps/npm/node_modules/@sigstore/verify/dist/timestamp/checkpoint.js
index f6f35a5cad64dd..04a87383f0fd17 100644
--- a/deps/npm/node_modules/sigstore/dist/tlog/verify/checkpoint.js
+++ b/deps/npm/node_modules/@sigstore/verify/dist/timestamp/checkpoint.js
@@ -1,8 +1,24 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.verifyCheckpoint = void 0;
-const error_1 = require("../../error");
-const util_1 = require("../../util");
+/*
+Copyright 2023 The Sigstore 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.
+*/
+const core_1 = require("@sigstore/core");
+const error_1 = require("../error");
+const trust_1 = require("../trust");
// Separator between the note and the signatures in a checkpoint
const CHECKPOINT_SEPARATOR = '\n\n';
// Checkpoint signatures are of the following form:
@@ -23,17 +39,44 @@ const SIGNATURE_REGEX = /\u2014 (\S+) (\S+)\n/g;
function verifyCheckpoint(entry, tlogs) {
// Filter tlog instances to just those which were valid at the time of the
// entry
- const validTLogs = filterTLogInstances(tlogs, entry.integratedTime);
+ const validTLogs = (0, trust_1.filterTLogAuthorities)(tlogs, {
+ targetDate: new Date(Number(entry.integratedTime) * 1000),
+ });
const inclusionProof = entry.inclusionProof;
const signedNote = SignedNote.fromString(inclusionProof.checkpoint.envelope);
const checkpoint = LogCheckpoint.fromString(signedNote.note);
- // Verify that the signatures in the checkpoint are all valid, also check
- // that the root hash from the checkpoint matches the root hash in the
+ // Verify that the signatures in the checkpoint are all valid
+ if (!verifySignedNote(signedNote, validTLogs)) {
+ throw new error_1.VerificationError({
+ code: 'TLOG_INCLUSION_PROOF_ERROR',
+ message: 'invalid checkpoint signature',
+ });
+ }
+ // Verify that the root hash from the checkpoint matches the root hash in the
// inclusion proof
- return (signedNote.verify(validTLogs) &&
- util_1.crypto.bufferEqual(checkpoint.logHash, inclusionProof.rootHash));
+ if (!core_1.crypto.bufferEqual(checkpoint.logHash, inclusionProof.rootHash)) {
+ throw new error_1.VerificationError({
+ code: 'TLOG_INCLUSION_PROOF_ERROR',
+ message: 'root hash mismatch',
+ });
+ }
}
exports.verifyCheckpoint = verifyCheckpoint;
+// Verifies the signatures in the SignedNote. For each signature, the
+// corresponding transparency log is looked up by the key hint and the
+// signature is verified against the public key in the transparency log.
+// Throws an error if any of the signatures are invalid.
+function verifySignedNote(signedNote, tlogs) {
+ const data = Buffer.from(signedNote.note, 'utf-8');
+ return signedNote.signatures.every((signature) => {
+ // Find the transparency log instance with the matching key hint
+ const tlog = tlogs.find((tlog) => core_1.crypto.bufferEqual(tlog.logID.subarray(0, 4), signature.keyHint));
+ if (!tlog) {
+ return false;
+ }
+ return core_1.crypto.verify(data, tlog.publicKey, signature.signature);
+ });
+}
// SignedNote represents a signed note from a transparency log checkpoint. Consists
// of a body (or note) and one more signatures calculated over the body. See
// https://github.com/transparency-dev/formats/blob/main/log/README.md#signed-envelope
@@ -45,7 +88,10 @@ class SignedNote {
// Deserialize a SignedNote from a string
static fromString(envelope) {
if (!envelope.includes(CHECKPOINT_SEPARATOR)) {
- throw new error_1.VerificationError('malformed checkpoint: no separator');
+ throw new error_1.VerificationError({
+ code: 'TLOG_INCLUSION_PROOF_ERROR',
+ message: 'missing checkpoint separator',
+ });
}
// Split the note into the header and the data portions at the separator
const split = envelope.indexOf(CHECKPOINT_SEPARATOR);
@@ -60,7 +106,10 @@ class SignedNote {
const [, name, signature] = match;
const sigBytes = Buffer.from(signature, 'base64');
if (sigBytes.length < 5) {
- throw new error_1.VerificationError('malformed checkpoint: invalid signature');
+ throw new error_1.VerificationError({
+ code: 'TLOG_INCLUSION_PROOF_ERROR',
+ message: 'malformed checkpoint signature',
+ });
}
return {
name,
@@ -69,26 +118,13 @@ class SignedNote {
};
});
if (signatures.length === 0) {
- throw new error_1.VerificationError('malformed checkpoint: no signatures');
+ throw new error_1.VerificationError({
+ code: 'TLOG_INCLUSION_PROOF_ERROR',
+ message: 'no signatures found in checkpoint',
+ });
}
return new SignedNote(header, signatures);
}
- // Verifies the signatures in the SignedNote. For each signature, the
- // corresponding transparency log is looked up by the key hint and the
- // signature is verified against the public key in the transparency log.
- // Throws an error if any of the signatures are invalid.
- verify(tlogs) {
- const data = Buffer.from(this.note, 'utf-8');
- return this.signatures.every((signature) => {
- // Find the transparency log instance with the matching key hint
- const tlog = tlogs.find((tlog) => util_1.crypto.bufferEqual(tlog.logId.keyId.subarray(0, 4), signature.keyHint));
- if (!tlog) {
- return false;
- }
- const publicKey = util_1.crypto.createPublicKey(tlog.publicKey.rawBytes);
- return util_1.crypto.verifyBlob(data, publicKey, signature.signature);
- });
- }
}
// LogCheckpoint represents a transparency log checkpoint. Consists of the
// following:
@@ -106,9 +142,12 @@ class LogCheckpoint {
this.rest = rest;
}
static fromString(note) {
- const lines = note.trim().split('\n');
- if (lines.length < 4) {
- throw new error_1.VerificationError('malformed checkpoint: too few lines in header');
+ const lines = note.trimEnd().split('\n');
+ if (lines.length < 3) {
+ throw new error_1.VerificationError({
+ code: 'TLOG_INCLUSION_PROOF_ERROR',
+ message: 'too few lines in checkpoint header',
+ });
}
const origin = lines[0];
const logSize = BigInt(lines[1]);
@@ -117,32 +156,3 @@ class LogCheckpoint {
return new LogCheckpoint(origin, logSize, rootHash, rest);
}
}
-// Filter the list of tlog instances to only those which have usable public
-// keys and were valid at the given time.
-function filterTLogInstances(tlogInstances, integratedTime) {
- const targetDate = new Date(Number(integratedTime) * 1000);
- return tlogInstances.filter((tlog) => {
- // Must have a log ID
- if (!tlog.logId) {
- return false;
- }
- // If the tlog doesn't have a public key, we can't use it
- const publicKey = tlog.publicKey;
- if (publicKey === undefined) {
- return false;
- }
- // If the tlog doesn't have a rawBytes field, we can't use it
- if (publicKey.rawBytes === undefined) {
- return false;
- }
- // If the tlog doesn't have a validFor field, we don't need to check it
- const validFor = publicKey.validFor;
- if (validFor === undefined) {
- return true;
- }
- // Check that the integrated time is within the validFor range
- return (validFor.start !== undefined &&
- validFor.start <= targetDate &&
- (validFor.end === undefined || targetDate <= validFor.end));
- });
-}
diff --git a/deps/npm/node_modules/@sigstore/verify/dist/timestamp/index.js b/deps/npm/node_modules/@sigstore/verify/dist/timestamp/index.js
new file mode 100644
index 00000000000000..0da554f648d25e
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/verify/dist/timestamp/index.js
@@ -0,0 +1,47 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.verifyTLogTimestamp = exports.verifyTSATimestamp = void 0;
+const error_1 = require("../error");
+const checkpoint_1 = require("./checkpoint");
+const merkle_1 = require("./merkle");
+const set_1 = require("./set");
+const tsa_1 = require("./tsa");
+function verifyTSATimestamp(timestamp, data, timestampAuthorities) {
+ (0, tsa_1.verifyRFC3161Timestamp)(timestamp, data, timestampAuthorities);
+ return {
+ type: 'timestamp-authority',
+ logID: timestamp.signerSerialNumber,
+ timestamp: timestamp.signingTime,
+ };
+}
+exports.verifyTSATimestamp = verifyTSATimestamp;
+function verifyTLogTimestamp(entry, tlogAuthorities) {
+ let inclusionVerified = false;
+ if (isTLogEntryWithInclusionPromise(entry)) {
+ (0, set_1.verifyTLogSET)(entry, tlogAuthorities);
+ inclusionVerified = true;
+ }
+ if (isTLogEntryWithInclusionProof(entry)) {
+ (0, merkle_1.verifyMerkleInclusion)(entry);
+ (0, checkpoint_1.verifyCheckpoint)(entry, tlogAuthorities);
+ inclusionVerified = true;
+ }
+ if (!inclusionVerified) {
+ throw new error_1.VerificationError({
+ code: 'TLOG_MISSING_INCLUSION_ERROR',
+ message: 'inclusion could not be verified',
+ });
+ }
+ return {
+ type: 'transparency-log',
+ logID: entry.logId.keyId,
+ timestamp: new Date(Number(entry.integratedTime) * 1000),
+ };
+}
+exports.verifyTLogTimestamp = verifyTLogTimestamp;
+function isTLogEntryWithInclusionPromise(entry) {
+ return entry.inclusionPromise !== undefined;
+}
+function isTLogEntryWithInclusionProof(entry) {
+ return entry.inclusionProof !== undefined;
+}
diff --git a/deps/npm/node_modules/sigstore/dist/tlog/verify/merkle.js b/deps/npm/node_modules/@sigstore/verify/dist/timestamp/merkle.js
similarity index 76%
rename from deps/npm/node_modules/sigstore/dist/tlog/verify/merkle.js
rename to deps/npm/node_modules/@sigstore/verify/dist/timestamp/merkle.js
index 0f246af4a28a3b..9895d01b7abc03 100644
--- a/deps/npm/node_modules/sigstore/dist/tlog/verify/merkle.js
+++ b/deps/npm/node_modules/@sigstore/verify/dist/timestamp/merkle.js
@@ -1,7 +1,4 @@
"use strict";
-var __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
-};
Object.defineProperty(exports, "__esModule", { value: true });
exports.verifyMerkleInclusion = void 0;
/*
@@ -19,8 +16,8 @@ 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.
*/
-const crypto_1 = __importDefault(require("crypto"));
-const error_1 = require("../../error");
+const core_1 = require("@sigstore/core");
+const error_1 = require("../error");
const RFC6962_LEAF_HASH_PREFIX = Buffer.from([0x00]);
const RFC6962_NODE_HASH_PREFIX = Buffer.from([0x01]);
function verifyMerkleInclusion(entry) {
@@ -28,13 +25,19 @@ function verifyMerkleInclusion(entry) {
const logIndex = BigInt(inclusionProof.logIndex);
const treeSize = BigInt(inclusionProof.treeSize);
if (logIndex < 0n || logIndex >= treeSize) {
- throw new error_1.VerificationError('invalid inclusion proof index');
+ throw new error_1.VerificationError({
+ code: 'TLOG_INCLUSION_PROOF_ERROR',
+ message: `invalid index: ${logIndex}`,
+ });
}
// Figure out which subset of hashes corresponds to the inner and border
// nodes
const { inner, border } = decompInclProof(logIndex, treeSize);
if (inclusionProof.hashes.length !== inner + border) {
- throw new error_1.VerificationError('invalid inclusion proof length');
+ throw new error_1.VerificationError({
+ code: 'TLOG_INCLUSION_PROOF_ERROR',
+ message: 'invalid hash count',
+ });
}
const innerHashes = inclusionProof.hashes.slice(0, inner);
const borderHashes = inclusionProof.hashes.slice(inner);
@@ -43,7 +46,12 @@ function verifyMerkleInclusion(entry) {
// Chain the hashes belonging to the inner and border portions
const calculatedHash = chainBorderRight(chainInner(leafHash, innerHashes, logIndex), borderHashes);
// Calculated hash should match the root hash in the inclusion proof
- return bufferEqual(calculatedHash, inclusionProof.rootHash);
+ if (!core_1.crypto.bufferEqual(calculatedHash, inclusionProof.rootHash)) {
+ throw new error_1.VerificationError({
+ code: 'TLOG_INCLUSION_PROOF_ERROR',
+ message: 'calculated root hash does not match inclusion proof',
+ });
+ }
}
exports.verifyMerkleInclusion = verifyMerkleInclusion;
// Breaks down inclusion proof for a leaf at the specified index in a tree of
@@ -77,8 +85,8 @@ function innerProofSize(index, size) {
}
// Counts the number of ones in the binary representation of the given number.
// https://en.wikipedia.org/wiki/Hamming_weight
-function onesCount(x) {
- return x.toString(2).split('1').length - 1;
+function onesCount(num) {
+ return num.toString(2).split('1').length - 1;
}
// Returns the number of bits necessary to represent an integer in binary.
function bitLength(n) {
@@ -90,24 +98,8 @@ function bitLength(n) {
// Hashing logic according to RFC6962.
// https://datatracker.ietf.org/doc/html/rfc6962#section-2
function hashChildren(left, right) {
- const hasher = crypto_1.default.createHash('sha256');
- hasher.update(RFC6962_NODE_HASH_PREFIX);
- hasher.update(left);
- hasher.update(right);
- return hasher.digest();
+ return core_1.crypto.hash(RFC6962_NODE_HASH_PREFIX, left, right);
}
function hashLeaf(leaf) {
- const hasher = crypto_1.default.createHash('sha256');
- hasher.update(RFC6962_LEAF_HASH_PREFIX);
- hasher.update(leaf);
- return hasher.digest();
-}
-function bufferEqual(a, b) {
- try {
- return crypto_1.default.timingSafeEqual(a, b);
- }
- catch {
- /* istanbul ignore next */
- return false;
- }
+ return core_1.crypto.hash(RFC6962_LEAF_HASH_PREFIX, leaf);
}
diff --git a/deps/npm/node_modules/@sigstore/verify/dist/timestamp/set.js b/deps/npm/node_modules/@sigstore/verify/dist/timestamp/set.js
new file mode 100644
index 00000000000000..a6357c06999cba
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/verify/dist/timestamp/set.js
@@ -0,0 +1,61 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.verifyTLogSET = void 0;
+/*
+Copyright 2023 The Sigstore 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.
+*/
+const core_1 = require("@sigstore/core");
+const error_1 = require("../error");
+const trust_1 = require("../trust");
+// Verifies the SET for the given entry against the list of trusted
+// transparency logs. Returns true if the SET can be verified against at least
+// one of the trusted logs; otherwise, returns false.
+function verifyTLogSET(entry, tlogs) {
+ // Filter the list of tlog instances to only those which might be able to
+ // verify the SET
+ const validTLogs = (0, trust_1.filterTLogAuthorities)(tlogs, {
+ logID: entry.logId.keyId,
+ targetDate: new Date(Number(entry.integratedTime) * 1000),
+ });
+ // Check to see if we can verify the SET against any of the valid tlogs
+ const verified = validTLogs.some((tlog) => {
+ // Re-create the original Rekor verification payload
+ const payload = toVerificationPayload(entry);
+ // Canonicalize the payload and turn into a buffer for verification
+ const data = Buffer.from(core_1.json.canonicalize(payload), 'utf8');
+ // Extract the SET from the tlog entry
+ const signature = entry.inclusionPromise.signedEntryTimestamp;
+ return core_1.crypto.verify(data, tlog.publicKey, signature);
+ });
+ if (!verified) {
+ throw new error_1.VerificationError({
+ code: 'TLOG_INCLUSION_PROMISE_ERROR',
+ message: 'inclusion promise could not be verified',
+ });
+ }
+}
+exports.verifyTLogSET = verifyTLogSET;
+// Returns a properly formatted "VerificationPayload" for one of the
+// transaction log entires in the given bundle which can be used for SET
+// verification.
+function toVerificationPayload(entry) {
+ const { integratedTime, logIndex, logId, canonicalizedBody } = entry;
+ return {
+ body: canonicalizedBody.toString('base64'),
+ integratedTime: Number(integratedTime),
+ logIndex: Number(logIndex),
+ logID: logId.keyId.toString('hex'),
+ };
+}
diff --git a/deps/npm/node_modules/@sigstore/verify/dist/timestamp/tsa.js b/deps/npm/node_modules/@sigstore/verify/dist/timestamp/tsa.js
new file mode 100644
index 00000000000000..7b095bc3a7f908
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/verify/dist/timestamp/tsa.js
@@ -0,0 +1,74 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.verifyRFC3161Timestamp = void 0;
+const core_1 = require("@sigstore/core");
+const error_1 = require("../error");
+const certificate_1 = require("../key/certificate");
+const trust_1 = require("../trust");
+function verifyRFC3161Timestamp(timestamp, data, timestampAuthorities) {
+ const signingTime = timestamp.signingTime;
+ // Filter for CAs which were valid at the time of signing
+ timestampAuthorities = (0, trust_1.filterCertAuthorities)(timestampAuthorities, {
+ start: signingTime,
+ end: signingTime,
+ });
+ // Filter for CAs which match serial and issuer embedded in the timestamp
+ timestampAuthorities = filterCAsBySerialAndIssuer(timestampAuthorities, {
+ serialNumber: timestamp.signerSerialNumber,
+ issuer: timestamp.signerIssuer,
+ });
+ // Check that we can verify the timestamp with AT LEAST ONE of the remaining
+ // CAs
+ const verified = timestampAuthorities.some((ca) => {
+ try {
+ verifyTimestampForCA(timestamp, data, ca);
+ return true;
+ }
+ catch (e) {
+ return false;
+ }
+ });
+ if (!verified) {
+ throw new error_1.VerificationError({
+ code: 'TIMESTAMP_ERROR',
+ message: 'timestamp could not be verified',
+ });
+ }
+}
+exports.verifyRFC3161Timestamp = verifyRFC3161Timestamp;
+function verifyTimestampForCA(timestamp, data, ca) {
+ const [leaf, ...cas] = ca.certChain;
+ const signingKey = core_1.crypto.createPublicKey(leaf.publicKey);
+ const signingTime = timestamp.signingTime;
+ // Verify the certificate chain for the provided CA
+ try {
+ new certificate_1.CertificateChainVerifier({
+ untrustedCert: leaf,
+ trustedCerts: cas,
+ }).verify();
+ }
+ catch (e) {
+ throw new error_1.VerificationError({
+ code: 'TIMESTAMP_ERROR',
+ message: 'invalid certificate chain',
+ });
+ }
+ // Check that all of the CA certs were valid at the time of signing
+ const validAtSigningTime = ca.certChain.every((cert) => cert.validForDate(signingTime));
+ if (!validAtSigningTime) {
+ throw new error_1.VerificationError({
+ code: 'TIMESTAMP_ERROR',
+ message: 'timestamp was signed with an expired certificate',
+ });
+ }
+ // Check that the signing certificate's key can be used to verify the
+ // timestamp signature.
+ timestamp.verify(data, signingKey);
+}
+// Filters the list of CAs to those which have a leaf signing certificate which
+// matches the given serial number and issuer.
+function filterCAsBySerialAndIssuer(timestampAuthorities, criteria) {
+ return timestampAuthorities.filter((ca) => ca.certChain.length > 0 &&
+ core_1.crypto.bufferEqual(ca.certChain[0].serialNumber, criteria.serialNumber) &&
+ core_1.crypto.bufferEqual(ca.certChain[0].issuer, criteria.issuer));
+}
diff --git a/deps/npm/node_modules/@sigstore/verify/dist/tlog/dsse.js b/deps/npm/node_modules/@sigstore/verify/dist/tlog/dsse.js
new file mode 100644
index 00000000000000..bf430e61dde563
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/verify/dist/tlog/dsse.js
@@ -0,0 +1,58 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.verifyDSSETLogBody = void 0;
+/*
+Copyright 2023 The Sigstore 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.
+*/
+const error_1 = require("../error");
+// Compare the given intoto tlog entry to the given bundle
+function verifyDSSETLogBody(tlogEntry, content) {
+ switch (tlogEntry.apiVersion) {
+ case '0.0.1':
+ return verifyDSSE001TLogBody(tlogEntry, content);
+ default:
+ throw new error_1.VerificationError({
+ code: 'TLOG_BODY_ERROR',
+ message: `unsupported dsse version: ${tlogEntry.apiVersion}`,
+ });
+ }
+}
+exports.verifyDSSETLogBody = verifyDSSETLogBody;
+// Compare the given dsse v0.0.1 tlog entry to the given DSSE envelope.
+function verifyDSSE001TLogBody(tlogEntry, content) {
+ // Ensure the bundle's DSSE only contains a single signature
+ if (tlogEntry.spec.signatures?.length !== 1) {
+ throw new error_1.VerificationError({
+ code: 'TLOG_BODY_ERROR',
+ message: 'signature count mismatch',
+ });
+ }
+ const tlogSig = tlogEntry.spec.signatures[0].signature;
+ // Ensure that the signature in the bundle's DSSE matches tlog entry
+ if (!content.compareSignature(Buffer.from(tlogSig, 'base64')))
+ throw new error_1.VerificationError({
+ code: 'TLOG_BODY_ERROR',
+ message: 'tlog entry signature mismatch',
+ });
+ // Ensure the digest of the bundle's DSSE payload matches the digest in the
+ // tlog entry
+ const tlogHash = tlogEntry.spec.payloadHash?.value || '';
+ if (!content.compareDigest(Buffer.from(tlogHash, 'hex'))) {
+ throw new error_1.VerificationError({
+ code: 'TLOG_BODY_ERROR',
+ message: 'DSSE payload hash mismatch',
+ });
+ }
+}
diff --git a/deps/npm/node_modules/@sigstore/verify/dist/tlog/hashedrekord.js b/deps/npm/node_modules/@sigstore/verify/dist/tlog/hashedrekord.js
new file mode 100644
index 00000000000000..d1758858f030d8
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/verify/dist/tlog/hashedrekord.js
@@ -0,0 +1,52 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.verifyHashedRekordTLogBody = void 0;
+/*
+Copyright 2023 The Sigstore 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.
+*/
+const error_1 = require("../error");
+// Compare the given hashedrekord tlog entry to the given bundle
+function verifyHashedRekordTLogBody(tlogEntry, content) {
+ switch (tlogEntry.apiVersion) {
+ case '0.0.1':
+ return verifyHashedrekord001TLogBody(tlogEntry, content);
+ default:
+ throw new error_1.VerificationError({
+ code: 'TLOG_BODY_ERROR',
+ message: `unsupported hashedrekord version: ${tlogEntry.apiVersion}`,
+ });
+ }
+}
+exports.verifyHashedRekordTLogBody = verifyHashedRekordTLogBody;
+// Compare the given hashedrekord v0.0.1 tlog entry to the given message
+// signature
+function verifyHashedrekord001TLogBody(tlogEntry, content) {
+ // Ensure that the bundles message signature matches the tlog entry
+ const tlogSig = tlogEntry.spec.signature.content || '';
+ if (!content.compareSignature(Buffer.from(tlogSig, 'base64'))) {
+ throw new error_1.VerificationError({
+ code: 'TLOG_BODY_ERROR',
+ message: 'signature mismatch',
+ });
+ }
+ // Ensure that the bundle's message digest matches the tlog entry
+ const tlogDigest = tlogEntry.spec.data.hash?.value || '';
+ if (!content.compareDigest(Buffer.from(tlogDigest, 'hex'))) {
+ throw new error_1.VerificationError({
+ code: 'TLOG_BODY_ERROR',
+ message: 'digest mismatch',
+ });
+ }
+}
diff --git a/deps/npm/node_modules/@sigstore/verify/dist/tlog/index.js b/deps/npm/node_modules/@sigstore/verify/dist/tlog/index.js
new file mode 100644
index 00000000000000..adfc70ed51ad05
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/verify/dist/tlog/index.js
@@ -0,0 +1,48 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.verifyTLogBody = void 0;
+/*
+Copyright 2023 The Sigstore 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.
+*/
+const error_1 = require("../error");
+const dsse_1 = require("./dsse");
+const hashedrekord_1 = require("./hashedrekord");
+const intoto_1 = require("./intoto");
+// Verifies that the given tlog entry matches the supplied signature content.
+function verifyTLogBody(entry, sigContent) {
+ const { kind, version } = entry.kindVersion;
+ const body = JSON.parse(entry.canonicalizedBody.toString('utf8'));
+ if (kind !== body.kind || version !== body.apiVersion) {
+ throw new error_1.VerificationError({
+ code: 'TLOG_BODY_ERROR',
+ message: `kind/version mismatch - expected: ${kind}/${version}, received: ${body.kind}/${body.apiVersion}`,
+ });
+ }
+ switch (body.kind) {
+ case 'dsse':
+ return (0, dsse_1.verifyDSSETLogBody)(body, sigContent);
+ case 'intoto':
+ return (0, intoto_1.verifyIntotoTLogBody)(body, sigContent);
+ case 'hashedrekord':
+ return (0, hashedrekord_1.verifyHashedRekordTLogBody)(body, sigContent);
+ /* istanbul ignore next */
+ default:
+ throw new error_1.VerificationError({
+ code: 'TLOG_BODY_ERROR',
+ message: `unsupported kind: ${kind}`,
+ });
+ }
+}
+exports.verifyTLogBody = verifyTLogBody;
diff --git a/deps/npm/node_modules/@sigstore/verify/dist/tlog/intoto.js b/deps/npm/node_modules/@sigstore/verify/dist/tlog/intoto.js
new file mode 100644
index 00000000000000..e706887a95043a
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/verify/dist/tlog/intoto.js
@@ -0,0 +1,62 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.verifyIntotoTLogBody = void 0;
+/*
+Copyright 2023 The Sigstore 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.
+*/
+const error_1 = require("../error");
+// Compare the given intoto tlog entry to the given bundle
+function verifyIntotoTLogBody(tlogEntry, content) {
+ switch (tlogEntry.apiVersion) {
+ case '0.0.2':
+ return verifyIntoto002TLogBody(tlogEntry, content);
+ default:
+ throw new error_1.VerificationError({
+ code: 'TLOG_BODY_ERROR',
+ message: `unsupported intoto version: ${tlogEntry.apiVersion}`,
+ });
+ }
+}
+exports.verifyIntotoTLogBody = verifyIntotoTLogBody;
+// Compare the given intoto v0.0.2 tlog entry to the given DSSE envelope.
+function verifyIntoto002TLogBody(tlogEntry, content) {
+ // Ensure the bundle's DSSE contains a single signature
+ if (tlogEntry.spec.content.envelope.signatures?.length !== 1) {
+ throw new error_1.VerificationError({
+ code: 'TLOG_BODY_ERROR',
+ message: 'signature count mismatch',
+ });
+ }
+ // Signature is double-base64-encoded in the tlog entry
+ const tlogSig = base64Decode(tlogEntry.spec.content.envelope.signatures[0].sig);
+ // Ensure that the signature in the bundle's DSSE matches tlog entry
+ if (!content.compareSignature(Buffer.from(tlogSig, 'base64')))
+ throw new error_1.VerificationError({
+ code: 'TLOG_BODY_ERROR',
+ message: 'tlog entry signature mismatch',
+ });
+ // Ensure the digest of the bundle's DSSE payload matches the digest in the
+ // tlog entry
+ const tlogHash = tlogEntry.spec.content.payloadHash?.value || '';
+ if (!content.compareDigest(Buffer.from(tlogHash, 'hex'))) {
+ throw new error_1.VerificationError({
+ code: 'TLOG_BODY_ERROR',
+ message: 'DSSE payload hash mismatch',
+ });
+ }
+}
+function base64Decode(str) {
+ return Buffer.from(str, 'base64').toString('utf-8');
+}
diff --git a/deps/npm/node_modules/@sigstore/verify/dist/trust/filter.js b/deps/npm/node_modules/@sigstore/verify/dist/trust/filter.js
new file mode 100644
index 00000000000000..c09d055913c4c7
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/verify/dist/trust/filter.js
@@ -0,0 +1,24 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.filterTLogAuthorities = exports.filterCertAuthorities = void 0;
+function filterCertAuthorities(certAuthorities, criteria) {
+ return certAuthorities.filter((ca) => {
+ return (ca.validFor.start <= criteria.start && ca.validFor.end >= criteria.end);
+ });
+}
+exports.filterCertAuthorities = filterCertAuthorities;
+// Filter the list of tlog instances to only those which match the given log
+// ID and have public keys which are valid for the given integrated time.
+function filterTLogAuthorities(tlogAuthorities, criteria) {
+ return tlogAuthorities.filter((tlog) => {
+ // If we're filtering by log ID and the log IDs don't match, we can't use
+ // this tlog
+ if (criteria.logID && !tlog.logID.equals(criteria.logID)) {
+ return false;
+ }
+ // Check that the integrated time is within the validFor range
+ return (tlog.validFor.start <= criteria.targetDate &&
+ criteria.targetDate <= tlog.validFor.end);
+ });
+}
+exports.filterTLogAuthorities = filterTLogAuthorities;
diff --git a/deps/npm/node_modules/@sigstore/verify/dist/trust/index.js b/deps/npm/node_modules/@sigstore/verify/dist/trust/index.js
new file mode 100644
index 00000000000000..7991f351949a00
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/verify/dist/trust/index.js
@@ -0,0 +1,75 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.toTrustMaterial = exports.filterTLogAuthorities = exports.filterCertAuthorities = void 0;
+/*
+Copyright 2023 The Sigstore 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.
+*/
+const core_1 = require("@sigstore/core");
+const error_1 = require("../error");
+const BEGINNING_OF_TIME = new Date(0);
+const END_OF_TIME = new Date(8640000000000000);
+var filter_1 = require("./filter");
+Object.defineProperty(exports, "filterCertAuthorities", { enumerable: true, get: function () { return filter_1.filterCertAuthorities; } });
+Object.defineProperty(exports, "filterTLogAuthorities", { enumerable: true, get: function () { return filter_1.filterTLogAuthorities; } });
+function toTrustMaterial(root, keys) {
+ const keyFinder = typeof keys === 'function' ? keys : keyLocator(keys);
+ return {
+ certificateAuthorities: root.certificateAuthorities.map(createCertAuthority),
+ timestampAuthorities: root.timestampAuthorities.map(createCertAuthority),
+ tlogs: root.tlogs.map(createTLogAuthority),
+ ctlogs: root.ctlogs.map(createTLogAuthority),
+ publicKey: keyFinder,
+ };
+}
+exports.toTrustMaterial = toTrustMaterial;
+function createTLogAuthority(tlogInstance) {
+ return {
+ logID: tlogInstance.logId.keyId,
+ publicKey: core_1.crypto.createPublicKey(tlogInstance.publicKey.rawBytes),
+ validFor: {
+ start: tlogInstance.publicKey.validFor?.start || BEGINNING_OF_TIME,
+ end: tlogInstance.publicKey.validFor?.end || END_OF_TIME,
+ },
+ };
+}
+function createCertAuthority(ca) {
+ return {
+ certChain: ca.certChain.certificates.map((cert) => {
+ return core_1.X509Certificate.parse(cert.rawBytes);
+ }),
+ validFor: {
+ start: ca.validFor?.start || BEGINNING_OF_TIME,
+ end: ca.validFor?.end || END_OF_TIME,
+ },
+ };
+}
+function keyLocator(keys) {
+ return (hint) => {
+ const key = (keys || {})[hint];
+ if (!key) {
+ throw new error_1.VerificationError({
+ code: 'PUBLIC_KEY_ERROR',
+ message: `key not found: ${hint}`,
+ });
+ }
+ return {
+ publicKey: core_1.crypto.createPublicKey(key.rawBytes),
+ validFor: (date) => {
+ return ((key.validFor?.start || BEGINNING_OF_TIME) <= date &&
+ (key.validFor?.end || END_OF_TIME) >= date);
+ },
+ };
+ };
+}
diff --git a/deps/npm/node_modules/@sigstore/verify/dist/trust/trust.types.js b/deps/npm/node_modules/@sigstore/verify/dist/trust/trust.types.js
new file mode 100644
index 00000000000000..c8ad2e549bdc68
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/verify/dist/trust/trust.types.js
@@ -0,0 +1,2 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
diff --git a/deps/npm/node_modules/@sigstore/verify/dist/verifier.js b/deps/npm/node_modules/@sigstore/verify/dist/verifier.js
new file mode 100644
index 00000000000000..829727cd1d40a9
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/verify/dist/verifier.js
@@ -0,0 +1,141 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.Verifier = void 0;
+/*
+Copyright 2023 The Sigstore 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.
+*/
+const util_1 = require("util");
+const error_1 = require("./error");
+const key_1 = require("./key");
+const policy_1 = require("./policy");
+const timestamp_1 = require("./timestamp");
+const tlog_1 = require("./tlog");
+class Verifier {
+ constructor(trustMaterial, options = {}) {
+ this.trustMaterial = trustMaterial;
+ this.options = {
+ ctlogThreshold: options.ctlogThreshold ?? 1,
+ tlogThreshold: options.tlogThreshold ?? 1,
+ tsaThreshold: options.tsaThreshold ?? 0,
+ };
+ }
+ verify(entity, policy) {
+ const timestamps = this.verifyTimestamps(entity);
+ const signer = this.verifySigningKey(entity, timestamps);
+ this.verifyTLogs(entity);
+ this.verifySignature(entity, signer);
+ if (policy) {
+ this.verifyPolicy(policy, signer.identity || {});
+ }
+ return signer;
+ }
+ // Checks that all of the timestamps in the entity are valid and returns them
+ verifyTimestamps(entity) {
+ let tlogCount = 0;
+ let tsaCount = 0;
+ const timestamps = entity.timestamps.map((timestamp) => {
+ switch (timestamp.$case) {
+ case 'timestamp-authority':
+ tsaCount++;
+ return (0, timestamp_1.verifyTSATimestamp)(timestamp.timestamp, entity.signature.signature, this.trustMaterial.timestampAuthorities);
+ case 'transparency-log':
+ tlogCount++;
+ return (0, timestamp_1.verifyTLogTimestamp)(timestamp.tlogEntry, this.trustMaterial.tlogs);
+ }
+ });
+ // Check for duplicate timestamps
+ if (containsDupes(timestamps)) {
+ throw new error_1.VerificationError({
+ code: 'TIMESTAMP_ERROR',
+ message: 'duplicate timestamp',
+ });
+ }
+ if (tlogCount < this.options.tlogThreshold) {
+ throw new error_1.VerificationError({
+ code: 'TIMESTAMP_ERROR',
+ message: `expected ${this.options.tlogThreshold} tlog timestamps, got ${tlogCount}`,
+ });
+ }
+ if (tsaCount < this.options.tsaThreshold) {
+ throw new error_1.VerificationError({
+ code: 'TIMESTAMP_ERROR',
+ message: `expected ${this.options.tsaThreshold} tsa timestamps, got ${tsaCount}`,
+ });
+ }
+ return timestamps.map((t) => t.timestamp);
+ }
+ // Checks that the signing key is valid for all of the the supplied timestamps
+ // and returns the signer.
+ verifySigningKey({ key }, timestamps) {
+ switch (key.$case) {
+ case 'public-key': {
+ return (0, key_1.verifyPublicKey)(key.hint, timestamps, this.trustMaterial);
+ }
+ case 'certificate': {
+ const result = (0, key_1.verifyCertificate)(key.certificate, timestamps, this.trustMaterial);
+ /* istanbul ignore next - no fixture */
+ if (containsDupes(result.scts)) {
+ throw new error_1.VerificationError({
+ code: 'CERTIFICATE_ERROR',
+ message: 'duplicate SCT',
+ });
+ }
+ if (result.scts.length < this.options.ctlogThreshold) {
+ throw new error_1.VerificationError({
+ code: 'CERTIFICATE_ERROR',
+ message: `expected ${this.options.ctlogThreshold} SCTs, got ${result.scts.length}`,
+ });
+ }
+ return result.signer;
+ }
+ }
+ }
+ // Checks that the tlog entries are valid for the supplied content
+ verifyTLogs({ signature: content, tlogEntries }) {
+ tlogEntries.forEach((entry) => (0, tlog_1.verifyTLogBody)(entry, content));
+ }
+ // Checks that the signature is valid for the supplied content
+ verifySignature(entity, signer) {
+ if (!entity.signature.verifySignature(signer.key)) {
+ throw new error_1.VerificationError({
+ code: 'SIGNATURE_ERROR',
+ message: 'signature verification failed',
+ });
+ }
+ }
+ verifyPolicy(policy, identity) {
+ // Check the subject alternative name of the signer matches the policy
+ if (policy.subjectAlternativeName) {
+ (0, policy_1.verifySubjectAlternativeName)(policy.subjectAlternativeName, identity.subjectAlternativeName);
+ }
+ // Check that the extensions of the signer match the policy
+ if (policy.extensions) {
+ (0, policy_1.verifyExtensions)(policy.extensions, identity.extensions);
+ }
+ }
+}
+exports.Verifier = Verifier;
+// Checks for duplicate items in the array. Objects are compared using
+// deep equality.
+function containsDupes(arr) {
+ for (let i = 0; i < arr.length; i++) {
+ for (let j = i + 1; j < arr.length; j++) {
+ if ((0, util_1.isDeepStrictEqual)(arr[i], arr[j])) {
+ return true;
+ }
+ }
+ }
+ return false;
+}
diff --git a/deps/npm/node_modules/@sigstore/verify/package.json b/deps/npm/node_modules/@sigstore/verify/package.json
new file mode 100644
index 00000000000000..dcfb587e084a6c
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/verify/package.json
@@ -0,0 +1,36 @@
+{
+ "name": "@sigstore/verify",
+ "version": "1.1.0",
+ "description": "Verification of Sigstore signatures",
+ "main": "dist/index.js",
+ "types": "dist/index.d.ts",
+ "scripts": {
+ "clean": "shx rm -rf dist *.tsbuildinfo",
+ "build": "tsc --build",
+ "test": "jest"
+ },
+ "files": [
+ "dist"
+ ],
+ "author": "bdehamer@github.com",
+ "license": "Apache-2.0",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/sigstore/sigstore-js.git"
+ },
+ "bugs": {
+ "url": "https://github.com/sigstore/sigstore-js/issues"
+ },
+ "homepage": "https://github.com/sigstore/sigstore-js/tree/main/packages/verify#readme",
+ "publishConfig": {
+ "provenance": true
+ },
+ "dependencies": {
+ "@sigstore/protobuf-specs": "^0.3.0",
+ "@sigstore/bundle": "^2.2.0",
+ "@sigstore/core": "^1.0.0"
+ },
+ "engines": {
+ "node": "^16.14.0 || >=18.0.0"
+ }
+}
diff --git a/deps/npm/node_modules/ansi-regex/index.js b/deps/npm/node_modules/ansi-regex/index.js
index 130a0929b8ce8c..616ff837d3ff01 100644
--- a/deps/npm/node_modules/ansi-regex/index.js
+++ b/deps/npm/node_modules/ansi-regex/index.js
@@ -1,8 +1,10 @@
-export default function ansiRegex({onlyFirst = false} = {}) {
+'use strict';
+
+module.exports = ({onlyFirst = false} = {}) => {
const pattern = [
- '[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)',
+ '[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)',
'(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))'
].join('|');
return new RegExp(pattern, onlyFirst ? undefined : 'g');
-}
+};
diff --git a/deps/npm/node_modules/ansi-regex/license b/deps/npm/node_modules/ansi-regex/license
index fa7ceba3eb4a96..e7af2f77107d73 100644
--- a/deps/npm/node_modules/ansi-regex/license
+++ b/deps/npm/node_modules/ansi-regex/license
@@ -1,6 +1,6 @@
MIT License
-Copyright (c) Sindre Sorhus (https://sindresorhus.com)
+Copyright (c) Sindre Sorhus (sindresorhus.com)
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:
diff --git a/deps/npm/node_modules/ansi-regex/package.json b/deps/npm/node_modules/ansi-regex/package.json
index 7bbb563bf2a70a..017f53116a9e28 100644
--- a/deps/npm/node_modules/ansi-regex/package.json
+++ b/deps/npm/node_modules/ansi-regex/package.json
@@ -1,19 +1,16 @@
{
"name": "ansi-regex",
- "version": "6.0.1",
+ "version": "5.0.1",
"description": "Regular expression for matching ANSI escape codes",
"license": "MIT",
"repository": "chalk/ansi-regex",
- "funding": "https://github.com/chalk/ansi-regex?sponsor=1",
"author": {
"name": "Sindre Sorhus",
"email": "sindresorhus@gmail.com",
- "url": "https://sindresorhus.com"
+ "url": "sindresorhus.com"
},
- "type": "module",
- "exports": "./index.js",
"engines": {
- "node": ">=12"
+ "node": ">=8"
},
"scripts": {
"test": "xo && ava && tsd",
@@ -51,8 +48,8 @@
"pattern"
],
"devDependencies": {
- "ava": "^3.15.0",
- "tsd": "^0.14.0",
- "xo": "^0.38.2"
+ "ava": "^2.4.0",
+ "tsd": "^0.9.0",
+ "xo": "^0.25.3"
}
}
diff --git a/deps/npm/node_modules/cli-columns/node_modules/ansi-regex/index.js b/deps/npm/node_modules/cli-columns/node_modules/ansi-regex/index.js
deleted file mode 100644
index 616ff837d3ff01..00000000000000
--- a/deps/npm/node_modules/cli-columns/node_modules/ansi-regex/index.js
+++ /dev/null
@@ -1,10 +0,0 @@
-'use strict';
-
-module.exports = ({onlyFirst = false} = {}) => {
- const pattern = [
- '[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)',
- '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))'
- ].join('|');
-
- return new RegExp(pattern, onlyFirst ? undefined : 'g');
-};
diff --git a/deps/npm/node_modules/cli-columns/node_modules/strip-ansi/index.js b/deps/npm/node_modules/cli-columns/node_modules/strip-ansi/index.js
deleted file mode 100644
index 9a593dfcd1fd5c..00000000000000
--- a/deps/npm/node_modules/cli-columns/node_modules/strip-ansi/index.js
+++ /dev/null
@@ -1,4 +0,0 @@
-'use strict';
-const ansiRegex = require('ansi-regex');
-
-module.exports = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string;
diff --git a/deps/npm/node_modules/columnify/node_modules/ansi-regex/index.js b/deps/npm/node_modules/columnify/node_modules/ansi-regex/index.js
deleted file mode 100644
index 616ff837d3ff01..00000000000000
--- a/deps/npm/node_modules/columnify/node_modules/ansi-regex/index.js
+++ /dev/null
@@ -1,10 +0,0 @@
-'use strict';
-
-module.exports = ({onlyFirst = false} = {}) => {
- const pattern = [
- '[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)',
- '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))'
- ].join('|');
-
- return new RegExp(pattern, onlyFirst ? undefined : 'g');
-};
diff --git a/deps/npm/node_modules/columnify/node_modules/ansi-regex/package.json b/deps/npm/node_modules/columnify/node_modules/ansi-regex/package.json
deleted file mode 100644
index 017f53116a9e28..00000000000000
--- a/deps/npm/node_modules/columnify/node_modules/ansi-regex/package.json
+++ /dev/null
@@ -1,55 +0,0 @@
-{
- "name": "ansi-regex",
- "version": "5.0.1",
- "description": "Regular expression for matching ANSI escape codes",
- "license": "MIT",
- "repository": "chalk/ansi-regex",
- "author": {
- "name": "Sindre Sorhus",
- "email": "sindresorhus@gmail.com",
- "url": "sindresorhus.com"
- },
- "engines": {
- "node": ">=8"
- },
- "scripts": {
- "test": "xo && ava && tsd",
- "view-supported": "node fixtures/view-codes.js"
- },
- "files": [
- "index.js",
- "index.d.ts"
- ],
- "keywords": [
- "ansi",
- "styles",
- "color",
- "colour",
- "colors",
- "terminal",
- "console",
- "cli",
- "string",
- "tty",
- "escape",
- "formatting",
- "rgb",
- "256",
- "shell",
- "xterm",
- "command-line",
- "text",
- "regex",
- "regexp",
- "re",
- "match",
- "test",
- "find",
- "pattern"
- ],
- "devDependencies": {
- "ava": "^2.4.0",
- "tsd": "^0.9.0",
- "xo": "^0.25.3"
- }
-}
diff --git a/deps/npm/node_modules/columnify/node_modules/strip-ansi/index.js b/deps/npm/node_modules/columnify/node_modules/strip-ansi/index.js
deleted file mode 100644
index 9a593dfcd1fd5c..00000000000000
--- a/deps/npm/node_modules/columnify/node_modules/strip-ansi/index.js
+++ /dev/null
@@ -1,4 +0,0 @@
-'use strict';
-const ansiRegex = require('ansi-regex');
-
-module.exports = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string;
diff --git a/deps/npm/node_modules/columnify/node_modules/strip-ansi/package.json b/deps/npm/node_modules/columnify/node_modules/strip-ansi/package.json
deleted file mode 100644
index 1a41108d42831c..00000000000000
--- a/deps/npm/node_modules/columnify/node_modules/strip-ansi/package.json
+++ /dev/null
@@ -1,54 +0,0 @@
-{
- "name": "strip-ansi",
- "version": "6.0.1",
- "description": "Strip ANSI escape codes from a string",
- "license": "MIT",
- "repository": "chalk/strip-ansi",
- "author": {
- "name": "Sindre Sorhus",
- "email": "sindresorhus@gmail.com",
- "url": "sindresorhus.com"
- },
- "engines": {
- "node": ">=8"
- },
- "scripts": {
- "test": "xo && ava && tsd"
- },
- "files": [
- "index.js",
- "index.d.ts"
- ],
- "keywords": [
- "strip",
- "trim",
- "remove",
- "ansi",
- "styles",
- "color",
- "colour",
- "colors",
- "terminal",
- "console",
- "string",
- "tty",
- "escape",
- "formatting",
- "rgb",
- "256",
- "shell",
- "xterm",
- "log",
- "logging",
- "command-line",
- "text"
- ],
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "devDependencies": {
- "ava": "^2.4.0",
- "tsd": "^0.10.0",
- "xo": "^0.25.3"
- }
-}
diff --git a/deps/npm/node_modules/diff/CONTRIBUTING.md b/deps/npm/node_modules/diff/CONTRIBUTING.md
index c8c4fe6cc225cc..c974cf678e2c5e 100644
--- a/deps/npm/node_modules/diff/CONTRIBUTING.md
+++ b/deps/npm/node_modules/diff/CONTRIBUTING.md
@@ -15,25 +15,22 @@ Generally we like to see pull requests that
## Building
```
-npm install
-npm test
+yarn
+yarn test
```
-The `npm test -- dev` implements watching for tests within Node and `karma start` may be used for manual testing in browsers.
+Running `yarn test -- dev` will watch for tests within Node and `karma start` may be used for manual testing in browsers.
If you notice any problems, please report them to the GitHub issue tracker at
[http://github.com/kpdecker/jsdiff/issues](http://github.com/kpdecker/jsdiff/issues).
## Releasing
-JsDiff utilizes the [release yeoman generator][generator-release] to perform most release tasks.
-
A full release may be completed with the following:
```
-yo release
-npm publish
+yarn clean
+yarn grunt
+yarn grunt uglify
+yarn publish
```
-
-[generator-release]: https://github.com/walmartlabs/generator-release
-[pull-request]: https://github.com/kpdecker/jsdiff/pull/new/master
diff --git a/deps/npm/node_modules/diff/LICENSE b/deps/npm/node_modules/diff/LICENSE
index 4e7146ed78a2f2..2d48b19fcc2e62 100644
--- a/deps/npm/node_modules/diff/LICENSE
+++ b/deps/npm/node_modules/diff/LICENSE
@@ -1,31 +1,29 @@
-Software License Agreement (BSD License)
+BSD 3-Clause License
Copyright (c) 2009-2015, Kevin Decker
-
All rights reserved.
-Redistribution and use of this software in source and binary forms, with or without modification,
-are permitted provided that the following conditions are met:
+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.
+1. 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.
+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.
-* Neither the name of Kevin Decker nor the names of its
- contributors may be used to endorse or promote products
- derived from this software without specific prior
- written permission.
+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 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.
\ No newline at end of file
+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.
diff --git a/deps/npm/node_modules/diff/dist/diff.js b/deps/npm/node_modules/diff/dist/diff.js
index 7fa3a556c42000..76232b293d549f 100644
--- a/deps/npm/node_modules/diff/dist/diff.js
+++ b/deps/npm/node_modules/diff/dist/diff.js
@@ -1,40 +1,3 @@
-/*!
-
- diff v5.1.0
-
-Software License Agreement (BSD License)
-
-Copyright (c) 2009-2015, Kevin Decker
-
-All rights reserved.
-
-Redistribution and use of this software 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 Kevin Decker 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.
-@license
-*/
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
typeof define === 'function' && define.amd ? define(['exports'], factory) :
@@ -44,6 +7,8 @@ OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
function Diff() {}
Diff.prototype = {
diff: function diff(oldString, newString) {
+ var _options$timeout;
+
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
var callback = options.callback;
@@ -80,64 +45,96 @@ OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
maxEditLength = Math.min(maxEditLength, options.maxEditLength);
}
+ var maxExecutionTime = (_options$timeout = options.timeout) !== null && _options$timeout !== void 0 ? _options$timeout : Infinity;
+ var abortAfterTimestamp = Date.now() + maxExecutionTime;
var bestPath = [{
- newPos: -1,
- components: []
+ oldPos: -1,
+ lastComponent: undefined
}]; // Seed editLength = 0, i.e. the content starts with the same values
- var oldPos = this.extractCommon(bestPath[0], newString, oldString, 0);
+ var newPos = this.extractCommon(bestPath[0], newString, oldString, 0);
- if (bestPath[0].newPos + 1 >= newLen && oldPos + 1 >= oldLen) {
+ if (bestPath[0].oldPos + 1 >= oldLen && newPos + 1 >= newLen) {
// Identity per the equality and tokenizer
return done([{
value: this.join(newString),
count: newString.length
}]);
- } // Main worker method. checks all permutations of a given edit length for acceptance.
-
+ } // Once we hit the right edge of the edit graph on some diagonal k, we can
+ // definitely reach the end of the edit graph in no more than k edits, so
+ // there's no point in considering any moves to diagonal k+1 any more (from
+ // which we're guaranteed to need at least k+1 more edits).
+ // Similarly, once we've reached the bottom of the edit graph, there's no
+ // point considering moves to lower diagonals.
+ // We record this fact by setting minDiagonalToConsider and
+ // maxDiagonalToConsider to some finite value once we've hit the edge of
+ // the edit graph.
+ // This optimization is not faithful to the original algorithm presented in
+ // Myers's paper, which instead pointlessly extends D-paths off the end of
+ // the edit graph - see page 7 of Myers's paper which notes this point
+ // explicitly and illustrates it with a diagram. This has major performance
+ // implications for some common scenarios. For instance, to compute a diff
+ // where the new text simply appends d characters on the end of the
+ // original text of length n, the true Myers algorithm will take O(n+d^2)
+ // time while this optimization needs only O(n+d) time.
+
+
+ var minDiagonalToConsider = -Infinity,
+ maxDiagonalToConsider = Infinity; // Main worker method. checks all permutations of a given edit length for acceptance.
function execEditLength() {
- for (var diagonalPath = -1 * editLength; diagonalPath <= editLength; diagonalPath += 2) {
+ for (var diagonalPath = Math.max(minDiagonalToConsider, -editLength); diagonalPath <= Math.min(maxDiagonalToConsider, editLength); diagonalPath += 2) {
var basePath = void 0;
+ var removePath = bestPath[diagonalPath - 1],
+ addPath = bestPath[diagonalPath + 1];
- var addPath = bestPath[diagonalPath - 1],
- removePath = bestPath[diagonalPath + 1],
- _oldPos = (removePath ? removePath.newPos : 0) - diagonalPath;
-
- if (addPath) {
+ if (removePath) {
// No one else is going to attempt to use this value, clear it
bestPath[diagonalPath - 1] = undefined;
}
- var canAdd = addPath && addPath.newPos + 1 < newLen,
- canRemove = removePath && 0 <= _oldPos && _oldPos < oldLen;
+ var canAdd = false;
+
+ if (addPath) {
+ // what newPos will be after we do an insertion:
+ var addPathNewPos = addPath.oldPos - diagonalPath;
+ canAdd = addPath && 0 <= addPathNewPos && addPathNewPos < newLen;
+ }
+
+ var canRemove = removePath && removePath.oldPos + 1 < oldLen;
if (!canAdd && !canRemove) {
// If this path is a terminal then prune
bestPath[diagonalPath] = undefined;
continue;
} // Select the diagonal that we want to branch from. We select the prior
- // path whose position in the new string is the farthest from the origin
+ // path whose position in the old string is the farthest from the origin
// and does not pass the bounds of the diff graph
+ // TODO: Remove the `+ 1` here to make behavior match Myers algorithm
+ // and prefer to order removals before insertions.
- if (!canAdd || canRemove && addPath.newPos < removePath.newPos) {
- basePath = clonePath(removePath);
- self.pushComponent(basePath.components, undefined, true);
+ if (!canRemove || canAdd && removePath.oldPos + 1 < addPath.oldPos) {
+ basePath = self.addToPath(addPath, true, undefined, 0);
} else {
- basePath = addPath; // No need to clone, we've pulled it from the list
-
- basePath.newPos++;
- self.pushComponent(basePath.components, true, undefined);
+ basePath = self.addToPath(removePath, undefined, true, 1);
}
- _oldPos = self.extractCommon(basePath, newString, oldString, diagonalPath); // If we have hit the end of both strings, then we are done
+ newPos = self.extractCommon(basePath, newString, oldString, diagonalPath);
- if (basePath.newPos + 1 >= newLen && _oldPos + 1 >= oldLen) {
- return done(buildValues(self, basePath.components, newString, oldString, self.useLongestToken));
+ if (basePath.oldPos + 1 >= oldLen && newPos + 1 >= newLen) {
+ // If we have hit the end of both strings, then we are done
+ return done(buildValues(self, basePath.lastComponent, newString, oldString, self.useLongestToken));
} else {
- // Otherwise track this path as a potential candidate and continue.
bestPath[diagonalPath] = basePath;
+
+ if (basePath.oldPos + 1 >= oldLen) {
+ maxDiagonalToConsider = Math.min(maxDiagonalToConsider, diagonalPath - 1);
+ }
+
+ if (newPos + 1 >= newLen) {
+ minDiagonalToConsider = Math.max(minDiagonalToConsider, diagonalPath + 1);
+ }
}
}
@@ -151,7 +148,7 @@ OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
if (callback) {
(function exec() {
setTimeout(function () {
- if (editLength > maxEditLength) {
+ if (editLength > maxEditLength || Date.now() > abortAfterTimestamp) {
return callback();
}
@@ -161,7 +158,7 @@ OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
}, 0);
})();
} else {
- while (editLength <= maxEditLength) {
+ while (editLength <= maxEditLength && Date.now() <= abortAfterTimestamp) {
var ret = execEditLength();
if (ret) {
@@ -170,30 +167,36 @@ OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
}
}
},
- pushComponent: function pushComponent(components, added, removed) {
- var last = components[components.length - 1];
+ addToPath: function addToPath(path, added, removed, oldPosInc) {
+ var last = path.lastComponent;
if (last && last.added === added && last.removed === removed) {
- // We need to clone here as the component clone operation is just
- // as shallow array clone
- components[components.length - 1] = {
- count: last.count + 1,
- added: added,
- removed: removed
+ return {
+ oldPos: path.oldPos + oldPosInc,
+ lastComponent: {
+ count: last.count + 1,
+ added: added,
+ removed: removed,
+ previousComponent: last.previousComponent
+ }
};
} else {
- components.push({
- count: 1,
- added: added,
- removed: removed
- });
+ return {
+ oldPos: path.oldPos + oldPosInc,
+ lastComponent: {
+ count: 1,
+ added: added,
+ removed: removed,
+ previousComponent: last
+ }
+ };
}
},
extractCommon: function extractCommon(basePath, newString, oldString, diagonalPath) {
var newLen = newString.length,
oldLen = oldString.length,
- newPos = basePath.newPos,
- oldPos = newPos - diagonalPath,
+ oldPos = basePath.oldPos,
+ newPos = oldPos - diagonalPath,
commonCount = 0;
while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(newString[newPos + 1], oldString[oldPos + 1])) {
@@ -203,13 +206,14 @@ OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
}
if (commonCount) {
- basePath.components.push({
- count: commonCount
- });
+ basePath.lastComponent = {
+ count: commonCount,
+ previousComponent: basePath.lastComponent
+ };
}
- basePath.newPos = newPos;
- return oldPos;
+ basePath.oldPos = oldPos;
+ return newPos;
},
equals: function equals(left, right) {
if (this.options.comparator) {
@@ -240,7 +244,20 @@ OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
}
};
- function buildValues(diff, components, newString, oldString, useLongestToken) {
+ function buildValues(diff, lastComponent, newString, oldString, useLongestToken) {
+ // First we convert our linked list of components in reverse order to an
+ // array in the right order:
+ var components = [];
+ var nextComponent;
+
+ while (lastComponent) {
+ components.push(lastComponent);
+ nextComponent = lastComponent.previousComponent;
+ delete lastComponent.previousComponent;
+ lastComponent = nextComponent;
+ }
+
+ components.reverse();
var componentPos = 0,
componentLen = components.length,
newPos = 0,
@@ -283,23 +300,16 @@ OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// This is only available for string mode.
- var lastComponent = components[componentLen - 1];
+ var finalComponent = components[componentLen - 1];
- if (componentLen > 1 && typeof lastComponent.value === 'string' && (lastComponent.added || lastComponent.removed) && diff.equals('', lastComponent.value)) {
- components[componentLen - 2].value += lastComponent.value;
+ if (componentLen > 1 && typeof finalComponent.value === 'string' && (finalComponent.added || finalComponent.removed) && diff.equals('', finalComponent.value)) {
+ components[componentLen - 2].value += finalComponent.value;
components.pop();
}
return components;
}
- function clonePath(path) {
- return {
- newPos: path.newPos,
- components: path.components.slice(0)
- };
- }
-
var characterDiff = new Diff();
function diffChars(oldStr, newStr, options) {
return characterDiff.diff(oldStr, newStr, options);
@@ -380,6 +390,11 @@ OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
var lineDiff = new Diff();
lineDiff.tokenize = function (value) {
+ if (this.options.stripTrailingCr) {
+ // remove one \r before \n to match GNU diff's --strip-trailing-cr behavior
+ value = value.replace(/\r\n/g, '\n');
+ }
+
var retLines = [],
linesAndNewlines = value.split(/(\n|\r\n)/); // Ignore the final empty token that occurs if the string ends with a new line
@@ -451,6 +466,55 @@ OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
return _typeof(obj);
}
+ function _defineProperty(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+
+ return obj;
+ }
+
+ function ownKeys(object, enumerableOnly) {
+ var keys = Object.keys(object);
+
+ if (Object.getOwnPropertySymbols) {
+ var symbols = Object.getOwnPropertySymbols(object);
+ if (enumerableOnly) symbols = symbols.filter(function (sym) {
+ return Object.getOwnPropertyDescriptor(object, sym).enumerable;
+ });
+ keys.push.apply(keys, symbols);
+ }
+
+ return keys;
+ }
+
+ function _objectSpread2(target) {
+ for (var i = 1; i < arguments.length; i++) {
+ var source = arguments[i] != null ? arguments[i] : {};
+
+ if (i % 2) {
+ ownKeys(Object(source), true).forEach(function (key) {
+ _defineProperty(target, key, source[key]);
+ });
+ } else if (Object.getOwnPropertyDescriptors) {
+ Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
+ } else {
+ ownKeys(Object(source)).forEach(function (key) {
+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
+ });
+ }
+ }
+
+ return target;
+ }
+
function _toConsumableArray(arr) {
return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
}
@@ -883,7 +947,7 @@ OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
var line = _hunk.lines[j],
operation = line.length > 0 ? line[0] : ' ',
content = line.length > 0 ? line.substr(1) : line,
- delimiter = _hunk.linedelimiters[j];
+ delimiter = _hunk.linedelimiters && _hunk.linedelimiters[j] || '\n';
if (operation === ' ') {
_toPos++;
@@ -1090,6 +1154,10 @@ OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
};
}
function formatPatch(diff) {
+ if (Array.isArray(diff)) {
+ return diff.map(formatPatch).join('\n');
+ }
+
var ret = [];
if (diff.oldFileName == diff.newFileName) {
@@ -1545,6 +1613,39 @@ OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
};
}
+ function reversePatch(structuredPatch) {
+ if (Array.isArray(structuredPatch)) {
+ return structuredPatch.map(reversePatch).reverse();
+ }
+
+ return _objectSpread2(_objectSpread2({}, structuredPatch), {}, {
+ oldFileName: structuredPatch.newFileName,
+ oldHeader: structuredPatch.newHeader,
+ newFileName: structuredPatch.oldFileName,
+ newHeader: structuredPatch.oldHeader,
+ hunks: structuredPatch.hunks.map(function (hunk) {
+ return {
+ oldLines: hunk.newLines,
+ oldStart: hunk.newStart,
+ newLines: hunk.oldLines,
+ newStart: hunk.oldStart,
+ linedelimiters: hunk.linedelimiters,
+ lines: hunk.lines.map(function (l) {
+ if (l.startsWith('-')) {
+ return "+".concat(l.slice(1));
+ }
+
+ if (l.startsWith('+')) {
+ return "-".concat(l.slice(1));
+ }
+
+ return l;
+ })
+ };
+ })
+ });
+ }
+
// See: http://code.google.com/p/google-diff-match-patch/wiki/API
function convertChangesToDMP(changes) {
var ret = [],
@@ -1618,8 +1719,10 @@ OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
exports.diffTrimmedLines = diffTrimmedLines;
exports.diffWords = diffWords;
exports.diffWordsWithSpace = diffWordsWithSpace;
+ exports.formatPatch = formatPatch;
exports.merge = merge;
exports.parsePatch = parsePatch;
+ exports.reversePatch = reversePatch;
exports.structuredPatch = structuredPatch;
Object.defineProperty(exports, '__esModule', { value: true });
diff --git a/deps/npm/node_modules/diff/dist/diff.min.js b/deps/npm/node_modules/diff/dist/diff.min.js
index 80c20de5b757df..078bcc5c2e6a73 100644
--- a/deps/npm/node_modules/diff/dist/diff.min.js
+++ b/deps/npm/node_modules/diff/dist/diff.min.js
@@ -1,38 +1 @@
-/*!
-
- diff v5.1.0
-
-Software License Agreement (BSD License)
-
-Copyright (c) 2009-2015, Kevin Decker
-
-All rights reserved.
-
-Redistribution and use of this software 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 Kevin Decker 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.
-@license
-*/
-!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((e=e||self).Diff={})}(this,function(e){"use strict";function t(){}t.prototype={diff:function(u,a,e){var n=2=c&&h<=i+1)return d([{value:this.join(a),count:a.length}]);function o(){for(var e,n=-1*p;n<=p;n+=2){var t=void 0,r=v[n-1],i=v[n+1],o=(i?i.newPos:0)-n;r&&(v[n-1]=void 0);var l=r&&r.newPos+1=c&&h<=o+1)return d(function(e,n,t,r,i){for(var o=0,l=n.length,s=0,u=0;oe.length?t:e}),d.value=e.join(f)):d.value=e.join(t.slice(s,s+d.count)),s+=d.count,d.added||(u+=d.count))}var c=n[l-1];1e.length)&&(n=e.length);for(var t=0,r=new Array(n);t=c.length-2&&u.length<=d.context&&(i=/\n$/.test(a),o=/\n$/.test(f),l=0==u.length&&g.length>r.oldLines,!i&&l&&0e.length)return!1;for(var t=0;t"):i.removed&&t.push(""),t.push((n=i.value,n.replace(/&/g,"&").replace(//g,">").replace(/"/g,"""))),i.added?t.push(""):i.removed&&t.push("")}return t.join("")},e.createPatch=function(e,n,t,r,i,o){return y(e,e,n,t,r,i,o)},e.createTwoFilesPatch=y,e.diffArrays=function(e,n,t){return g.diff(e,n,t)},e.diffChars=function(e,n,t){return r.diff(e,n,t)},e.diffCss=function(e,n,t){return f.diff(e,n,t)},e.diffJson=function(e,n,t){return p.diff(e,n,t)},e.diffLines=L,e.diffSentences=function(e,n,t){return a.diff(e,n,t)},e.diffTrimmedLines=function(e,n,t){var r=i(t,{ignoreWhitespace:!0});return u.diff(e,n,r)},e.diffWords=function(e,n,t){return t=i(t,{ignoreWhitespace:!0}),s.diff(e,n,t)},e.diffWordsWithSpace=function(e,n,t){return s.diff(e,n,t)},e.merge=function(e,n,t){e=b(e,t),n=b(n,t);var r={};(e.index||n.index)&&(r.index=e.index||n.index),(e.newFileName||n.newFileName)&&(F(e)?F(n)?(r.oldFileName=N(r,e.oldFileName,n.oldFileName),r.newFileName=N(r,e.newFileName,n.newFileName),r.oldHeader=N(r,e.oldHeader,n.oldHeader),r.newHeader=N(r,e.newHeader,n.newHeader)):(r.oldFileName=e.oldFileName,r.newFileName=e.newFileName,r.oldHeader=e.oldHeader,r.newHeader=e.newHeader):(r.oldFileName=n.oldFileName||e.oldFileName,r.newFileName=n.newFileName||e.newFileName,r.oldHeader=n.oldHeader||e.oldHeader,r.newHeader=n.newHeader||e.newHeader)),r.hunks=[];for(var i=0,o=0,l=0,s=0;i=c&&f<=v+1)return d([{value:this.join(a),count:a.length}]);var m=-1/0,g=1/0;function w(){for(var e=Math.max(m,-p);e<=Math.min(g,p);e+=2){var n=void 0,t=h[e-1],r=h[e+1];t&&(h[e-1]=void 0);var i,o=!1;r&&(i=r.oldPos-e,o=r&&0<=i&&i=c&&f<=v+1)return d(function(e,n,t,r,i){var o,l=[];for(;n;)l.push(n),o=n.previousComponent,delete n.previousComponent,n=o;l.reverse();for(var s=0,a=l.length,u=0,d=0;se.length?t:e}),p.value=e.join(c)):p.value=e.join(t.slice(u,u+p.count)),u+=p.count,p.added||(d+=p.count))}var h=l[a-1];1=c&&(g=Math.min(g,e-1)),f<=v+1&&(m=Math.max(m,e+1))}else h[e]=void 0}p++}if(r)!function e(){setTimeout(function(){return il?r():void(w()||e())},0)}();else for(;p<=i&&Date.now()<=l;){var y=w();if(y)return y}},addToPath:function(e,n,t,r){var i=e.lastComponent;return i&&i.added===n&&i.removed===t?{oldPos:e.oldPos+r,lastComponent:{count:i.count+1,added:n,removed:t,previousComponent:i.previousComponent}}:{oldPos:e.oldPos+r,lastComponent:{count:1,added:n,removed:t,previousComponent:i}}},extractCommon:function(e,n,t,r){for(var i=n.length,o=t.length,l=e.oldPos,s=l-r,a=0;s+1e.length)&&(n=e.length);for(var t=0,r=new Array(n);t=c.length-2&&a.length<=f.context&&(i=/\n$/.test(u),o=/\n$/.test(d),l=0==a.length&&m.length>r.oldLines,!i&&l&&0e.length)return!1;for(var t=0;t"):i.removed&&t.push(""),t.push((n=i.value,n.replace(/&/g,"&").replace(//g,">").replace(/"/g,"""))),i.added?t.push(""):i.removed&&t.push("")}return t.join("")},e.createPatch=function(e,n,t,r,i,o){return b(e,e,n,t,r,i,o)},e.createTwoFilesPatch=b,e.diffArrays=function(e,n,t){return g.diff(e,n,t)},e.diffChars=function(e,n,t){return r.diff(e,n,t)},e.diffCss=function(e,n,t){return d.diff(e,n,t)},e.diffJson=function(e,n,t){return v.diff(e,n,t)},e.diffLines=L,e.diffSentences=function(e,n,t){return u.diff(e,n,t)},e.diffTrimmedLines=function(e,n,t){var r=i(t,{ignoreWhitespace:!0});return a.diff(e,n,r)},e.diffWords=function(e,n,t){return t=i(t,{ignoreWhitespace:!0}),s.diff(e,n,t)},e.diffWordsWithSpace=function(e,n,t){return s.diff(e,n,t)},e.formatPatch=S,e.merge=function(e,n,t){e=N(e,t),n=N(n,t);var r={};(e.index||n.index)&&(r.index=e.index||n.index),(e.newFileName||n.newFileName)&&(P(e)?P(n)?(r.oldFileName=j(r,e.oldFileName,n.oldFileName),r.newFileName=j(r,e.newFileName,n.newFileName),r.oldHeader=j(r,e.oldHeader,n.oldHeader),r.newHeader=j(r,e.newHeader,n.newHeader)):(r.oldFileName=e.oldFileName,r.newFileName=e.newFileName,r.oldHeader=e.oldHeader,r.newHeader=e.newHeader):(r.oldFileName=n.oldFileName||e.oldFileName,r.newFileName=n.newFileName||e.newFileName,r.oldHeader=n.oldHeader||e.oldHeader,r.newHeader=n.newHeader||e.newHeader)),r.hunks=[];for(var i=0,o=0,l=0,s=0;i 2 && arguments[2] !== undefined ? arguments[2] : {};
@@ -53,68 +55,104 @@ Diff.prototype = {
maxEditLength = Math.min(maxEditLength, options.maxEditLength);
}
+ var maxExecutionTime =
+ /*istanbul ignore start*/
+ (_options$timeout =
+ /*istanbul ignore end*/
+ options.timeout) !== null && _options$timeout !== void 0 ? _options$timeout : Infinity;
+ var abortAfterTimestamp = Date.now() + maxExecutionTime;
var bestPath = [{
- newPos: -1,
- components: []
+ oldPos: -1,
+ lastComponent: undefined
}]; // Seed editLength = 0, i.e. the content starts with the same values
- var oldPos = this.extractCommon(bestPath[0], newString, oldString, 0);
+ var newPos = this.extractCommon(bestPath[0], newString, oldString, 0);
- if (bestPath[0].newPos + 1 >= newLen && oldPos + 1 >= oldLen) {
+ if (bestPath[0].oldPos + 1 >= oldLen && newPos + 1 >= newLen) {
// Identity per the equality and tokenizer
return done([{
value: this.join(newString),
count: newString.length
}]);
- } // Main worker method. checks all permutations of a given edit length for acceptance.
-
+ } // Once we hit the right edge of the edit graph on some diagonal k, we can
+ // definitely reach the end of the edit graph in no more than k edits, so
+ // there's no point in considering any moves to diagonal k+1 any more (from
+ // which we're guaranteed to need at least k+1 more edits).
+ // Similarly, once we've reached the bottom of the edit graph, there's no
+ // point considering moves to lower diagonals.
+ // We record this fact by setting minDiagonalToConsider and
+ // maxDiagonalToConsider to some finite value once we've hit the edge of
+ // the edit graph.
+ // This optimization is not faithful to the original algorithm presented in
+ // Myers's paper, which instead pointlessly extends D-paths off the end of
+ // the edit graph - see page 7 of Myers's paper which notes this point
+ // explicitly and illustrates it with a diagram. This has major performance
+ // implications for some common scenarios. For instance, to compute a diff
+ // where the new text simply appends d characters on the end of the
+ // original text of length n, the true Myers algorithm will take O(n+d^2)
+ // time while this optimization needs only O(n+d) time.
+
+
+ var minDiagonalToConsider = -Infinity,
+ maxDiagonalToConsider = Infinity; // Main worker method. checks all permutations of a given edit length for acceptance.
function execEditLength() {
- for (var diagonalPath = -1 * editLength; diagonalPath <= editLength; diagonalPath += 2) {
+ for (var diagonalPath = Math.max(minDiagonalToConsider, -editLength); diagonalPath <= Math.min(maxDiagonalToConsider, editLength); diagonalPath += 2) {
var basePath =
/*istanbul ignore start*/
void 0
/*istanbul ignore end*/
;
+ var removePath = bestPath[diagonalPath - 1],
+ addPath = bestPath[diagonalPath + 1];
- var addPath = bestPath[diagonalPath - 1],
- removePath = bestPath[diagonalPath + 1],
- _oldPos = (removePath ? removePath.newPos : 0) - diagonalPath;
-
- if (addPath) {
+ if (removePath) {
// No one else is going to attempt to use this value, clear it
bestPath[diagonalPath - 1] = undefined;
}
- var canAdd = addPath && addPath.newPos + 1 < newLen,
- canRemove = removePath && 0 <= _oldPos && _oldPos < oldLen;
+ var canAdd = false;
+
+ if (addPath) {
+ // what newPos will be after we do an insertion:
+ var addPathNewPos = addPath.oldPos - diagonalPath;
+ canAdd = addPath && 0 <= addPathNewPos && addPathNewPos < newLen;
+ }
+
+ var canRemove = removePath && removePath.oldPos + 1 < oldLen;
if (!canAdd && !canRemove) {
// If this path is a terminal then prune
bestPath[diagonalPath] = undefined;
continue;
} // Select the diagonal that we want to branch from. We select the prior
- // path whose position in the new string is the farthest from the origin
+ // path whose position in the old string is the farthest from the origin
// and does not pass the bounds of the diff graph
+ // TODO: Remove the `+ 1` here to make behavior match Myers algorithm
+ // and prefer to order removals before insertions.
- if (!canAdd || canRemove && addPath.newPos < removePath.newPos) {
- basePath = clonePath(removePath);
- self.pushComponent(basePath.components, undefined, true);
+ if (!canRemove || canAdd && removePath.oldPos + 1 < addPath.oldPos) {
+ basePath = self.addToPath(addPath, true, undefined, 0);
} else {
- basePath = addPath; // No need to clone, we've pulled it from the list
-
- basePath.newPos++;
- self.pushComponent(basePath.components, true, undefined);
+ basePath = self.addToPath(removePath, undefined, true, 1);
}
- _oldPos = self.extractCommon(basePath, newString, oldString, diagonalPath); // If we have hit the end of both strings, then we are done
+ newPos = self.extractCommon(basePath, newString, oldString, diagonalPath);
- if (basePath.newPos + 1 >= newLen && _oldPos + 1 >= oldLen) {
- return done(buildValues(self, basePath.components, newString, oldString, self.useLongestToken));
+ if (basePath.oldPos + 1 >= oldLen && newPos + 1 >= newLen) {
+ // If we have hit the end of both strings, then we are done
+ return done(buildValues(self, basePath.lastComponent, newString, oldString, self.useLongestToken));
} else {
- // Otherwise track this path as a potential candidate and continue.
bestPath[diagonalPath] = basePath;
+
+ if (basePath.oldPos + 1 >= oldLen) {
+ maxDiagonalToConsider = Math.min(maxDiagonalToConsider, diagonalPath - 1);
+ }
+
+ if (newPos + 1 >= newLen) {
+ minDiagonalToConsider = Math.max(minDiagonalToConsider, diagonalPath + 1);
+ }
}
}
@@ -128,7 +166,7 @@ Diff.prototype = {
if (callback) {
(function exec() {
setTimeout(function () {
- if (editLength > maxEditLength) {
+ if (editLength > maxEditLength || Date.now() > abortAfterTimestamp) {
return callback();
}
@@ -138,7 +176,7 @@ Diff.prototype = {
}, 0);
})();
} else {
- while (editLength <= maxEditLength) {
+ while (editLength <= maxEditLength && Date.now() <= abortAfterTimestamp) {
var ret = execEditLength();
if (ret) {
@@ -151,23 +189,29 @@ Diff.prototype = {
/*istanbul ignore start*/
/*istanbul ignore end*/
- pushComponent: function pushComponent(components, added, removed) {
- var last = components[components.length - 1];
+ addToPath: function addToPath(path, added, removed, oldPosInc) {
+ var last = path.lastComponent;
if (last && last.added === added && last.removed === removed) {
- // We need to clone here as the component clone operation is just
- // as shallow array clone
- components[components.length - 1] = {
- count: last.count + 1,
- added: added,
- removed: removed
+ return {
+ oldPos: path.oldPos + oldPosInc,
+ lastComponent: {
+ count: last.count + 1,
+ added: added,
+ removed: removed,
+ previousComponent: last.previousComponent
+ }
};
} else {
- components.push({
- count: 1,
- added: added,
- removed: removed
- });
+ return {
+ oldPos: path.oldPos + oldPosInc,
+ lastComponent: {
+ count: 1,
+ added: added,
+ removed: removed,
+ previousComponent: last
+ }
+ };
}
},
@@ -177,8 +221,8 @@ Diff.prototype = {
extractCommon: function extractCommon(basePath, newString, oldString, diagonalPath) {
var newLen = newString.length,
oldLen = oldString.length,
- newPos = basePath.newPos,
- oldPos = newPos - diagonalPath,
+ oldPos = basePath.oldPos,
+ newPos = oldPos - diagonalPath,
commonCount = 0;
while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(newString[newPos + 1], oldString[oldPos + 1])) {
@@ -188,13 +232,14 @@ Diff.prototype = {
}
if (commonCount) {
- basePath.components.push({
- count: commonCount
- });
+ basePath.lastComponent = {
+ count: commonCount,
+ previousComponent: basePath.lastComponent
+ };
}
- basePath.newPos = newPos;
- return oldPos;
+ basePath.oldPos = oldPos;
+ return newPos;
},
/*istanbul ignore start*/
@@ -245,7 +290,20 @@ Diff.prototype = {
}
};
-function buildValues(diff, components, newString, oldString, useLongestToken) {
+function buildValues(diff, lastComponent, newString, oldString, useLongestToken) {
+ // First we convert our linked list of components in reverse order to an
+ // array in the right order:
+ var components = [];
+ var nextComponent;
+
+ while (lastComponent) {
+ components.push(lastComponent);
+ nextComponent = lastComponent.previousComponent;
+ delete lastComponent.previousComponent;
+ lastComponent = nextComponent;
+ }
+
+ components.reverse();
var componentPos = 0,
componentLen = components.length,
newPos = 0,
@@ -288,20 +346,13 @@ function buildValues(diff, components, newString, oldString, useLongestToken) {
// This is only available for string mode.
- var lastComponent = components[componentLen - 1];
+ var finalComponent = components[componentLen - 1];
- if (componentLen > 1 && typeof lastComponent.value === 'string' && (lastComponent.added || lastComponent.removed) && diff.equals('', lastComponent.value)) {
- components[componentLen - 2].value += lastComponent.value;
+ if (componentLen > 1 && typeof finalComponent.value === 'string' && (finalComponent.added || finalComponent.removed) && diff.equals('', finalComponent.value)) {
+ components[componentLen - 2].value += finalComponent.value;
components.pop();
}
return components;
}
-
-function clonePath(path) {
- return {
- newPos: path.newPos,
- components: path.components.slice(0)
- };
-}
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL2Jhc2UuanMiXSwibmFtZXMiOlsiRGlmZiIsInByb3RvdHlwZSIsImRpZmYiLCJvbGRTdHJpbmciLCJuZXdTdHJpbmciLCJvcHRpb25zIiwiY2FsbGJhY2siLCJzZWxmIiwiZG9uZSIsInZhbHVlIiwic2V0VGltZW91dCIsInVuZGVmaW5lZCIsImNhc3RJbnB1dCIsInJlbW92ZUVtcHR5IiwidG9rZW5pemUiLCJuZXdMZW4iLCJsZW5ndGgiLCJvbGRMZW4iLCJlZGl0TGVuZ3RoIiwibWF4RWRpdExlbmd0aCIsIk1hdGgiLCJtaW4iLCJiZXN0UGF0aCIsIm5ld1BvcyIsImNvbXBvbmVudHMiLCJvbGRQb3MiLCJleHRyYWN0Q29tbW9uIiwiam9pbiIsImNvdW50IiwiZXhlY0VkaXRMZW5ndGgiLCJkaWFnb25hbFBhdGgiLCJiYXNlUGF0aCIsImFkZFBhdGgiLCJyZW1vdmVQYXRoIiwiY2FuQWRkIiwiY2FuUmVtb3ZlIiwiY2xvbmVQYXRoIiwicHVzaENvbXBvbmVudCIsImJ1aWxkVmFsdWVzIiwidXNlTG9uZ2VzdFRva2VuIiwiZXhlYyIsInJldCIsImFkZGVkIiwicmVtb3ZlZCIsImxhc3QiLCJwdXNoIiwiY29tbW9uQ291bnQiLCJlcXVhbHMiLCJsZWZ0IiwicmlnaHQiLCJjb21wYXJhdG9yIiwiaWdub3JlQ2FzZSIsInRvTG93ZXJDYXNlIiwiYXJyYXkiLCJpIiwic3BsaXQiLCJjaGFycyIsImNvbXBvbmVudFBvcyIsImNvbXBvbmVudExlbiIsImNvbXBvbmVudCIsInNsaWNlIiwibWFwIiwib2xkVmFsdWUiLCJ0bXAiLCJsYXN0Q29tcG9uZW50IiwicG9wIiwicGF0aCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQWUsU0FBU0EsSUFBVCxHQUFnQixDQUFFOztBQUVqQ0EsSUFBSSxDQUFDQyxTQUFMLEdBQWlCO0FBQUE7O0FBQUE7QUFDZkMsRUFBQUEsSUFEZSxnQkFDVkMsU0FEVSxFQUNDQyxTQURELEVBQzBCO0FBQUE7QUFB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R0FBMkJNLEdBQTNCO0FBQ0Q7QUFDRjtBQUNGLEdBdkMyRSxDQXlDNUU7QUFDQTtBQUNBOzs7QUFDQSxNQUFJQyxhQUFhLEdBQUd4QyxVQUFVLENBQUNrQyxZQUFZLEdBQUcsQ0FBaEIsQ0FBOUI7O0FBQ0EsTUFBSUEsWUFBWSxHQUFHLENBQWYsSUFDRyxPQUFPTSxhQUFhLENBQUN2RCxLQUFyQixLQUErQixRQURsQyxLQUVJdUQsYUFBYSxDQUFDdEIsS0FBZCxJQUF1QnNCLGFBQWEsQ0FBQ3JCLE9BRnpDLEtBR0d6QyxJQUFJLENBQUM2QyxNQUFMLENBQVksRUFBWixFQUFnQmlCLGFBQWEsQ0FBQ3ZELEtBQTlCLENBSFAsRUFHNkM7QUFDM0NlLElBQUFBLFVBQVUsQ0FBQ2tDLFlBQVksR0FBRyxDQUFoQixDQUFWLENBQTZCakQsS0FBN0IsSUFBc0N1RCxhQUFhLENBQUN2RCxLQUFwRDtBQUNBZSxJQUFBQSxVQUFVLENBQUN5QyxHQUFYO0FBQ0Q7O0FBRUQsU0FBT3pDLFVBQVA7QUFDRDs7QUFFRCxTQUFTWSxTQUFULENBQW1COEIsSUFBbkIsRUFBeUI7QUFDdkIsU0FBTztBQUFFM0MsSUFBQUEsTUFBTSxFQUFFMkMsSUFBSSxDQUFDM0MsTUFBZjtBQUF1QkMsSUFBQUEsVUFBVSxFQUFFMEMsSUFBSSxDQUFDMUMsVUFBTCxDQUFnQm9DLEtBQWhCLENBQXNCLENBQXRCO0FBQW5DLEdBQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERpZmYoKSB7fVxuXG5EaWZmLnByb3RvdHlwZSA9IHtcbiAgZGlmZihvbGRTdHJpbmcsIG5ld1N0cmluZywgb3B0aW9ucyA9IHt9KSB7XG4gICAgbGV0IGNhbGxiYWNrID0gb3B0aW9ucy5jYWxsYmFjaztcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNhbGxiYWNrID0gb3B0aW9ucztcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcblxuICAgIGxldCBzZWxmID0gdGhpcztcblxuICAgIGZ1bmN0aW9uIGRvbmUodmFsdWUpIHtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBjYWxsYmFjayh1bmRlZmluZWQsIHZhbHVlKTsgfSwgMCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFsbG93IHN1YmNsYXNzZXMgdG8gbWFzc2FnZSB0aGUgaW5wdXQgcHJpb3IgdG8gcnVubmluZ1xuICAgIG9sZFN0cmluZyA9IHRoaXMuY2FzdElucHV0KG9sZFN0cmluZyk7XG4gICAgbmV3U3RyaW5nID0gdGhpcy5jYXN0SW5wdXQobmV3U3RyaW5nKTtcblxuICAgIG9sZFN0cmluZyA9IHRoaXMucmVtb3ZlRW1wdHkodGhpcy50b2tlbml6ZShvbGRTdHJpbmcpKTtcbiAgICBuZXdTdHJpbmcgPSB0aGlzLnJlbW92ZUVtcHR5KHRoaXMudG9rZW5pemUobmV3U3RyaW5nKSk7XG5cbiAgICBsZXQgbmV3TGVuID0gbmV3U3RyaW5nLmxlbmd0aCwgb2xkTGVuID0gb2xkU3RyaW5nLmxlbmd0aDtcbiAgICBsZXQgZWRpdExlbmd0aCA9IDE7XG4gICAgbGV0IG1heEVkaXRMZW5ndGggPSBuZXdMZW4gKyBvbGRMZW47XG4gICAgaWYob3B0aW9ucy5tYXhFZGl0TGVuZ3RoKSB7XG4gICAgICBtYXhFZGl0TGVuZ3RoID0gTWF0aC5taW4obWF4RWRpdExlbmd0aCwgb3B0aW9ucy5tYXhFZGl0TGVuZ3RoKTtcbiAgICB9XG5cbiAgICBsZXQgYmVzdFBhdGggPSBbeyBuZXdQb3M6IC0xLCBjb21wb25lbnRzOiBbXSB9XTtcblxuICAgIC8vIFNlZWQgZWRpdExlbmd0aCA9IDAsIGkuZS4gdGhlIGNvbnRlbnQgc3RhcnRzIHdpdGggdGhlIHNhbWUgdmFsdWVzXG4gICAgbGV0IG9sZFBvcyA9IHRoaXMuZXh0cmFjdENvbW1vbihiZXN0UGF0aFswXSwgbmV3U3RyaW5nLCBvbGRTdHJpbmcsIDApO1xuICAgIGlmIChiZXN0UGF0aFswXS5uZXdQb3MgKyAxID49IG5ld0xlbiAmJiBvbGRQb3MgKyAxID49IG9sZExlbikge1xuICAgICAgLy8gSWRlbnRpdHkgcGVyIHRoZSBlcXVhbGl0eSBhbmQgdG9rZW5pemVyXG4gICAgICByZXR1cm4gZG9uZShbe3ZhbHVlOiB0aGlzLmpvaW4obmV3U3RyaW5nKSwgY291bnQ6IG5ld1N0cmluZy5sZW5ndGh9XSk7XG4gICAgfVxuXG4gICAgLy8gTWFpbiB3b3JrZXIgbWV0aG9kLiBjaGVja3MgYWxsIHBlcm11dGF0aW9ucyBvZiBhIGdpdmVuIGVkaXQgbGVuZ3RoIGZvciBhY2NlcHRhbmNlLlxuICAgIGZ1bmN0aW9uIGV4ZWNFZGl0TGVuZ3RoKCkge1xuICAgICAgZm9yIChsZXQgZGlhZ29uYWxQYXRoID0gLTEgKiBlZGl0TGVuZ3RoOyBkaWFnb25hbFBhdGggPD0gZWRpdExlbmd0aDsgZGlhZ29uYWxQYXRoICs9IDIpIHtcbiAgICAgICAgbGV0IGJhc2VQYXRoO1xuICAgICAgICBsZXQgYWRkUGF0aCA9IGJlc3RQYXRoW2RpYWdvbmFsUGF0aCAtIDFdLFxuICAgICAgICAgICAgcmVtb3ZlUGF0aCA9IGJlc3RQYXRoW2RpYWdvbmFsUGF0aCArIDFdLFxuICAgICAgICAgICAgb2xkUG9zID0gKHJlbW92ZVBhdGggPyByZW1vdmVQYXRoLm5ld1BvcyA6IDApIC0gZGlhZ29uYWxQYXRoO1xuICAgICAgICBpZiAoYWRkUGF0aCkge1xuICAgICAgICAgIC8vIE5vIG9uZSBlbHNlIGlzIGdvaW5nIHRvIGF0dGVtcHQgdG8gdXNlIHRoaXMgdmFsdWUsIGNsZWFyIGl0XG4gICAgICAgICAgYmVzdFBhdGhbZGlhZ29uYWxQYXRoIC0gMV0gPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgY2FuQWRkID0gYWRkUGF0aCAmJiBhZGRQYXRoLm5ld1BvcyArIDEgPCBuZXdMZW4sXG4gICAgICAgICAgICBjYW5SZW1vdmUgPSByZW1vdmVQYXRoICYmIDAgPD0gb2xkUG9zICYmIG9sZFBvcyA8IG9sZExlbjtcbiAgICAgICAgaWYgKCFjYW5BZGQgJiYgIWNhblJlbW92ZSkge1xuICAgICAgICAgIC8vIElmIHRoaXMgcGF0aCBpcyBhIHRlcm1pbmFsIHRoZW4gcHJ1bmVcbiAgICAgICAgICBiZXN0UGF0aFtkaWFnb25hbFBhdGhdID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2VsZWN0IHRoZSBkaWFnb25hbCB0aGF0IHdlIHdhbnQgdG8gYnJhbmNoIGZyb20uIFdlIHNlbGVjdCB0aGUgcHJpb3JcbiAgICAgICAgLy8gcGF0aCB3aG9zZSBwb3NpdGlvbiBpbiB0aGUgbmV3IHN0cmluZyBpcyB0aGUgZmFydGhlc3QgZnJvbSB0aGUgb3JpZ2luXG4gICAgICAgIC8vIGFuZCBkb2VzIG5vdCBwYXNzIHRoZSBib3VuZHMgb2YgdGhlIGRpZmYgZ3JhcGhcbiAgICAgICAgaWYgKCFjYW5BZGQgfHwgKGNhblJlbW92ZSAmJiBhZGRQYXRoLm5ld1BvcyA8IHJlbW92ZVBhdGgubmV3UG9zKSkge1xuICAgICAgICAgIGJhc2VQYXRoID0gY2xvbmVQYXRoKHJlbW92ZVBhdGgpO1xuICAgICAgICAgIHNlbGYucHVzaENvbXBvbmVudChiYXNlUGF0aC5jb21wb25lbnRzLCB1bmRlZmluZWQsIHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJhc2VQYXRoID0gYWRkUGF0aDsgLy8gTm8gbmVlZCB0byBjbG9uZSwgd2UndmUgcHVsbGVkIGl0IGZyb20gdGhlIGxpc3RcbiAgICAgICAgICBiYXNlUGF0aC5uZXdQb3MrKztcbiAgICAgICAgICBzZWxmLnB1c2hDb21wb25lbnQoYmFzZVBhdGguY29tcG9uZW50cywgdHJ1ZSwgdW5kZWZpbmVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9sZFBvcyA9IHNlbGYuZXh0cmFjdENvbW1vbihiYXNlUGF0aCwgbmV3U3RyaW5nLCBvbGRTdHJpbmcsIGRpYWdvbmFsUGF0aCk7XG5cbiAgICAgICAgLy8gSWYgd2UgaGF2ZSBoaXQgdGhlIGVuZCBvZiBib3RoIHN0cmluZ3MsIHRoZW4gd2UgYXJlIGRvbmVcbiAgICAgICAgaWYgKGJhc2VQYXRoLm5ld1BvcyArIDEgPj0gbmV3TGVuICYmIG9sZFBvcyArIDEgPj0gb2xkTGVuKSB7XG4gICAgICAgICAgcmV0dXJuIGRvbmUoYnVpbGRWYWx1ZXMoc2VsZiwgYmFzZVBhdGguY29tcG9uZW50cywgbmV3U3RyaW5nLCBvbGRTdHJpbmcsIHNlbGYudXNlTG9uZ2VzdFRva2VuKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gT3RoZXJ3aXNlIHRyYWNrIHRoaXMgcGF0aCBhcyBhIHBvdGVudGlhbCBjYW5kaWRhdGUgYW5kIGNvbnRpbnVlLlxuICAgICAgICAgIGJlc3RQYXRoW2RpYWdvbmFsUGF0aF0gPSBiYXNlUGF0aDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBlZGl0TGVuZ3RoKys7XG4gICAgfVxuXG4gICAgLy8gUGVyZm9ybXMgdGhlIGxlbmd0aCBvZiBlZGl0IGl0ZXJhdGlvbi4gSXMgYSBiaXQgZnVnbHkgYXMgdGhpcyBoYXMgdG8gc3VwcG9ydCB0aGVcbiAgICAvLyBzeW5jIGFuZCBhc3luYyBtb2RlIHdoaWNoIGlzIG5ldmVyIGZ1bi4gTG9vcHMgb3ZlciBleGVjRWRpdExlbmd0aCB1bnRpbCBhIHZhbHVlXG4gICAgLy8gaXMgcHJvZHVjZWQsIG9yIHVudGlsIHRoZSBlZGl0IGxlbmd0aCBleGNlZWRzIG9wdGlvbnMubWF4RWRpdExlbmd0aCAoaWYgZ2l2ZW4pLFxuICAgIC8vIGluIHdoaWNoIGNhc2UgaXQgd2lsbCByZXR1cm4gdW5kZWZpbmVkLlxuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgKGZ1bmN0aW9uIGV4ZWMoKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgaWYgKGVkaXRMZW5ndGggPiBtYXhFZGl0TGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIWV4ZWNFZGl0TGVuZ3RoKCkpIHtcbiAgICAgICAgICAgIGV4ZWMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIDApO1xuICAgICAgfSgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2hpbGUgKGVkaXRMZW5ndGggPD0gbWF4RWRpdExlbmd0aCkge1xuICAgICAgICBsZXQgcmV0ID0gZXhlY0VkaXRMZW5ndGgoKTtcbiAgICAgICAgaWYgKHJldCkge1xuICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgcHVzaENvbXBvbmVudChjb21wb25lbnRzLCBhZGRlZCwgcmVtb3ZlZCkge1xuICAgIGxldCBsYXN0ID0gY29tcG9uZW50c1tjb21wb25lbnRzLmxlbmd0aCAtIDFdO1xuICAgIGlmIChsYXN0ICYmIGxhc3QuYWRkZWQgPT09IGFkZGVkICYmIGxhc3QucmVtb3ZlZCA9PT0gcmVtb3ZlZCkge1xuICAgICAgLy8gV2UgbmVlZCB0byBjbG9uZSBoZXJlIGFzIHRoZSBjb21wb25lbnQgY2xvbmUgb3BlcmF0aW9uIGlzIGp1c3RcbiAgICAgIC8vIGFzIHNoYWxsb3cgYXJyYXkgY2xvbmVcbiAgICAgIGNvbXBvbmVudHNbY29tcG9uZW50cy5sZW5ndGggLSAxXSA9IHtjb3VudDogbGFzdC5jb3VudCArIDEsIGFkZGVkOiBhZGRlZCwgcmVtb3ZlZDogcmVtb3ZlZCB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb21wb25lbnRzLnB1c2goe2NvdW50OiAxLCBhZGRlZDogYWRkZWQsIHJlbW92ZWQ6IHJlbW92ZWQgfSk7XG4gICAgfVxuICB9LFxuICBleHRyYWN0Q29tbW9uKGJhc2VQYXRoLCBuZXdTdHJpbmcsIG9sZFN0cmluZywgZGlhZ29uYWxQYXRoKSB7XG4gICAgbGV0IG5ld0xlbiA9IG5ld1N0cmluZy5sZW5ndGgsXG4gICAgICAgIG9sZExlbiA9IG9sZFN0cmluZy5sZW5ndGgsXG4gICAgICAgIG5ld1BvcyA9IGJhc2VQYXRoLm5ld1BvcyxcbiAgICAgICAgb2xkUG9zID0gbmV3UG9zIC0gZGlhZ29uYWxQYXRoLFxuXG4gICAgICAgIGNvbW1vbkNvdW50ID0gMDtcbiAgICB3aGlsZSAobmV3UG9zICsgMSA8IG5ld0xlbiAmJiBvbGRQb3MgKyAxIDwgb2xkTGVuICYmIHRoaXMuZXF1YWxzKG5ld1N0cmluZ1tuZXdQb3MgKyAxXSwgb2xkU3RyaW5nW29sZFBvcyArIDFdKSkge1xuICAgICAgbmV3UG9zKys7XG4gICAgICBvbGRQb3MrKztcbiAgICAgIGNvbW1vbkNvdW50Kys7XG4gICAgfVxuXG4gICAgaWYgKGNvbW1vbkNvdW50KSB7XG4gICAgICBiYXNlUGF0aC5jb21wb25lbnRzLnB1c2goe2NvdW50OiBjb21tb25Db3VudH0pO1xuICAgIH1cblxuICAgIGJhc2VQYXRoLm5ld1BvcyA9IG5ld1BvcztcbiAgICByZXR1cm4gb2xkUG9zO1xuICB9LFxuXG4gIGVxdWFscyhsZWZ0LCByaWdodCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuY29tcGFyYXRvcikge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5jb21wYXJhdG9yKGxlZnQsIHJpZ2h0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGxlZnQgPT09IHJpZ2h0XG4gICAgICAgIHx8ICh0aGlzLm9wdGlvbnMuaWdub3JlQ2FzZSAmJiBsZWZ0LnRvTG93ZXJDYXNlKCkgPT09IHJpZ2h0LnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cbiAgfSxcbiAgcmVtb3ZlRW1wdHkoYXJyYXkpIHtcbiAgICBsZXQgcmV0ID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGFycmF5W2ldKSB7XG4gICAgICAgIHJldC5wdXNoKGFycmF5W2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfSxcbiAgY2FzdElucHV0KHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9LFxuICB0b2tlbml6ZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZS5zcGxpdCgnJyk7XG4gIH0sXG4gIGpvaW4oY2hhcnMpIHtcbiAgICByZXR1cm4gY2hhcnMuam9pbignJyk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGJ1aWxkVmFsdWVzKGRpZmYsIGNvbXBvbmVudHMsIG5ld1N0cmluZywgb2xkU3RyaW5nLCB1c2VMb25nZXN0VG9rZW4pIHtcbiAgbGV0IGNvbXBvbmVudFBvcyA9IDAsXG4gICAgICBjb21wb25lbnRMZW4gPSBjb21wb25lbnRzLmxlbmd0aCxcbiAgICAgIG5ld1BvcyA9IDAsXG4gICAgICBvbGRQb3MgPSAwO1xuXG4gIGZvciAoOyBjb21wb25lbnRQb3MgPCBjb21wb25lbnRMZW47IGNvbXBvbmVudFBvcysrKSB7XG4gICAgbGV0IGNvbXBvbmVudCA9IGNvbXBvbmVudHNbY29tcG9uZW50UG9zXTtcbiAgICBpZiAoIWNvbXBvbmVudC5yZW1vdmVkKSB7XG4gICAgICBpZiAoIWNvbXBvbmVudC5hZGRlZCAmJiB1c2VMb25nZXN0VG9rZW4pIHtcbiAgICAgICAgbGV0IHZhbHVlID0gbmV3U3RyaW5nLnNsaWNlKG5ld1BvcywgbmV3UG9zICsgY29tcG9uZW50LmNvdW50KTtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5tYXAoZnVuY3Rpb24odmFsdWUsIGkpIHtcbiAgICAgICAgICBsZXQgb2xkVmFsdWUgPSBvbGRTdHJpbmdbb2xkUG9zICsgaV07XG4gICAgICAgICAgcmV0dXJuIG9sZFZhbHVlLmxlbmd0aCA+IHZhbHVlLmxlbmd0aCA/IG9sZFZhbHVlIDogdmFsdWU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbXBvbmVudC52YWx1ZSA9IGRpZmYuam9pbih2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb21wb25lbnQudmFsdWUgPSBkaWZmLmpvaW4obmV3U3RyaW5nLnNsaWNlKG5ld1BvcywgbmV3UG9zICsgY29tcG9uZW50LmNvdW50KSk7XG4gICAgICB9XG4gICAgICBuZXdQb3MgKz0gY29tcG9uZW50LmNvdW50O1xuXG4gICAgICAvLyBDb21tb24gY2FzZVxuICAgICAgaWYgKCFjb21wb25lbnQuYWRkZWQpIHtcbiAgICAgICAgb2xkUG9zICs9IGNvbXBvbmVudC5jb3VudDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29tcG9uZW50LnZhbHVlID0gZGlmZi5qb2luKG9sZFN0cmluZy5zbGljZShvbGRQb3MsIG9sZFBvcyArIGNvbXBvbmVudC5jb3VudCkpO1xuICAgICAgb2xkUG9zICs9IGNvbXBvbmVudC5jb3VudDtcblxuICAgICAgLy8gUmV2ZXJzZSBhZGQgYW5kIHJlbW92ZSBzbyByZW1vdmVzIGFyZSBvdXRwdXQgZmlyc3QgdG8gbWF0Y2ggY29tbW9uIGNvbnZlbnRpb25cbiAgICAgIC8vIFRoZSBkaWZmaW5nIGFsZ29yaXRobSBpcyB0aWVkIHRvIGFkZCB0aGVuIHJlbW92ZSBvdXRwdXQgYW5kIHRoaXMgaXMgdGhlIHNpbXBsZXN0XG4gICAgICAvLyByb3V0ZSB0byBnZXQgdGhlIGRlc2lyZWQgb3V0cHV0IHdpdGggbWluaW1hbCBvdmVyaGVhZC5cbiAgICAgIGlmIChjb21wb25lbnRQb3MgJiYgY29tcG9uZW50c1tjb21wb25lbnRQb3MgLSAxXS5hZGRlZCkge1xuICAgICAgICBsZXQgdG1wID0gY29tcG9uZW50c1tjb21wb25lbnRQb3MgLSAxXTtcbiAgICAgICAgY29tcG9uZW50c1tjb21wb25lbnRQb3MgLSAxXSA9IGNvbXBvbmVudHNbY29tcG9uZW50UG9zXTtcbiAgICAgICAgY29tcG9uZW50c1tjb21wb25lbnRQb3NdID0gdG1wO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFNwZWNpYWwgY2FzZSBoYW5kbGUgZm9yIHdoZW4gb25lIHRlcm1pbmFsIGlzIGlnbm9yZWQgKGkuZS4gd2hpdGVzcGFjZSkuXG4gIC8vIEZvciB0aGlzIGNhc2Ugd2UgbWVyZ2UgdGhlIHRlcm1pbmFsIGludG8gdGhlIHByaW9yIHN0cmluZyBhbmQgZHJvcCB0aGUgY2hhbmdlLlxuICAvLyBUaGlzIGlzIG9ubHkgYXZhaWxhYmxlIGZvciBzdHJpbmcgbW9kZS5cbiAgbGV0IGxhc3RDb21wb25lbnQgPSBjb21wb25lbnRzW2NvbXBvbmVudExlbiAtIDFdO1xuICBpZiAoY29tcG9uZW50TGVuID4gMVxuICAgICAgJiYgdHlwZW9mIGxhc3RDb21wb25lbnQudmFsdWUgPT09ICdzdHJpbmcnXG4gICAgICAmJiAobGFzdENvbXBvbmVudC5hZGRlZCB8fCBsYXN0Q29tcG9uZW50LnJlbW92ZWQpXG4gICAgICAmJiBkaWZmLmVxdWFscygnJywgbGFzdENvbXBvbmVudC52YWx1ZSkpIHtcbiAgICBjb21wb25lbnRzW2NvbXBvbmVudExlbiAtIDJdLnZhbHVlICs9IGxhc3RDb21wb25lbnQudmFsdWU7XG4gICAgY29tcG9uZW50cy5wb3AoKTtcbiAgfVxuXG4gIHJldHVybiBjb21wb25lbnRzO1xufVxuXG5mdW5jdGlvbiBjbG9uZVBhdGgocGF0aCkge1xuICByZXR1cm4geyBuZXdQb3M6IHBhdGgubmV3UG9zLCBjb21wb25lbnRzOiBwYXRoLmNvbXBvbmVudHMuc2xpY2UoMCkgfTtcbn1cbiJdfQ==
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL2Jhc2UuanMiXSwibmFtZXMiOlsiRGlmZiIsInByb3RvdHlwZSIsImRpZmYiLCJvbGRTdHJpbmciLCJuZXdTdHJpbmciLCJvcHRpb25zIiwiY2FsbGJhY2siLCJzZWxmIiwiZG9uZSIsInZhbHVlIiwic2V0VGltZW91dCIsInVuZGVmaW5lZCIsImNhc3RJbnB1dCIsInJlbW92ZUVtcHR5IiwidG9rZW5pemUiLCJuZXdMZW4iLCJsZW5ndGgiLCJvbGRMZW4iLCJlZGl0TGVuZ3RoIiwibWF4RWRpdExlbmd0aCIsIk1hdGgiLCJtaW4iLCJtYXhFeGVjdXRpb25UaW1lIiwidGltZW91dCIsIkluZmluaXR5IiwiYWJvcnRBZnRlclRpbWVzdGFtcCIsIkRhdGUiLCJub3ciLCJiZXN0UGF0aCIsIm9sZFBvcyIsImxhc3RDb21wb25lbnQiLCJuZXdQb3MiLCJleHRyYWN0Q29tbW9uIiwiam9pbiIsImNvdW50IiwibWluRGlhZ29uYWxUb0NvbnNpZGVyIiwibWF4RGlhZ29uYWxUb0NvbnNpZGVyIiwiZXhlY0VkaXRMZW5ndGgiLCJkaWFnb25hbFBhdGgiLCJtYXgiLCJiYXNlUGF0aCIsInJlbW92ZVBhdGgiLCJhZGRQYXRoIiwiY2FuQWRkIiwiYWRkUGF0aE5ld1BvcyIsImNhblJlbW92ZSIsImFkZFRvUGF0aCIsImJ1aWxkVmFsdWVzIiwidXNlTG9uZ2VzdFRva2VuIiwiZXhlYyIsInJldCIsInBhdGgiLCJhZGRlZCIsInJlbW92ZWQiLCJvbGRQb3NJbmMiLCJsYXN0IiwicHJldmlvdXNDb21wb25lbnQiLCJjb21tb25Db3VudCIsImVxdWFscyIsImxlZnQiLCJyaWdodCIsImNvbXBhcmF0b3IiLCJpZ25vcmVDYXNlIiwidG9Mb3dlckNhc2UiLCJhcnJheSIsImkiLCJwdXNoIiwic3BsaXQiLCJjaGFycyIsImNvbXBvbmVudHMiLCJuZXh0Q29tcG9uZW50IiwicmV2ZXJzZSIsImNvbXBvbmVudFBvcyIsImNvbXBvbmVudExlbiIsImNvbXBv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IERpZmYoKSB7fVxuXG5EaWZmLnByb3RvdHlwZSA9IHtcbiAgZGlmZihvbGRTdHJpbmcsIG5ld1N0cmluZywgb3B0aW9ucyA9IHt9KSB7XG4gICAgbGV0IGNhbGxiYWNrID0gb3B0aW9ucy5jYWxsYmFjaztcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNhbGxiYWNrID0gb3B0aW9ucztcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcblxuICAgIGxldCBzZWxmID0gdGhpcztcblxuICAgIGZ1bmN0aW9uIGRvbmUodmFsdWUpIHtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBjYWxsYmFjayh1bmRlZmluZWQsIHZhbHVlKTsgfSwgMCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFsbG93IHN1YmNsYXNzZXMgdG8gbWFzc2FnZSB0aGUgaW5wdXQgcHJpb3IgdG8gcnVubmluZ1xuICAgIG9sZFN0cmluZyA9IHRoaXMuY2FzdElucHV0KG9sZFN0cmluZyk7XG4gICAgbmV3U3RyaW5nID0gdGhpcy5jYXN0SW5wdXQobmV3U3RyaW5nKTtcblxuICAgIG9sZFN0cmluZyA9IHRoaXMucmVtb3ZlRW1wdHkodGhpcy50b2tlbml6ZShvbGRTdHJpbmcpKTtcbiAgICBuZXdTdHJpbmcgPSB0aGlzLnJlbW92ZUVtcHR5KHRoaXMudG9rZW5pemUobmV3U3RyaW5nKSk7XG5cbiAgICBsZXQgbmV3TGVuID0gbmV3U3RyaW5nLmxlbmd0aCwgb2xkTGVuID0gb2xkU3RyaW5nLmxlbmd0aDtcbiAgICBsZXQgZWRpdExlbmd0aCA9IDE7XG4gICAgbGV0IG1heEVkaXRMZW5ndGggPSBuZXdMZW4gKyBvbGRMZW47XG4gICAgaWYob3B0aW9ucy5tYXhFZGl0TGVuZ3RoKSB7XG4gICAgICBtYXhFZGl0TGVuZ3RoID0gTWF0aC5taW4obWF4RWRpdExlbmd0aCwgb3B0aW9ucy5tYXhFZGl0TGVuZ3RoKTtcbiAgICB9XG4gICAgY29uc3QgbWF4RXhlY3V0aW9uVGltZSA9IG9wdGlvbnMudGltZW91dCA/PyBJbmZpbml0eTtcbiAgICBjb25zdCBhYm9ydEFmdGVyVGltZXN0YW1wID0gRGF0ZS5ub3coKSArIG1heEV4ZWN1dGlvblRpbWU7XG5cbiAgICBsZXQgYmVzdFBhdGggPSBbeyBvbGRQb3M6IC0xLCBsYXN0Q29tcG9uZW50OiB1bmRlZmluZWQgfV07XG5cbiAgICAvLyBTZWVkIGVkaXRMZW5ndGggPSAwLCBpLmUuIHRoZSBjb250ZW50IHN0YXJ0cyB3aXRoIHRoZSBzYW1lIHZhbHVlc1xuICAgIGxldCBuZXdQb3MgPSB0aGlzLmV4dHJhY3RDb21tb24oYmVzdFBhdGhbMF0sIG5ld1N0cmluZywgb2xkU3RyaW5nLCAwKTtcbiAgICBpZiAoYmVzdFBhdGhbMF0ub2xkUG9zICsgMSA+PSBvbGRMZW4gJiYgbmV3UG9zICsgMSA+PSBuZXdMZW4pIHtcbiAgICAgIC8vIElkZW50aXR5IHBlciB0aGUgZXF1YWxpdHkgYW5kIHRva2VuaXplclxuICAgICAgcmV0dXJuIGRvbmUoW3t2YWx1ZTogdGhpcy5qb2luKG5ld1N0cmluZyksIGNvdW50OiBuZXdTdHJpbmcubGVuZ3RofV0pO1xuICAgIH1cblxuICAgIC8vIE9uY2Ugd2UgaGl0IHRoZSByaWdodCBlZGdlIG9mIHRoZSBlZGl0IGdyYXBoIG9uIHNvbWUgZGlhZ29uYWwgaywgd2UgY2FuXG4gICAgLy8gZGVmaW5pdGVseSByZWFjaCB0aGUgZW5kIG9mIHRoZSBlZGl0IGdyYXBoIGluIG5vIG1vcmUgdGhhbiBrIGVkaXRzLCBzb1xuICAgIC8vIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gY29uc2lkZXJpbmcgYW55IG1vdmVzIHRvIGRpYWdvbmFsIGsrMSBhbnkgbW9yZSAoZnJvbVxuICAgIC8vIHdoaWNoIHdlJ3JlIGd1YXJhbnRlZWQgdG8gbmVlZCBhdCBsZWFzdCBrKzEgbW9yZSBlZGl0cykuXG4gICAgLy8gU2ltaWxhcmx5LCBvbmNlIHdlJ3ZlIHJlYWNoZWQgdGhlIGJvdHRvbSBvZiB0aGUgZWRpdCBncmFwaCwgdGhlcmUncyBub1xuICAgIC8vIHBvaW50IGNvbnNpZGVyaW5nIG1vdmVzIHRvIGxvd2VyIGRpYWdvbmFscy5cbiAgICAvLyBXZSByZWNvcmQgdGhpcyBmYWN0IGJ5IHNldHRpbmcgbWluRGlhZ29uYWxUb0NvbnNpZGVyIGFuZFxuICAgIC8vIG1heERpYWdvbmFsVG9Db25zaWRlciB0byBzb21lIGZpbml0ZSB2YWx1ZSBvbmNlIHdlJ3ZlIGhpdCB0aGUgZWRnZSBvZlxuICAgIC8vIHRoZSBlZGl0IGdyYXBoLlxuICAgIC8vIFRoaXMgb3B0aW1pemF0aW9uIGlzIG5vdCBmYWl0aGZ1bCB0byB0aGUgb3JpZ2luYWwgYWxnb3JpdGhtIHByZXNlbnRlZCBpblxuICAgIC8vIE15ZXJzJ3MgcGFwZXIsIHdoaWNoIGluc3RlYWQgcG9pbnRsZXNzbHkgZXh0ZW5kcyBELXBhdGhzIG9mZiB0aGUgZW5kIG9mXG4gICAgLy8gdGhlIGVkaXQgZ3JhcGggLSBzZWUgcGFnZSA3IG9mIE15ZXJzJ3MgcGFwZXIgd2hpY2ggbm90ZXMgdGhpcyBwb2ludFxuICAgIC8vIGV4cGxpY2l0bHkgYW5kIGlsbHVzdHJhdGVzIGl0IHdpdGggYSBkaWFncmFtLiBUaGlzIGhhcyBtYWpvciBwZXJmb3JtYW5jZVxuICAgIC8vIGltcGxpY2F0aW9ucyBmb3Igc29tZSBjb21tb24gc2NlbmFyaW9zLiBGb3IgaW5zdGFuY2UsIHRvIGNvbXB1dGUgYSBkaWZmXG4gICAgLy8gd2hlcmUgdGhlIG5ldyB0ZXh0IHNpbXBseSBhcHBlbmRzIGQgY2hhcmFjdGVycyBvbiB0aGUgZW5kIG9mIHRoZVxuICAgIC8vIG9yaWdpbmFsIHRleHQgb2YgbGVuZ3RoIG4sIHRoZSB0cnVlIE15ZXJzIGFsZ29yaXRobSB3aWxsIHRha2UgTyhuK2ReMilcbiAgICAvLyB0aW1lIHdoaWxlIHRoaXMgb3B0aW1pemF0aW9uIG5lZWRzIG9ubHkgTyhuK2QpIHRpbWUuXG4gICAgbGV0IG1pbkRpYWdvbmFsVG9Db25zaWRlciA9IC1JbmZpbml0eSwgbWF4RGlhZ29uYWxUb0NvbnNpZGVyID0gSW5maW5pdHk7XG5cbiAgICAvLyBNYWluIHdvcmtlciBtZXRob2QuIGNoZWNrcyBhbGwgcGVybXV0YXRpb25zIG9mIGEgZ2l2ZW4gZWRpdCBsZW5ndGggZm9yIGFjY2VwdGFuY2UuXG4gICAgZnVuY3Rpb24gZXhlY0VkaXRMZW5ndGgoKSB7XG4gICAgICBmb3IgKFxuICAgICAgICBsZXQgZGlhZ29uYWxQYXRoID0gTWF0aC5tYXgobWluRGlhZ29uYWxUb0NvbnNpZGVyLCAtZWRpdExlbmd0aCk7XG4gICAgICAgIGRpYWdvbmFsUGF0aCA8PSBNYXRoLm1pbihtYXhEaWFnb25hbFRvQ29uc2lkZXIsIGVkaXRMZW5ndGgpO1xuICAgICAgICBkaWFnb25hbFBhdGggKz0gMlxuICAgICAgKSB7XG4gICAgICAgIGxldCBiYXNlUGF0aDtcbiAgICAgICAgbGV0IHJlbW92ZVBhdGggPSBiZXN0UGF0aFtkaWFnb25hbFBhdGggLSAxXSxcbiAgICAgICAgICAgIGFkZFBhdGggPSBiZXN0UGF0aFtkaWFnb25hbFBhdGggKyAxXTtcbiAgICAgICAgaWYgKHJlbW92ZVBhdGgpIHtcbiAgICAgICAgICAvLyBObyBvbmUgZWxzZSBpcyBnb2luZyB0byBhdHRlbXB0IHRvIHVzZSB0aGlzIHZhbHVlLCBjbGVhciBpdFxuICAgICAgICAgIGJlc3RQYXRoW2RpYWdvbmFsUGF0aCAtIDFdID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGNhbkFkZCA9IGZhbHNlO1xuICAgICAgICBpZiAoYWRkUGF0aCkge1xuICAgICAgICAgIC8vIHdoYXQgbmV3UG9zIHdpbGwgYmUgYWZ0ZXIgd2UgZG8gYW4gaW5zZXJ0aW9uOlxuICAgICAgICAgIGNvbnN0IGFkZFBhdGhOZXdQb3MgPSBhZGRQYXRoLm9sZFBvcyAtIGRpYWdvbmFsUGF0aDtcbiAgICAgICAgICBjYW5BZGQgPSBhZGRQYXRoICYmIDAgPD0gYWRkUGF0aE5ld1BvcyAmJiBhZGRQYXRoTmV3UG9zIDwgbmV3TGVuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGNhblJlbW92ZSA9IHJlbW92ZVBhdGggJiYgcmVtb3ZlUGF0aC5vbGRQb3MgKyAxIDwgb2xkTGVuO1xuICAgICAgICBpZiAoIWNhbkFkZCAmJiAhY2FuUmVtb3ZlKSB7XG4gICAgICAgICAgLy8gSWYgdGhpcyBwYXRoIGlzIGEgdGVybWluYWwgdGhlbiBwcnVuZVxuICAgICAgICAgIGJlc3RQYXRoW2RpYWdvbmFsUGF0aF0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZWxlY3QgdGhlIGRpYWdvbmFsIHRoYXQgd2Ugd2FudCB0byBicmFuY2ggZnJvbS4gV2Ugc2VsZWN0IHRoZSBwcmlvclxuICAgICAgICAvLyBwYXRoIHdob3NlIHBvc2l0aW9uIGluIHRoZSBvbGQgc3RyaW5nIGlzIHRoZSBmYXJ0aGVzdCBmcm9tIHRoZSBvcmlnaW5cbiAgICAgICAgLy8gYW5kIGRvZXMgbm90IHBhc3MgdGhlIGJvdW5kcyBvZiB0aGUgZGlmZiBncmFwaFxuICAgICAgICAvLyBUT0RPOiBSZW1vdmUgdGhlIGArIDFgIGhlcmUgdG8gbWFrZSBiZWhhdmlvciBtYXRjaCBNeWVycyBhbGdvcml0aG1cbiAgICAgICAgLy8gICAgICAgYW5kIHByZWZlciB0byBvcmRlciByZW1vdmFscyBiZWZvcmUgaW5zZXJ0aW9ucy5cbiAgICAgICAgaWYgKCFjYW5SZW1vdmUgfHwgKGNhbkFkZCAmJiByZW1vdmVQYXRoLm9sZFBvcyArIDEgPCBhZGRQYXRoLm9sZFBvcykpIHtcbiAgICAgICAgICBiYXNlUGF0aCA9IHNlbGYuYWRkVG9QYXRoKGFkZFBhdGgsIHRydWUsIHVuZGVmaW5lZCwgMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYmFzZVBhdGggPSBzZWxmLmFkZFRvUGF0aChyZW1vdmVQYXRoLCB1bmRlZmluZWQsIHRydWUsIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV3UG9zID0gc2VsZi5leHRyYWN0Q29tbW9uKGJhc2VQYXRoLCBuZXdTdHJpbmcsIG9sZFN0cmluZywgZGlhZ29uYWxQYXRoKTtcblxuICAgICAgICBpZiAoYmFzZVBhdGgub2xkUG9zICsgMSA+PSBvbGRMZW4gJiYgbmV3UG9zICsgMSA+PSBuZXdMZW4pIHtcbiAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGhpdCB0aGUgZW5kIG9mIGJvdGggc3RyaW5ncywgdGhlbiB3ZSBhcmUgZG9uZVxuICAgICAgICAgIHJldHVybiBkb25lKGJ1aWxkVmFsdWVzKHNlbGYsIGJhc2VQYXRoLmxhc3RDb21wb25lbnQsIG5ld1N0cmluZywgb2xkU3RyaW5nLCBzZWxmLnVzZUxvbmdlc3RUb2tlbikpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJlc3RQYXRoW2RpYWdvbmFsUGF0aF0gPSBiYXNlUGF0aDtcbiAgICAgICAgICBpZiAoYmFzZVBhdGgub2xkUG9zICsgMSA+PSBvbGRMZW4pIHtcbiAgICAgICAgICAgIG1heERpYWdvbmFsVG9Db25zaWRlciA9IE1hdGgubWluKG1heERpYWdvbmFsVG9Db25zaWRlciwgZGlhZ29uYWxQYXRoIC0gMSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChuZXdQb3MgKyAxID49IG5ld0xlbikge1xuICAgICAgICAgICAgbWluRGlhZ29uYWxUb0NvbnNpZGVyID0gTWF0aC5tYXgobWluRGlhZ29uYWxUb0NvbnNpZGVyLCBkaWFnb25hbFBhdGggKyAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZWRpdExlbmd0aCsrO1xuICAgIH1cblxuICAgIC8vIFBlcmZvcm1zIHRoZSBsZW5ndGggb2YgZWRpdCBpdGVyYXRpb24uIElzIGEgYml0IGZ1Z2x5IGFzIHRoaXMgaGFzIHRvIHN1cHBvcnQgdGhlXG4gICAgLy8gc3luYyBhbmQgYXN5bmMgbW9kZSB3aGljaCBpcyBuZXZlciBmdW4uIExvb3BzIG92ZXIgZXhlY0VkaXRMZW5ndGggdW50aWwgYSB2YWx1ZVxuICAgIC8vIGlzIHByb2R1Y2VkLCBvciB1bnRpbCB0aGUgZWRpdCBsZW5ndGggZXhjZWVkcyBvcHRpb25zLm1heEVkaXRMZW5ndGggKGlmIGdpdmVuKSxcbiAgICAvLyBpbiB3aGljaCBjYXNlIGl0IHdpbGwgcmV0dXJuIHVuZGVmaW5lZC5cbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIChmdW5jdGlvbiBleGVjKCkge1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGlmIChlZGl0TGVuZ3RoID4gbWF4RWRpdExlbmd0aCB8fCBEYXRlLm5vdygpID4gYWJvcnRBZnRlclRpbWVzdGFtcCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFleGVjRWRpdExlbmd0aCgpKSB7XG4gICAgICAgICAgICBleGVjKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCAwKTtcbiAgICAgIH0oKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdoaWxlIChlZGl0TGVuZ3RoIDw9IG1heEVkaXRMZW5ndGggJiYgRGF0ZS5ub3coKSA8PSBhYm9ydEFmdGVyVGltZXN0YW1wKSB7XG4gICAgICAgIGxldCByZXQgPSBleGVjRWRpdExlbmd0aCgpO1xuICAgICAgICBpZiAocmV0KSB7XG4gICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBhZGRUb1BhdGgocGF0aCwgYWRkZWQsIHJlbW92ZWQsIG9sZFBvc0luYykge1xuICAgIGxldCBsYXN0ID0gcGF0aC5sYXN0Q29tcG9uZW50O1xuICAgIGlmIChsYXN0ICYmIGxhc3QuYWRkZWQgPT09IGFkZGVkICYmIGxhc3QucmVtb3ZlZCA9PT0gcmVtb3ZlZCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb2xkUG9zOiBwYXRoLm9sZFBvcyArIG9sZFBvc0luYyxcbiAgICAgICAgbGFzdENvbXBvbmVudDoge2NvdW50OiBsYXN0LmNvdW50ICsgMSwgYWRkZWQ6IGFkZGVkLCByZW1vdmVkOiByZW1vdmVkLCBwcmV2aW91c0NvbXBvbmVudDogbGFzdC5wcmV2aW91c0NvbXBvbmVudCB9XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvbGRQb3M6IHBhdGgub2xkUG9zICsgb2xkUG9zSW5jLFxuICAgICAgICBsYXN0Q29tcG9uZW50OiB7Y291bnQ6IDEsIGFkZGVkOiBhZGRlZCwgcmVtb3ZlZDogcmVtb3ZlZCwgcHJldmlvdXNDb21wb25lbnQ6IGxhc3QgfVxuICAgICAgfTtcbiAgICB9XG4gIH0sXG4gIGV4dHJhY3RDb21tb24oYmFzZVBhdGgsIG5ld1N0cmluZywgb2xkU3RyaW5nLCBkaWFnb25hbFBhdGgpIHtcbiAgICBsZXQgbmV3TGVuID0gbmV3U3RyaW5nLmxlbmd0aCxcbiAgICAgICAgb2xkTGVuID0gb2xkU3RyaW5nLmxlbmd0aCxcbiAgICAgICAgb2xkUG9zID0gYmFzZVBhdGgub2xkUG9zLFxuICAgICAgICBuZXdQb3MgPSBvbGRQb3MgLSBkaWFnb25hbFBhdGgsXG5cbiAgICAgICAgY29tbW9uQ291bnQgPSAwO1xuICAgIHdoaWxlIChuZXdQb3MgKyAxIDwgbmV3TGVuICYmIG9sZFBvcyArIDEgPCBvbGRMZW4gJiYgdGhpcy5lcXVhbHMobmV3U3RyaW5nW25ld1BvcyArIDFdLCBvbGRTdHJpbmdbb2xkUG9zICsgMV0pKSB7XG4gICAgICBuZXdQb3MrKztcbiAgICAgIG9sZFBvcysrO1xuICAgICAgY29tbW9uQ291bnQrKztcbiAgICB9XG5cbiAgICBpZiAoY29tbW9uQ291bnQpIHtcbiAgICAgIGJhc2VQYXRoLmxhc3RDb21wb25lbnQgPSB7Y291bnQ6IGNvbW1vbkNvdW50LCBwcmV2aW91c0NvbXBvbmVudDogYmFzZVBhdGgubGFzdENvbXBvbmVudH07XG4gICAgfVxuXG4gICAgYmFzZVBhdGgub2xkUG9zID0gb2xkUG9zO1xuICAgIHJldHVybiBuZXdQb3M7XG4gIH0sXG5cbiAgZXF1YWxzKGxlZnQsIHJpZ2h0KSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5jb21wYXJhdG9yKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmNvbXBhcmF0b3IobGVmdCwgcmlnaHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbGVmdCA9PT0gcmlnaHRcbiAgICAgICAgfHwgKHRoaXMub3B0aW9ucy5pZ25vcmVDYXNlICYmIGxlZnQudG9Mb3dlckNhc2UoKSA9PT0gcmlnaHQudG9Mb3dlckNhc2UoKSk7XG4gICAgfVxuICB9LFxuICByZW1vdmVFbXB0eShhcnJheSkge1xuICAgIGxldCByZXQgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYXJyYXlbaV0pIHtcbiAgICAgICAgcmV0LnB1c2goYXJyYXlbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9LFxuICBjYXN0SW5wdXQodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH0sXG4gIHRva2VuaXplKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlLnNwbGl0KCcnKTtcbiAgfSxcbiAgam9pbihjaGFycykge1xuICAgIHJldHVybiBjaGFycy5qb2luKCcnKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gYnVpbGRWYWx1ZXMoZGlmZiwgbGFzdENvbXBvbmVudCwgbmV3U3RyaW5nLCBvbGRTdHJpbmcsIHVzZUxvbmdlc3RUb2tlbikge1xuICAvLyBGaXJzdCB3ZSBjb252ZXJ0IG91ciBsaW5rZWQgbGlzdCBvZiBjb21wb25lbnRzIGluIHJldmVyc2Ugb3JkZXIgdG8gYW5cbiAgLy8gYXJyYXkgaW4gdGhlIHJpZ2h0IG9yZGVyOlxuICBjb25zdCBjb21wb25lbnRzID0gW107XG4gIGxldCBuZXh0Q29tcG9uZW50O1xuICB3aGlsZSAobGFzdENvbXBvbmVudCkge1xuICAgIGNvbXBvbmVudHMucHVzaChsYXN0Q29tcG9uZW50KTtcbiAgICBuZXh0Q29tcG9uZW50ID0gbGFzdENvbXBvbmVudC5wcmV2aW91c0NvbXBvbmVudDtcbiAgICBkZWxldGUgbGFzdENvbXBvbmVudC5wcmV2aW91c0NvbXBvbmVudDtcbiAgICBsYXN0Q29tcG9uZW50ID0gbmV4dENvbXBvbmVudDtcbiAgfVxuICBjb21wb25lbnRzLnJldmVyc2UoKTtcblxuICBsZXQgY29tcG9uZW50UG9zID0gMCxcbiAgICAgIGNvbXBvbmVudExlbiA9IGNvbXBvbmVudHMubGVuZ3RoLFxuICAgICAgbmV3UG9zID0gMCxcbiAgICAgIG9sZFBvcyA9IDA7XG5cbiAgZm9yICg7IGNvbXBvbmVudFBvcyA8IGNvbXBvbmVudExlbjsgY29tcG9uZW50UG9zKyspIHtcbiAgICBsZXQgY29tcG9uZW50ID0gY29tcG9uZW50c1tjb21wb25lbnRQb3NdO1xuICAgIGlmICghY29tcG9uZW50LnJlbW92ZWQpIHtcbiAgICAgIGlmICghY29tcG9uZW50LmFkZGVkICYmIHVzZUxvbmdlc3RUb2tlbikge1xuICAgICAgICBsZXQgdmFsdWUgPSBuZXdTdHJpbmcuc2xpY2UobmV3UG9zLCBuZXdQb3MgKyBjb21wb25lbnQuY291bnQpO1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLm1hcChmdW5jdGlvbih2YWx1ZSwgaSkge1xuICAgICAgICAgIGxldCBvbGRWYWx1ZSA9IG9sZFN0cmluZ1tvbGRQb3MgKyBpXTtcbiAgICAgICAgICByZXR1cm4gb2xkVmFsdWUubGVuZ3RoID4gdmFsdWUubGVuZ3RoID8gb2xkVmFsdWUgOiB2YWx1ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29tcG9uZW50LnZhbHVlID0gZGlmZi5qb2luKHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbXBvbmVudC52YWx1ZSA9IGRpZmYuam9pbihuZXdTdHJpbmcuc2xpY2UobmV3UG9zLCBuZXdQb3MgKyBjb21wb25lbnQuY291bnQpKTtcbiAgICAgIH1cbiAgICAgIG5ld1BvcyArPSBjb21wb25lbnQuY291bnQ7XG5cbiAgICAgIC8vIENvbW1vbiBjYXNlXG4gICAgICBpZiAoIWNvbXBvbmVudC5hZGRlZCkge1xuICAgICAgICBvbGRQb3MgKz0gY29tcG9uZW50LmNvdW50O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb21wb25lbnQudmFsdWUgPSBkaWZmLmpvaW4ob2xkU3RyaW5nLnNsaWNlKG9sZFBvcywgb2xkUG9zICsgY29tcG9uZW50LmNvdW50KSk7XG4gICAgICBvbGRQb3MgKz0gY29tcG9uZW50LmNvdW50O1xuXG4gICAgICAvLyBSZXZlcnNlIGFkZCBhbmQgcmVtb3ZlIHNvIHJlbW92ZXMgYXJlIG91dHB1dCBmaXJzdCB0byBtYXRjaCBjb21tb24gY29udmVudGlvblxuICAgICAgLy8gVGhlIGRpZmZpbmcgYWxnb3JpdGhtIGlzIHRpZWQgdG8gYWRkIHRoZW4gcmVtb3ZlIG91dHB1dCBhbmQgdGhpcyBpcyB0aGUgc2ltcGxlc3RcbiAgICAgIC8vIHJvdXRlIHRvIGdldCB0aGUgZGVzaXJlZCBvdXRwdXQgd2l0aCBtaW5pbWFsIG92ZXJoZWFkLlxuICAgICAgaWYgKGNvbXBvbmVudFBvcyAmJiBjb21wb25lbnRzW2NvbXBvbmVudFBvcyAtIDFdLmFkZGVkKSB7XG4gICAgICAgIGxldCB0bXAgPSBjb21wb25lbnRzW2NvbXBvbmVudFBvcyAtIDFdO1xuICAgICAgICBjb21wb25lbnRzW2NvbXBvbmVudFBvcyAtIDFdID0gY29tcG9uZW50c1tjb21wb25lbnRQb3NdO1xuICAgICAgICBjb21wb25lbnRzW2NvbXBvbmVudFBvc10gPSB0bXA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gU3BlY2lhbCBjYXNlIGhhbmRsZSBmb3Igd2hlbiBvbmUgdGVybWluYWwgaXMgaWdub3JlZCAoaS5lLiB3aGl0ZXNwYWNlKS5cbiAgLy8gRm9yIHRoaXMgY2FzZSB3ZSBtZXJnZSB0aGUgdGVybWluYWwgaW50byB0aGUgcHJpb3Igc3RyaW5nIGFuZCBkcm9wIHRoZSBjaGFuZ2UuXG4gIC8vIFRoaXMgaXMgb25seSBhdmFpbGFibGUgZm9yIHN0cmluZyBtb2RlLlxuICBsZXQgZmluYWxDb21wb25lbnQgPSBjb21wb25lbnRzW2NvbXBvbmVudExlbiAtIDFdO1xuICBpZiAoY29tcG9uZW50TGVuID4gMVxuICAgICAgJiYgdHlwZW9mIGZpbmFsQ29tcG9uZW50LnZhbHVlID09PSAnc3RyaW5nJ1xuICAgICAgJiYgKGZpbmFsQ29tcG9uZW50LmFkZGVkIHx8IGZpbmFsQ29tcG9uZW50LnJlbW92ZWQpXG4gICAgICAmJiBkaWZmLmVxdWFscygnJywgZmluYWxDb21wb25lbnQudmFsdWUpKSB7XG4gICAgY29tcG9uZW50c1tjb21wb25lbnRMZW4gLSAyXS52YWx1ZSArPSBmaW5hbENvbXBvbmVudC52YWx1ZTtcbiAgICBjb21wb25lbnRzLnBvcCgpO1xuICB9XG5cbiAgcmV0dXJuIGNvbXBvbmVudHM7XG59XG4iXX0=
diff --git a/deps/npm/node_modules/diff/lib/diff/line.js b/deps/npm/node_modules/diff/lib/diff/line.js
index 855fe30b9cc2c8..30bc74d2383d20 100644
--- a/deps/npm/node_modules/diff/lib/diff/line.js
+++ b/deps/npm/node_modules/diff/lib/diff/line.js
@@ -39,6 +39,11 @@ exports.lineDiff = lineDiff;
/*istanbul ignore end*/
lineDiff.tokenize = function (value) {
+ if (this.options.stripTrailingCr) {
+ // remove one \r before \n to match GNU diff's --strip-trailing-cr behavior
+ value = value.replace(/\r\n/g, '\n');
+ }
+
var retLines = [],
linesAndNewlines = value.split(/(\n|\r\n)/); // Ignore the final empty token that occurs if the string ends with a new line
@@ -86,4 +91,4 @@ function diffTrimmedLines(oldStr, newStr, callback) {
});
return lineDiff.diff(oldStr, newStr, options);
}
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL2xpbmUuanMiXSwibmFtZXMiOlsibGluZURpZmYiLCJEaWZmIiwidG9rZW5pemUiLCJ2YWx1ZSIsInJldExpbmVzIiwibGluZXNBbmROZXdsaW5lcyIsInNwbGl0IiwibGVuZ3RoIiwicG9wIiwiaSIsImxpbmUiLCJvcHRpb25zIiwibmV3bGluZUlzVG9rZW4iLCJpZ25vcmVXaGl0ZXNwYWNlIiwidHJpbSIsInB1c2giLCJkaWZmTGluZXMiLCJvbGRTdHIiLCJuZXdTdHIiLCJjYWxsYmFjayIsImRpZmYiLCJkaWZmVHJpbW1lZExpbmVzIiwiZ2VuZXJhdGVPcHRpb25zIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTs7Ozs7QUFFTyxJQUFNQSxRQUFRLEdBQUc7QUFBSUM7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUEsQ0FBSixFQUFqQjs7Ozs7O0FBQ1BELFFBQVEsQ0FBQ0UsUUFBVCxHQUFvQixVQUFTQyxLQUFULEVBQWdCO0FBQ2xDLE1BQUlDLFFBQVEsR0FBRyxFQUFmO0FBQUEsTUFDSUMsZ0JBQWdCLEdBQUdGLEtBQUssQ0FBQ0csS0FBTixDQUFZLFdBQVosQ0FEdkIsQ0FEa0MsQ0FJbEM7O0FBQ0EsTUFBSSxDQUFDRCxnQkFBZ0IsQ0FBQ0EsZ0JBQWdCLENBQUNFLE1BQWpCLEdBQTBCLENBQTNCLENBQXJCLEVBQW9EO0FBQ2xERixJQUFBQSxnQkFBZ0IsQ0FBQ0csR0FBakI7QUFDRCxHQVBpQyxDQVNsQzs7O0FBQ0EsT0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHSixnQkFBZ0IsQ0FBQ0UsTUFBckMsRUFBNkNFLENBQUMsRUFBOUMsRUFBa0Q7QUFDaEQsUUFBSUMsSUFBSSxHQUFHTCxnQkFBZ0IsQ0FBQ0ksQ0FBRCxDQUEzQjs7QUFFQSxRQUFJQSxDQUFDLEdBQUcsQ0FBSixJQUFTLENBQUMsS0FBS0UsT0FBTCxDQUFhQyxjQUEzQixFQUEyQztBQUN6Q1IsTUFBQUEsUUFBUSxDQUFDQSxRQUFRLENBQUNHLE1BQVQsR0FBa0IsQ0FBbkIsQ0FBUixJQUFpQ0csSUFBakM7QUFDRCxLQUZELE1BRU87QUFDTCxVQUFJLEtBQUtDLE9BQUwsQ0FBYUUsZ0JBQWpCLEVBQW1DO0FBQ2pDSCxRQUFBQSxJQUFJLEdBQUdBLElBQUksQ0FBQ0ksSUFBTCxFQUFQO0FBQ0Q7O0FBQ0RWLE1BQUFBLFFBQVEsQ0FBQ1csSUFBVCxDQUFjTCxJQUFkO0FBQ0Q7QUFDRjs7QUFFRCxTQUFPTixRQUFQO0FBQ0QsQ0F4QkQ7O0FBMEJPLFNBQVNZLFNBQVQsQ0FBbUJDLE1BQW5CLEVBQTJCQyxNQUEzQixFQUFtQ0MsUUFBbkMsRUFBNkM7QUFBRSxTQUFPbkIsUUFBUSxDQUFDb0IsSUFBVCxDQUFjSCxNQUFkLEVBQXNCQyxNQUF0QixFQUE4QkMsUUFBOUIsQ0FBUDtBQUFpRDs7QUFDaEcsU0FBU0UsZ0JBQVQsQ0FBMEJKLE1BQTFCLEVBQWtDQyxNQUFsQyxFQUEwQ0MsUUFBMUMsRUFBb0Q7QUFDekQsTUFBSVIsT0FBTztBQUFHO0FBQUE7QUFBQTs7QUFBQVc7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQTtBQUFBLEdBQWdCSCxRQUFoQixFQUEwQjtBQUFDTixJQUFBQSxnQkFBZ0IsRUFBRTtBQUFuQixHQUExQixDQUFkO0FBQ0EsU0FBT2IsUUFBUSxDQUFDb0IsSUFBVCxDQUFjSCxNQUFkLEVBQXNCQyxNQUF0QixFQUE4QlAsT0FBOUIsQ0FBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IERpZmYgZnJvbSAnLi9iYXNlJztcbmltcG9ydCB7Z2VuZXJhdGVPcHRpb25zfSBmcm9tICcuLi91dGlsL3BhcmFtcyc7XG5cbmV4cG9ydCBjb25zdCBsaW5lRGlmZiA9IG5ldyBEaWZmKCk7XG5saW5lRGlmZi50b2tlbml6ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIGxldCByZXRMaW5lcyA9IFtdLFxuICAgICAgbGluZXNBbmROZXdsaW5lcyA9IHZhbHVlLnNwbGl0KC8oXFxufFxcclxcbikvKTtcblxuICAvLyBJZ25vcmUgdGhlIGZpbmFsIGVtcHR5IHRva2VuIHRoYXQgb2NjdXJzIGlmIHRoZSBzdHJpbmcgZW5kcyB3aXRoIGEgbmV3IGxpbmVcbiAgaWYgKCFsaW5lc0FuZE5ld2xpbmVzW2xpbmVzQW5kTmV3bGluZXMubGVuZ3RoIC0gMV0pIHtcbiAgICBsaW5lc0FuZE5ld2xpbmVzLnBvcCgpO1xuICB9XG5cbiAgLy8gTWVyZ2UgdGhlIGNvbnRlbnQgYW5kIGxpbmUgc2VwYXJhdG9ycyBpbnRvIHNpbmdsZSB0b2tlbnNcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lc0FuZE5ld2xpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IGxpbmUgPSBsaW5lc0FuZE5ld2xpbmVzW2ldO1xuXG4gICAgaWYgKGkgJSAyICYmICF0aGlzLm9wdGlvbnMubmV3bGluZUlzVG9rZW4pIHtcbiAgICAgIHJldExpbmVzW3JldExpbmVzLmxlbmd0aCAtIDFdICs9IGxpbmU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuaWdub3JlV2hpdGVzcGFjZSkge1xuICAgICAgICBsaW5lID0gbGluZS50cmltKCk7XG4gICAgICB9XG4gICAgICByZXRMaW5lcy5wdXNoKGxpbmUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXRMaW5lcztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBkaWZmTGluZXMob2xkU3RyLCBuZXdTdHIsIGNhbGxiYWNrKSB7IHJldHVybiBsaW5lRGlmZi5kaWZmKG9sZFN0ciwgbmV3U3RyLCBjYWxsYmFjayk7IH1cbmV4cG9ydCBmdW5jdGlvbiBkaWZmVHJpbW1lZExpbmVzKG9sZFN0ciwgbmV3U3RyLCBjYWxsYmFjaykge1xuICBsZXQgb3B0aW9ucyA9IGdlbmVyYXRlT3B0aW9ucyhjYWxsYmFjaywge2lnbm9yZVdoaXRlc3BhY2U6IHRydWV9KTtcbiAgcmV0dXJuIGxpbmVEaWZmLmRpZmYob2xkU3RyLCBuZXdTdHIsIG9wdGlvbnMpO1xufVxuIl19
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL2xpbmUuanMiXSwibmFtZXMiOlsibGluZURpZmYiLCJEaWZmIiwidG9rZW5pemUiLCJ2YWx1ZSIsIm9wdGlvbnMiLCJzdHJpcFRyYWlsaW5nQ3IiLCJyZXBsYWNlIiwicmV0TGluZXMiLCJsaW5lc0FuZE5ld2xpbmVzIiwic3BsaXQiLCJsZW5ndGgiLCJwb3AiLCJpIiwibGluZSIsIm5ld2xpbmVJc1Rva2VuIiwiaWdub3JlV2hpdGVzcGFjZSIsInRyaW0iLCJwdXNoIiwiZGlmZkxpbmVzIiwib2xkU3RyIiwibmV3U3RyIiwiY2FsbGJhY2siLCJkaWZmIiwiZGlmZlRyaW1tZWRMaW5lcyIsImdlbmVyYXRlT3B0aW9ucyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7Ozs7O0FBRU8sSUFBTUEsUUFBUSxHQUFHO0FBQUlDO0FBQUFBO0FBQUFBO0FBQUFBO0FBQUFBO0FBQUFBO0FBQUFBO0FBQUFBLENBQUosRUFBakI7Ozs7OztBQUNQRCxRQUFRLENBQUNFLFFBQVQsR0FBb0IsVUFBU0MsS0FBVCxFQUFnQjtBQUNsQyxNQUFHLEtBQUtDLE9BQUwsQ0FBYUMsZUFBaEIsRUFBaUM7QUFDL0I7QUFDQUYsSUFBQUEsS0FBSyxHQUFHQSxLQUFLLENBQUNHLE9BQU4sQ0FBYyxPQUFkLEVBQXVCLElBQXZCLENBQVI7QUFDRDs7QUFFRCxNQUFJQyxRQUFRLEdBQUcsRUFBZjtBQUFBLE1BQ0lDLGdCQUFnQixHQUFHTCxLQUFLLENBQUNNLEtBQU4sQ0FBWSxXQUFaLENBRHZCLENBTmtDLENBU2xDOztBQUNBLE1BQUksQ0FBQ0QsZ0JBQWdCLENBQUNBLGdCQUFnQixDQUFDRSxNQUFqQixHQUEwQixDQUEzQixDQUFyQixFQUFvRDtBQUNsREYsSUFBQUEsZ0JBQWdCLENBQUNHLEdBQWpCO0FBQ0QsR0FaaUMsQ0FjbEM7OztBQUNBLE9BQUssSUFBSUMsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR0osZ0JBQWdCLENBQUNFLE1BQXJDLEVBQTZDRSxDQUFDLEVBQTlDLEVBQWtEO0FBQ2hELFFBQUlDLElBQUksR0FBR0wsZ0JBQWdCLENBQUNJLENBQUQsQ0FBM0I7O0FBRUEsUUFBSUEsQ0FBQyxHQUFHLENBQUosSUFBUyxDQUFDLEtBQUtSLE9BQUwsQ0FBYVUsY0FBM0IsRUFBMkM7QUFDekNQLE1BQUFBLFFBQVEsQ0FBQ0EsUUFBUSxDQUFDRyxNQUFULEdBQWtCLENBQW5CLENBQVIsSUFBaUNHLElBQWpDO0FBQ0QsS0FGRCxNQUVPO0FBQ0wsVUFBSSxLQUFLVCxPQUFMLENBQWFXLGdCQUFqQixFQUFtQztBQUNqQ0YsUUFBQUEsSUFBSSxHQUFHQSxJQUFJLENBQUNHLElBQUwsRUFBUDtBQUNEOztBQUNEVCxNQUFBQSxRQUFRLENBQUNVLElBQVQsQ0FBY0osSUFBZDtBQUNEO0FBQ0Y7O0FBRUQsU0FBT04sUUFBUDtBQUNELENBN0JEOztBQStCTyxTQUFTVyxTQUFULENBQW1CQyxNQUFuQixFQUEyQkMsTUFBM0IsRUFBbUNDLFFBQW5DLEVBQTZDO0FBQUUsU0FBT3JCLFFBQVEsQ0FBQ3NCLElBQVQsQ0FBY0gsTUFBZCxFQUFzQkMsTUFBdEIsRUFBOEJDLFFBQTlCLENBQVA7QUFBaUQ7O0FBQ2hHLFNBQVNFLGdCQUFULENBQTBCSixNQUExQixFQUFrQ0MsTUFBbEMsRUFBMENDLFFBQTFDLEVBQW9EO0FBQ3pELE1BQUlqQixPQUFPO0FBQUc7QUFBQTtBQUFBOztBQUFBb0I7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQTtBQUFBLEdBQWdCSCxRQUFoQixFQUEwQjtBQUFDTixJQUFBQSxnQkFBZ0IsRUFBRTtBQUFuQixHQUExQixDQUFkO0FBQ0EsU0FBT2YsUUFBUSxDQUFDc0IsSUFBVCxDQUFjSCxNQUFkLEVBQXNCQyxNQUF0QixFQUE4QmhCLE9BQTlCLENBQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBEaWZmIGZyb20gJy4vYmFzZSc7XG5pbXBvcnQge2dlbmVyYXRlT3B0aW9uc30gZnJvbSAnLi4vdXRpbC9wYXJhbXMnO1xuXG5leHBvcnQgY29uc3QgbGluZURpZmYgPSBuZXcgRGlmZigpO1xubGluZURpZmYudG9rZW5pemUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICBpZih0aGlzLm9wdGlvbnMuc3RyaXBUcmFpbGluZ0NyKSB7XG4gICAgLy8gcmVtb3ZlIG9uZSBcXHIgYmVmb3JlIFxcbiB0byBtYXRjaCBHTlUgZGlmZidzIC0tc3RyaXAtdHJhaWxpbmctY3IgYmVoYXZpb3JcbiAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL1xcclxcbi9nLCAnXFxuJyk7XG4gIH1cblxuICBsZXQgcmV0TGluZXMgPSBbXSxcbiAgICAgIGxpbmVzQW5kTmV3bGluZXMgPSB2YWx1ZS5zcGxpdCgvKFxcbnxcXHJcXG4pLyk7XG5cbiAgLy8gSWdub3JlIHRoZSBmaW5hbCBlbXB0eSB0b2tlbiB0aGF0IG9jY3VycyBpZiB0aGUgc3RyaW5nIGVuZHMgd2l0aCBhIG5ldyBsaW5lXG4gIGlmICghbGluZXNBbmROZXdsaW5lc1tsaW5lc0FuZE5ld2xpbmVzLmxlbmd0aCAtIDFdKSB7XG4gICAgbGluZXNBbmROZXdsaW5lcy5wb3AoKTtcbiAgfVxuXG4gIC8vIE1lcmdlIHRoZSBjb250ZW50IGFuZCBsaW5lIHNlcGFyYXRvcnMgaW50byBzaW5nbGUgdG9rZW5zXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXNBbmROZXdsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgIGxldCBsaW5lID0gbGluZXNBbmROZXdsaW5lc1tpXTtcblxuICAgIGlmIChpICUgMiAmJiAhdGhpcy5vcHRpb25zLm5ld2xpbmVJc1Rva2VuKSB7XG4gICAgICByZXRMaW5lc1tyZXRMaW5lcy5sZW5ndGggLSAxXSArPSBsaW5lO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmlnbm9yZVdoaXRlc3BhY2UpIHtcbiAgICAgICAgbGluZSA9IGxpbmUudHJpbSgpO1xuICAgICAgfVxuICAgICAgcmV0TGluZXMucHVzaChsaW5lKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmV0TGluZXM7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZGlmZkxpbmVzKG9sZFN0ciwgbmV3U3RyLCBjYWxsYmFjaykgeyByZXR1cm4gbGluZURpZmYuZGlmZihvbGRTdHIsIG5ld1N0ciwgY2FsbGJhY2spOyB9XG5leHBvcnQgZnVuY3Rpb24gZGlmZlRyaW1tZWRMaW5lcyhvbGRTdHIsIG5ld1N0ciwgY2FsbGJhY2spIHtcbiAgbGV0IG9wdGlvbnMgPSBnZW5lcmF0ZU9wdGlvbnMoY2FsbGJhY2ssIHtpZ25vcmVXaGl0ZXNwYWNlOiB0cnVlfSk7XG4gIHJldHVybiBsaW5lRGlmZi5kaWZmKG9sZFN0ciwgbmV3U3RyLCBvcHRpb25zKTtcbn1cbiJdfQ==
diff --git a/deps/npm/node_modules/diff/lib/index.es6.js b/deps/npm/node_modules/diff/lib/index.es6.js
index c2a00135a4e242..a0ace0182ab14e 100644
--- a/deps/npm/node_modules/diff/lib/index.es6.js
+++ b/deps/npm/node_modules/diff/lib/index.es6.js
@@ -1,6 +1,8 @@
function Diff() {}
Diff.prototype = {
diff: function diff(oldString, newString) {
+ var _options$timeout;
+
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
var callback = options.callback;
@@ -37,64 +39,96 @@ Diff.prototype = {
maxEditLength = Math.min(maxEditLength, options.maxEditLength);
}
+ var maxExecutionTime = (_options$timeout = options.timeout) !== null && _options$timeout !== void 0 ? _options$timeout : Infinity;
+ var abortAfterTimestamp = Date.now() + maxExecutionTime;
var bestPath = [{
- newPos: -1,
- components: []
+ oldPos: -1,
+ lastComponent: undefined
}]; // Seed editLength = 0, i.e. the content starts with the same values
- var oldPos = this.extractCommon(bestPath[0], newString, oldString, 0);
+ var newPos = this.extractCommon(bestPath[0], newString, oldString, 0);
- if (bestPath[0].newPos + 1 >= newLen && oldPos + 1 >= oldLen) {
+ if (bestPath[0].oldPos + 1 >= oldLen && newPos + 1 >= newLen) {
// Identity per the equality and tokenizer
return done([{
value: this.join(newString),
count: newString.length
}]);
- } // Main worker method. checks all permutations of a given edit length for acceptance.
-
+ } // Once we hit the right edge of the edit graph on some diagonal k, we can
+ // definitely reach the end of the edit graph in no more than k edits, so
+ // there's no point in considering any moves to diagonal k+1 any more (from
+ // which we're guaranteed to need at least k+1 more edits).
+ // Similarly, once we've reached the bottom of the edit graph, there's no
+ // point considering moves to lower diagonals.
+ // We record this fact by setting minDiagonalToConsider and
+ // maxDiagonalToConsider to some finite value once we've hit the edge of
+ // the edit graph.
+ // This optimization is not faithful to the original algorithm presented in
+ // Myers's paper, which instead pointlessly extends D-paths off the end of
+ // the edit graph - see page 7 of Myers's paper which notes this point
+ // explicitly and illustrates it with a diagram. This has major performance
+ // implications for some common scenarios. For instance, to compute a diff
+ // where the new text simply appends d characters on the end of the
+ // original text of length n, the true Myers algorithm will take O(n+d^2)
+ // time while this optimization needs only O(n+d) time.
+
+
+ var minDiagonalToConsider = -Infinity,
+ maxDiagonalToConsider = Infinity; // Main worker method. checks all permutations of a given edit length for acceptance.
function execEditLength() {
- for (var diagonalPath = -1 * editLength; diagonalPath <= editLength; diagonalPath += 2) {
+ for (var diagonalPath = Math.max(minDiagonalToConsider, -editLength); diagonalPath <= Math.min(maxDiagonalToConsider, editLength); diagonalPath += 2) {
var basePath = void 0;
+ var removePath = bestPath[diagonalPath - 1],
+ addPath = bestPath[diagonalPath + 1];
- var addPath = bestPath[diagonalPath - 1],
- removePath = bestPath[diagonalPath + 1],
- _oldPos = (removePath ? removePath.newPos : 0) - diagonalPath;
-
- if (addPath) {
+ if (removePath) {
// No one else is going to attempt to use this value, clear it
bestPath[diagonalPath - 1] = undefined;
}
- var canAdd = addPath && addPath.newPos + 1 < newLen,
- canRemove = removePath && 0 <= _oldPos && _oldPos < oldLen;
+ var canAdd = false;
+
+ if (addPath) {
+ // what newPos will be after we do an insertion:
+ var addPathNewPos = addPath.oldPos - diagonalPath;
+ canAdd = addPath && 0 <= addPathNewPos && addPathNewPos < newLen;
+ }
+
+ var canRemove = removePath && removePath.oldPos + 1 < oldLen;
if (!canAdd && !canRemove) {
// If this path is a terminal then prune
bestPath[diagonalPath] = undefined;
continue;
} // Select the diagonal that we want to branch from. We select the prior
- // path whose position in the new string is the farthest from the origin
+ // path whose position in the old string is the farthest from the origin
// and does not pass the bounds of the diff graph
+ // TODO: Remove the `+ 1` here to make behavior match Myers algorithm
+ // and prefer to order removals before insertions.
- if (!canAdd || canRemove && addPath.newPos < removePath.newPos) {
- basePath = clonePath(removePath);
- self.pushComponent(basePath.components, undefined, true);
+ if (!canRemove || canAdd && removePath.oldPos + 1 < addPath.oldPos) {
+ basePath = self.addToPath(addPath, true, undefined, 0);
} else {
- basePath = addPath; // No need to clone, we've pulled it from the list
-
- basePath.newPos++;
- self.pushComponent(basePath.components, true, undefined);
+ basePath = self.addToPath(removePath, undefined, true, 1);
}
- _oldPos = self.extractCommon(basePath, newString, oldString, diagonalPath); // If we have hit the end of both strings, then we are done
+ newPos = self.extractCommon(basePath, newString, oldString, diagonalPath);
- if (basePath.newPos + 1 >= newLen && _oldPos + 1 >= oldLen) {
- return done(buildValues(self, basePath.components, newString, oldString, self.useLongestToken));
+ if (basePath.oldPos + 1 >= oldLen && newPos + 1 >= newLen) {
+ // If we have hit the end of both strings, then we are done
+ return done(buildValues(self, basePath.lastComponent, newString, oldString, self.useLongestToken));
} else {
- // Otherwise track this path as a potential candidate and continue.
bestPath[diagonalPath] = basePath;
+
+ if (basePath.oldPos + 1 >= oldLen) {
+ maxDiagonalToConsider = Math.min(maxDiagonalToConsider, diagonalPath - 1);
+ }
+
+ if (newPos + 1 >= newLen) {
+ minDiagonalToConsider = Math.max(minDiagonalToConsider, diagonalPath + 1);
+ }
}
}
@@ -108,7 +142,7 @@ Diff.prototype = {
if (callback) {
(function exec() {
setTimeout(function () {
- if (editLength > maxEditLength) {
+ if (editLength > maxEditLength || Date.now() > abortAfterTimestamp) {
return callback();
}
@@ -118,7 +152,7 @@ Diff.prototype = {
}, 0);
})();
} else {
- while (editLength <= maxEditLength) {
+ while (editLength <= maxEditLength && Date.now() <= abortAfterTimestamp) {
var ret = execEditLength();
if (ret) {
@@ -127,30 +161,36 @@ Diff.prototype = {
}
}
},
- pushComponent: function pushComponent(components, added, removed) {
- var last = components[components.length - 1];
+ addToPath: function addToPath(path, added, removed, oldPosInc) {
+ var last = path.lastComponent;
if (last && last.added === added && last.removed === removed) {
- // We need to clone here as the component clone operation is just
- // as shallow array clone
- components[components.length - 1] = {
- count: last.count + 1,
- added: added,
- removed: removed
+ return {
+ oldPos: path.oldPos + oldPosInc,
+ lastComponent: {
+ count: last.count + 1,
+ added: added,
+ removed: removed,
+ previousComponent: last.previousComponent
+ }
};
} else {
- components.push({
- count: 1,
- added: added,
- removed: removed
- });
+ return {
+ oldPos: path.oldPos + oldPosInc,
+ lastComponent: {
+ count: 1,
+ added: added,
+ removed: removed,
+ previousComponent: last
+ }
+ };
}
},
extractCommon: function extractCommon(basePath, newString, oldString, diagonalPath) {
var newLen = newString.length,
oldLen = oldString.length,
- newPos = basePath.newPos,
- oldPos = newPos - diagonalPath,
+ oldPos = basePath.oldPos,
+ newPos = oldPos - diagonalPath,
commonCount = 0;
while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(newString[newPos + 1], oldString[oldPos + 1])) {
@@ -160,13 +200,14 @@ Diff.prototype = {
}
if (commonCount) {
- basePath.components.push({
- count: commonCount
- });
+ basePath.lastComponent = {
+ count: commonCount,
+ previousComponent: basePath.lastComponent
+ };
}
- basePath.newPos = newPos;
- return oldPos;
+ basePath.oldPos = oldPos;
+ return newPos;
},
equals: function equals(left, right) {
if (this.options.comparator) {
@@ -197,7 +238,20 @@ Diff.prototype = {
}
};
-function buildValues(diff, components, newString, oldString, useLongestToken) {
+function buildValues(diff, lastComponent, newString, oldString, useLongestToken) {
+ // First we convert our linked list of components in reverse order to an
+ // array in the right order:
+ var components = [];
+ var nextComponent;
+
+ while (lastComponent) {
+ components.push(lastComponent);
+ nextComponent = lastComponent.previousComponent;
+ delete lastComponent.previousComponent;
+ lastComponent = nextComponent;
+ }
+
+ components.reverse();
var componentPos = 0,
componentLen = components.length,
newPos = 0,
@@ -240,23 +294,16 @@ function buildValues(diff, components, newString, oldString, useLongestToken) {
// This is only available for string mode.
- var lastComponent = components[componentLen - 1];
+ var finalComponent = components[componentLen - 1];
- if (componentLen > 1 && typeof lastComponent.value === 'string' && (lastComponent.added || lastComponent.removed) && diff.equals('', lastComponent.value)) {
- components[componentLen - 2].value += lastComponent.value;
+ if (componentLen > 1 && typeof finalComponent.value === 'string' && (finalComponent.added || finalComponent.removed) && diff.equals('', finalComponent.value)) {
+ components[componentLen - 2].value += finalComponent.value;
components.pop();
}
return components;
}
-function clonePath(path) {
- return {
- newPos: path.newPos,
- components: path.components.slice(0)
- };
-}
-
var characterDiff = new Diff();
function diffChars(oldStr, newStr, options) {
return characterDiff.diff(oldStr, newStr, options);
@@ -337,6 +384,11 @@ function diffWordsWithSpace(oldStr, newStr, options) {
var lineDiff = new Diff();
lineDiff.tokenize = function (value) {
+ if (this.options.stripTrailingCr) {
+ // remove one \r before \n to match GNU diff's --strip-trailing-cr behavior
+ value = value.replace(/\r\n/g, '\n');
+ }
+
var retLines = [],
linesAndNewlines = value.split(/(\n|\r\n)/); // Ignore the final empty token that occurs if the string ends with a new line
@@ -408,6 +460,55 @@ function _typeof(obj) {
return _typeof(obj);
}
+function _defineProperty(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+
+ return obj;
+}
+
+function ownKeys(object, enumerableOnly) {
+ var keys = Object.keys(object);
+
+ if (Object.getOwnPropertySymbols) {
+ var symbols = Object.getOwnPropertySymbols(object);
+ if (enumerableOnly) symbols = symbols.filter(function (sym) {
+ return Object.getOwnPropertyDescriptor(object, sym).enumerable;
+ });
+ keys.push.apply(keys, symbols);
+ }
+
+ return keys;
+}
+
+function _objectSpread2(target) {
+ for (var i = 1; i < arguments.length; i++) {
+ var source = arguments[i] != null ? arguments[i] : {};
+
+ if (i % 2) {
+ ownKeys(Object(source), true).forEach(function (key) {
+ _defineProperty(target, key, source[key]);
+ });
+ } else if (Object.getOwnPropertyDescriptors) {
+ Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
+ } else {
+ ownKeys(Object(source)).forEach(function (key) {
+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
+ });
+ }
+ }
+
+ return target;
+}
+
function _toConsumableArray(arr) {
return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
}
@@ -840,7 +941,7 @@ function applyPatch(source, uniDiff) {
var line = _hunk.lines[j],
operation = line.length > 0 ? line[0] : ' ',
content = line.length > 0 ? line.substr(1) : line,
- delimiter = _hunk.linedelimiters[j];
+ delimiter = _hunk.linedelimiters && _hunk.linedelimiters[j] || '\n';
if (operation === ' ') {
_toPos++;
@@ -1047,6 +1148,10 @@ function structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, ne
};
}
function formatPatch(diff) {
+ if (Array.isArray(diff)) {
+ return diff.map(formatPatch).join('\n');
+ }
+
var ret = [];
if (diff.oldFileName == diff.newFileName) {
@@ -1502,6 +1607,39 @@ function calcOldNewLineCount(lines) {
};
}
+function reversePatch(structuredPatch) {
+ if (Array.isArray(structuredPatch)) {
+ return structuredPatch.map(reversePatch).reverse();
+ }
+
+ return _objectSpread2(_objectSpread2({}, structuredPatch), {}, {
+ oldFileName: structuredPatch.newFileName,
+ oldHeader: structuredPatch.newHeader,
+ newFileName: structuredPatch.oldFileName,
+ newHeader: structuredPatch.oldHeader,
+ hunks: structuredPatch.hunks.map(function (hunk) {
+ return {
+ oldLines: hunk.newLines,
+ oldStart: hunk.newStart,
+ newLines: hunk.oldLines,
+ newStart: hunk.oldStart,
+ linedelimiters: hunk.linedelimiters,
+ lines: hunk.lines.map(function (l) {
+ if (l.startsWith('-')) {
+ return "+".concat(l.slice(1));
+ }
+
+ if (l.startsWith('+')) {
+ return "-".concat(l.slice(1));
+ }
+
+ return l;
+ })
+ };
+ })
+ });
+}
+
// See: http://code.google.com/p/google-diff-match-patch/wiki/API
function convertChangesToDMP(changes) {
var ret = [],
@@ -1558,4 +1696,4 @@ function escapeHTML(s) {
return n;
}
-export { Diff, applyPatch, applyPatches, canonicalize, convertChangesToDMP, convertChangesToXML, createPatch, createTwoFilesPatch, diffArrays, diffChars, diffCss, diffJson, diffLines, diffSentences, diffTrimmedLines, diffWords, diffWordsWithSpace, merge, parsePatch, structuredPatch };
+export { Diff, applyPatch, applyPatches, canonicalize, convertChangesToDMP, convertChangesToXML, createPatch, createTwoFilesPatch, diffArrays, diffChars, diffCss, diffJson, diffLines, diffSentences, diffTrimmedLines, diffWords, diffWordsWithSpace, formatPatch, merge, parsePatch, reversePatch, structuredPatch };
diff --git a/deps/npm/node_modules/diff/lib/index.js b/deps/npm/node_modules/diff/lib/index.js
index 920f0feeb0caf9..09d885e1182926 100644
--- a/deps/npm/node_modules/diff/lib/index.js
+++ b/deps/npm/node_modules/diff/lib/index.js
@@ -94,6 +94,12 @@ Object.defineProperty(exports, "merge", {
return _merge.merge;
}
});
+Object.defineProperty(exports, "reversePatch", {
+ enumerable: true,
+ get: function get() {
+ return _reverse.reversePatch;
+ }
+});
Object.defineProperty(exports, "structuredPatch", {
enumerable: true,
get: function get() {
@@ -112,6 +118,12 @@ Object.defineProperty(exports, "createPatch", {
return _create.createPatch;
}
});
+Object.defineProperty(exports, "formatPatch", {
+ enumerable: true,
+ get: function get() {
+ return _create.formatPatch;
+ }
+});
Object.defineProperty(exports, "convertChangesToDMP", {
enumerable: true,
get: function get() {
@@ -192,6 +204,12 @@ _merge = require("./patch/merge")
/*istanbul ignore end*/
;
+var
+/*istanbul ignore start*/
+_reverse = require("./patch/reverse")
+/*istanbul ignore end*/
+;
+
var
/*istanbul ignore start*/
_create = require("./patch/create")
@@ -213,4 +231,4 @@ _xml = require("./convert/xml")
/*istanbul ignore start*/ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
/*istanbul ignore end*/
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWdCQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBTZWUgTElDRU5TRSBmaWxlIGZvciB0ZXJtcyBvZiB1c2UgKi9cblxuLypcbiAqIFRleHQgZGlmZiBpbXBsZW1lbnRhdGlvbi5cbiAqXG4gKiBUaGlzIGxpYnJhcnkgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBBUElTOlxuICogSnNEaWZmLmRpZmZDaGFyczogQ2hhcmFjdGVyIGJ5IGNoYXJhY3RlciBkaWZmXG4gKiBKc0RpZmYuZGlmZldvcmRzOiBXb3JkIChhcyBkZWZpbmVkIGJ5IFxcYiByZWdleCkgZGlmZiB3aGljaCBpZ25vcmVzIHdoaXRlc3BhY2VcbiAqIEpzRGlmZi5kaWZmTGluZXM6IExpbmUgYmFzZWQgZGlmZlxuICpcbiAqIEpzRGlmZi5kaWZmQ3NzOiBEaWZmIHRhcmdldGVkIGF0IENTUyBjb250ZW50XG4gKlxuICogVGhlc2UgbWV0aG9kcyBhcmUgYmFzZWQgb24gdGhlIGltcGxlbWVudGF0aW9uIHByb3Bvc2VkIGluXG4gKiBcIkFuIE8oTkQpIERpZmZlcmVuY2UgQWxnb3JpdGhtIGFuZCBpdHMgVmFyaWF0aW9uc1wiIChNeWVycywgMTk4NikuXG4gKiBodHRwOi8vY2l0ZXNlZXJ4LmlzdC5wc3UuZWR1L3ZpZXdkb2Mvc3VtbWFyeT9kb2k9MTAuMS4xLjQuNjkyN1xuICovXG5pbXBvcnQgRGlmZiBmcm9tICcuL2RpZmYvYmFzZSc7XG5pbXBvcnQge2RpZmZDaGFyc30gZnJvbSAnLi9kaWZmL2NoYXJhY3Rlcic7XG5pbXBvcnQge2RpZmZXb3JkcywgZGlmZldvcmRzV2l0aFNwYWNlfSBmcm9tICcuL2RpZmYvd29yZCc7XG5pbXBvcnQge2RpZmZMaW5lcywgZGlmZlRyaW1tZWRMaW5lc30gZnJvbSAnLi9kaWZmL2xpbmUnO1xuaW1wb3J0IHtkaWZmU2VudGVuY2VzfSBmcm9tICcuL2RpZmYvc2VudGVuY2UnO1xuXG5pbXBvcnQge2RpZmZDc3N9IGZyb20gJy4vZGlmZi9jc3MnO1xuaW1wb3J0IHtkaWZmSnNvbiwgY2Fub25pY2FsaXplfSBmcm9tICcuL2RpZmYvanNvbic7XG5cbmltcG9ydCB7ZGlmZkFycmF5c30gZnJvbSAnLi9kaWZmL2FycmF5JztcblxuaW1wb3J0IHthcHBseVBhdGNoLCBhcHBseVBhdGNoZXN9IGZyb20gJy4vcGF0Y2gvYXBwbHknO1xuaW1wb3J0IHtwYXJzZVBhdGNofSBmcm9tICcuL3BhdGNoL3BhcnNlJztcbmltcG9ydCB7bWVyZ2V9IGZyb20gJy4vcGF0Y2gvbWVyZ2UnO1xuaW1wb3J0IHtzdHJ1Y3R1cmVkUGF0Y2gsIGNyZWF0ZVR3b0ZpbGVzUGF0Y2gsIGNyZWF0ZVBhdGNofSBmcm9tICcuL3BhdGNoL2NyZWF0ZSc7XG5cbmltcG9ydCB7Y29udmVydENoYW5nZXNUb0RNUH0gZnJvbSAnLi9jb252ZXJ0L2RtcCc7XG5pbXBvcnQge2NvbnZlcnRDaGFuZ2VzVG9YTUx9IGZyb20gJy4vY29udmVydC94bWwnO1xuXG5leHBvcnQge1xuICBEaWZmLFxuXG4gIGRpZmZDaGFycyxcbiAgZGlmZldvcmRzLFxuICBkaWZmV29yZHNXaXRoU3BhY2UsXG4gIGRpZmZMaW5lcyxcbiAgZGlmZlRyaW1tZWRMaW5lcyxcbiAgZGlmZlNlbnRlbmNlcyxcblxuICBkaWZmQ3NzLFxuICBkaWZmSnNvbixcblxuICBkaWZmQXJyYXlzLFxuXG4gIHN0cnVjdHVyZWRQYXRjaCxcbiAgY3JlYXRlVHdvRmlsZXNQYXRjaCxcbiAgY3JlYXRlUGF0Y2gsXG4gIGFwcGx5UGF0Y2gsXG4gIGFwcGx5UGF0Y2hlcyxcbiAgcGFyc2VQYXRjaCxcbiAgbWVyZ2UsXG4gIGNvbnZlcnRDaGFuZ2VzVG9ETVAsXG4gIGNvbnZlcnRDaGFuZ2VzVG9YTUwsXG4gIGNhbm9uaWNhbGl6ZVxufTtcbiJdfQ==
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWdCQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qIFNlZSBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zIG9mIHVzZSAqL1xuXG4vKlxuICogVGV4dCBkaWZmIGltcGxlbWVudGF0aW9uLlxuICpcbiAqIFRoaXMgbGlicmFyeSBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIEFQSXM6XG4gKiBEaWZmLmRpZmZDaGFyczogQ2hhcmFjdGVyIGJ5IGNoYXJhY3RlciBkaWZmXG4gKiBEaWZmLmRpZmZXb3JkczogV29yZCAoYXMgZGVmaW5lZCBieSBcXGIgcmVnZXgpIGRpZmYgd2hpY2ggaWdub3JlcyB3aGl0ZXNwYWNlXG4gKiBEaWZmLmRpZmZMaW5lczogTGluZSBiYXNlZCBkaWZmXG4gKlxuICogRGlmZi5kaWZmQ3NzOiBEaWZmIHRhcmdldGVkIGF0IENTUyBjb250ZW50XG4gKlxuICogVGhlc2UgbWV0aG9kcyBhcmUgYmFzZWQgb24gdGhlIGltcGxlbWVudGF0aW9uIHByb3Bvc2VkIGluXG4gKiBcIkFuIE8oTkQpIERpZmZlcmVuY2UgQWxnb3JpdGhtIGFuZCBpdHMgVmFyaWF0aW9uc1wiIChNeWVycywgMTk4NikuXG4gKiBodHRwOi8vY2l0ZXNlZXJ4LmlzdC5wc3UuZWR1L3ZpZXdkb2Mvc3VtbWFyeT9kb2k9MTAuMS4xLjQuNjkyN1xuICovXG5pbXBvcnQgRGlmZiBmcm9tICcuL2RpZmYvYmFzZSc7XG5pbXBvcnQge2RpZmZDaGFyc30gZnJvbSAnLi9kaWZmL2NoYXJhY3Rlcic7XG5pbXBvcnQge2RpZmZXb3JkcywgZGlmZldvcmRzV2l0aFNwYWNlfSBmcm9tICcuL2RpZmYvd29yZCc7XG5pbXBvcnQge2RpZmZMaW5lcywgZGlmZlRyaW1tZWRMaW5lc30gZnJvbSAnLi9kaWZmL2xpbmUnO1xuaW1wb3J0IHtkaWZmU2VudGVuY2VzfSBmcm9tICcuL2RpZmYvc2VudGVuY2UnO1xuXG5pbXBvcnQge2RpZmZDc3N9IGZyb20gJy4vZGlmZi9jc3MnO1xuaW1wb3J0IHtkaWZmSnNvbiwgY2Fub25pY2FsaXplfSBmcm9tICcuL2RpZmYvanNvbic7XG5cbmltcG9ydCB7ZGlmZkFycmF5c30gZnJvbSAnLi9kaWZmL2FycmF5JztcblxuaW1wb3J0IHthcHBseVBhdGNoLCBhcHBseVBhdGNoZXN9IGZyb20gJy4vcGF0Y2gvYXBwbHknO1xuaW1wb3J0IHtwYXJzZVBhdGNofSBmcm9tICcuL3BhdGNoL3BhcnNlJztcbmltcG9ydCB7bWVyZ2V9IGZyb20gJy4vcGF0Y2gvbWVyZ2UnO1xuaW1wb3J0IHtyZXZlcnNlUGF0Y2h9IGZyb20gJy4vcGF0Y2gvcmV2ZXJzZSc7XG5pbXBvcnQge3N0cnVjdHVyZWRQYXRjaCwgY3JlYXRlVHdvRmlsZXNQYXRjaCwgY3JlYXRlUGF0Y2gsIGZvcm1hdFBhdGNofSBmcm9tICcuL3BhdGNoL2NyZWF0ZSc7XG5cbmltcG9ydCB7Y29udmVydENoYW5nZXNUb0RNUH0gZnJvbSAnLi9jb252ZXJ0L2RtcCc7XG5pbXBvcnQge2NvbnZlcnRDaGFuZ2VzVG9YTUx9IGZyb20gJy4vY29udmVydC94bWwnO1xuXG5leHBvcnQge1xuICBEaWZmLFxuXG4gIGRpZmZDaGFycyxcbiAgZGlmZldvcmRzLFxuICBkaWZmV29yZHNXaXRoU3BhY2UsXG4gIGRpZmZMaW5lcyxcbiAgZGlmZlRyaW1tZWRMaW5lcyxcbiAgZGlmZlNlbnRlbmNlcyxcblxuICBkaWZmQ3NzLFxuICBkaWZmSnNvbixcblxuICBkaWZmQXJyYXlzLFxuXG4gIHN0cnVjdHVyZWRQYXRjaCxcbiAgY3JlYXRlVHdvRmlsZXNQYXRjaCxcbiAgY3JlYXRlUGF0Y2gsXG4gIGZvcm1hdFBhdGNoLFxuICBhcHBseVBhdGNoLFxuICBhcHBseVBhdGNoZXMsXG4gIHBhcnNlUGF0Y2gsXG4gIG1lcmdlLFxuICByZXZlcnNlUGF0Y2gsXG4gIGNvbnZlcnRDaGFuZ2VzVG9ETVAsXG4gIGNvbnZlcnRDaGFuZ2VzVG9YTUwsXG4gIGNhbm9uaWNhbGl6ZVxufTtcbiJdfQ==
diff --git a/deps/npm/node_modules/diff/lib/index.mjs b/deps/npm/node_modules/diff/lib/index.mjs
index c2a00135a4e242..a0ace0182ab14e 100644
--- a/deps/npm/node_modules/diff/lib/index.mjs
+++ b/deps/npm/node_modules/diff/lib/index.mjs
@@ -1,6 +1,8 @@
function Diff() {}
Diff.prototype = {
diff: function diff(oldString, newString) {
+ var _options$timeout;
+
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
var callback = options.callback;
@@ -37,64 +39,96 @@ Diff.prototype = {
maxEditLength = Math.min(maxEditLength, options.maxEditLength);
}
+ var maxExecutionTime = (_options$timeout = options.timeout) !== null && _options$timeout !== void 0 ? _options$timeout : Infinity;
+ var abortAfterTimestamp = Date.now() + maxExecutionTime;
var bestPath = [{
- newPos: -1,
- components: []
+ oldPos: -1,
+ lastComponent: undefined
}]; // Seed editLength = 0, i.e. the content starts with the same values
- var oldPos = this.extractCommon(bestPath[0], newString, oldString, 0);
+ var newPos = this.extractCommon(bestPath[0], newString, oldString, 0);
- if (bestPath[0].newPos + 1 >= newLen && oldPos + 1 >= oldLen) {
+ if (bestPath[0].oldPos + 1 >= oldLen && newPos + 1 >= newLen) {
// Identity per the equality and tokenizer
return done([{
value: this.join(newString),
count: newString.length
}]);
- } // Main worker method. checks all permutations of a given edit length for acceptance.
-
+ } // Once we hit the right edge of the edit graph on some diagonal k, we can
+ // definitely reach the end of the edit graph in no more than k edits, so
+ // there's no point in considering any moves to diagonal k+1 any more (from
+ // which we're guaranteed to need at least k+1 more edits).
+ // Similarly, once we've reached the bottom of the edit graph, there's no
+ // point considering moves to lower diagonals.
+ // We record this fact by setting minDiagonalToConsider and
+ // maxDiagonalToConsider to some finite value once we've hit the edge of
+ // the edit graph.
+ // This optimization is not faithful to the original algorithm presented in
+ // Myers's paper, which instead pointlessly extends D-paths off the end of
+ // the edit graph - see page 7 of Myers's paper which notes this point
+ // explicitly and illustrates it with a diagram. This has major performance
+ // implications for some common scenarios. For instance, to compute a diff
+ // where the new text simply appends d characters on the end of the
+ // original text of length n, the true Myers algorithm will take O(n+d^2)
+ // time while this optimization needs only O(n+d) time.
+
+
+ var minDiagonalToConsider = -Infinity,
+ maxDiagonalToConsider = Infinity; // Main worker method. checks all permutations of a given edit length for acceptance.
function execEditLength() {
- for (var diagonalPath = -1 * editLength; diagonalPath <= editLength; diagonalPath += 2) {
+ for (var diagonalPath = Math.max(minDiagonalToConsider, -editLength); diagonalPath <= Math.min(maxDiagonalToConsider, editLength); diagonalPath += 2) {
var basePath = void 0;
+ var removePath = bestPath[diagonalPath - 1],
+ addPath = bestPath[diagonalPath + 1];
- var addPath = bestPath[diagonalPath - 1],
- removePath = bestPath[diagonalPath + 1],
- _oldPos = (removePath ? removePath.newPos : 0) - diagonalPath;
-
- if (addPath) {
+ if (removePath) {
// No one else is going to attempt to use this value, clear it
bestPath[diagonalPath - 1] = undefined;
}
- var canAdd = addPath && addPath.newPos + 1 < newLen,
- canRemove = removePath && 0 <= _oldPos && _oldPos < oldLen;
+ var canAdd = false;
+
+ if (addPath) {
+ // what newPos will be after we do an insertion:
+ var addPathNewPos = addPath.oldPos - diagonalPath;
+ canAdd = addPath && 0 <= addPathNewPos && addPathNewPos < newLen;
+ }
+
+ var canRemove = removePath && removePath.oldPos + 1 < oldLen;
if (!canAdd && !canRemove) {
// If this path is a terminal then prune
bestPath[diagonalPath] = undefined;
continue;
} // Select the diagonal that we want to branch from. We select the prior
- // path whose position in the new string is the farthest from the origin
+ // path whose position in the old string is the farthest from the origin
// and does not pass the bounds of the diff graph
+ // TODO: Remove the `+ 1` here to make behavior match Myers algorithm
+ // and prefer to order removals before insertions.
- if (!canAdd || canRemove && addPath.newPos < removePath.newPos) {
- basePath = clonePath(removePath);
- self.pushComponent(basePath.components, undefined, true);
+ if (!canRemove || canAdd && removePath.oldPos + 1 < addPath.oldPos) {
+ basePath = self.addToPath(addPath, true, undefined, 0);
} else {
- basePath = addPath; // No need to clone, we've pulled it from the list
-
- basePath.newPos++;
- self.pushComponent(basePath.components, true, undefined);
+ basePath = self.addToPath(removePath, undefined, true, 1);
}
- _oldPos = self.extractCommon(basePath, newString, oldString, diagonalPath); // If we have hit the end of both strings, then we are done
+ newPos = self.extractCommon(basePath, newString, oldString, diagonalPath);
- if (basePath.newPos + 1 >= newLen && _oldPos + 1 >= oldLen) {
- return done(buildValues(self, basePath.components, newString, oldString, self.useLongestToken));
+ if (basePath.oldPos + 1 >= oldLen && newPos + 1 >= newLen) {
+ // If we have hit the end of both strings, then we are done
+ return done(buildValues(self, basePath.lastComponent, newString, oldString, self.useLongestToken));
} else {
- // Otherwise track this path as a potential candidate and continue.
bestPath[diagonalPath] = basePath;
+
+ if (basePath.oldPos + 1 >= oldLen) {
+ maxDiagonalToConsider = Math.min(maxDiagonalToConsider, diagonalPath - 1);
+ }
+
+ if (newPos + 1 >= newLen) {
+ minDiagonalToConsider = Math.max(minDiagonalToConsider, diagonalPath + 1);
+ }
}
}
@@ -108,7 +142,7 @@ Diff.prototype = {
if (callback) {
(function exec() {
setTimeout(function () {
- if (editLength > maxEditLength) {
+ if (editLength > maxEditLength || Date.now() > abortAfterTimestamp) {
return callback();
}
@@ -118,7 +152,7 @@ Diff.prototype = {
}, 0);
})();
} else {
- while (editLength <= maxEditLength) {
+ while (editLength <= maxEditLength && Date.now() <= abortAfterTimestamp) {
var ret = execEditLength();
if (ret) {
@@ -127,30 +161,36 @@ Diff.prototype = {
}
}
},
- pushComponent: function pushComponent(components, added, removed) {
- var last = components[components.length - 1];
+ addToPath: function addToPath(path, added, removed, oldPosInc) {
+ var last = path.lastComponent;
if (last && last.added === added && last.removed === removed) {
- // We need to clone here as the component clone operation is just
- // as shallow array clone
- components[components.length - 1] = {
- count: last.count + 1,
- added: added,
- removed: removed
+ return {
+ oldPos: path.oldPos + oldPosInc,
+ lastComponent: {
+ count: last.count + 1,
+ added: added,
+ removed: removed,
+ previousComponent: last.previousComponent
+ }
};
} else {
- components.push({
- count: 1,
- added: added,
- removed: removed
- });
+ return {
+ oldPos: path.oldPos + oldPosInc,
+ lastComponent: {
+ count: 1,
+ added: added,
+ removed: removed,
+ previousComponent: last
+ }
+ };
}
},
extractCommon: function extractCommon(basePath, newString, oldString, diagonalPath) {
var newLen = newString.length,
oldLen = oldString.length,
- newPos = basePath.newPos,
- oldPos = newPos - diagonalPath,
+ oldPos = basePath.oldPos,
+ newPos = oldPos - diagonalPath,
commonCount = 0;
while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(newString[newPos + 1], oldString[oldPos + 1])) {
@@ -160,13 +200,14 @@ Diff.prototype = {
}
if (commonCount) {
- basePath.components.push({
- count: commonCount
- });
+ basePath.lastComponent = {
+ count: commonCount,
+ previousComponent: basePath.lastComponent
+ };
}
- basePath.newPos = newPos;
- return oldPos;
+ basePath.oldPos = oldPos;
+ return newPos;
},
equals: function equals(left, right) {
if (this.options.comparator) {
@@ -197,7 +238,20 @@ Diff.prototype = {
}
};
-function buildValues(diff, components, newString, oldString, useLongestToken) {
+function buildValues(diff, lastComponent, newString, oldString, useLongestToken) {
+ // First we convert our linked list of components in reverse order to an
+ // array in the right order:
+ var components = [];
+ var nextComponent;
+
+ while (lastComponent) {
+ components.push(lastComponent);
+ nextComponent = lastComponent.previousComponent;
+ delete lastComponent.previousComponent;
+ lastComponent = nextComponent;
+ }
+
+ components.reverse();
var componentPos = 0,
componentLen = components.length,
newPos = 0,
@@ -240,23 +294,16 @@ function buildValues(diff, components, newString, oldString, useLongestToken) {
// This is only available for string mode.
- var lastComponent = components[componentLen - 1];
+ var finalComponent = components[componentLen - 1];
- if (componentLen > 1 && typeof lastComponent.value === 'string' && (lastComponent.added || lastComponent.removed) && diff.equals('', lastComponent.value)) {
- components[componentLen - 2].value += lastComponent.value;
+ if (componentLen > 1 && typeof finalComponent.value === 'string' && (finalComponent.added || finalComponent.removed) && diff.equals('', finalComponent.value)) {
+ components[componentLen - 2].value += finalComponent.value;
components.pop();
}
return components;
}
-function clonePath(path) {
- return {
- newPos: path.newPos,
- components: path.components.slice(0)
- };
-}
-
var characterDiff = new Diff();
function diffChars(oldStr, newStr, options) {
return characterDiff.diff(oldStr, newStr, options);
@@ -337,6 +384,11 @@ function diffWordsWithSpace(oldStr, newStr, options) {
var lineDiff = new Diff();
lineDiff.tokenize = function (value) {
+ if (this.options.stripTrailingCr) {
+ // remove one \r before \n to match GNU diff's --strip-trailing-cr behavior
+ value = value.replace(/\r\n/g, '\n');
+ }
+
var retLines = [],
linesAndNewlines = value.split(/(\n|\r\n)/); // Ignore the final empty token that occurs if the string ends with a new line
@@ -408,6 +460,55 @@ function _typeof(obj) {
return _typeof(obj);
}
+function _defineProperty(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+
+ return obj;
+}
+
+function ownKeys(object, enumerableOnly) {
+ var keys = Object.keys(object);
+
+ if (Object.getOwnPropertySymbols) {
+ var symbols = Object.getOwnPropertySymbols(object);
+ if (enumerableOnly) symbols = symbols.filter(function (sym) {
+ return Object.getOwnPropertyDescriptor(object, sym).enumerable;
+ });
+ keys.push.apply(keys, symbols);
+ }
+
+ return keys;
+}
+
+function _objectSpread2(target) {
+ for (var i = 1; i < arguments.length; i++) {
+ var source = arguments[i] != null ? arguments[i] : {};
+
+ if (i % 2) {
+ ownKeys(Object(source), true).forEach(function (key) {
+ _defineProperty(target, key, source[key]);
+ });
+ } else if (Object.getOwnPropertyDescriptors) {
+ Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
+ } else {
+ ownKeys(Object(source)).forEach(function (key) {
+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
+ });
+ }
+ }
+
+ return target;
+}
+
function _toConsumableArray(arr) {
return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
}
@@ -840,7 +941,7 @@ function applyPatch(source, uniDiff) {
var line = _hunk.lines[j],
operation = line.length > 0 ? line[0] : ' ',
content = line.length > 0 ? line.substr(1) : line,
- delimiter = _hunk.linedelimiters[j];
+ delimiter = _hunk.linedelimiters && _hunk.linedelimiters[j] || '\n';
if (operation === ' ') {
_toPos++;
@@ -1047,6 +1148,10 @@ function structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, ne
};
}
function formatPatch(diff) {
+ if (Array.isArray(diff)) {
+ return diff.map(formatPatch).join('\n');
+ }
+
var ret = [];
if (diff.oldFileName == diff.newFileName) {
@@ -1502,6 +1607,39 @@ function calcOldNewLineCount(lines) {
};
}
+function reversePatch(structuredPatch) {
+ if (Array.isArray(structuredPatch)) {
+ return structuredPatch.map(reversePatch).reverse();
+ }
+
+ return _objectSpread2(_objectSpread2({}, structuredPatch), {}, {
+ oldFileName: structuredPatch.newFileName,
+ oldHeader: structuredPatch.newHeader,
+ newFileName: structuredPatch.oldFileName,
+ newHeader: structuredPatch.oldHeader,
+ hunks: structuredPatch.hunks.map(function (hunk) {
+ return {
+ oldLines: hunk.newLines,
+ oldStart: hunk.newStart,
+ newLines: hunk.oldLines,
+ newStart: hunk.oldStart,
+ linedelimiters: hunk.linedelimiters,
+ lines: hunk.lines.map(function (l) {
+ if (l.startsWith('-')) {
+ return "+".concat(l.slice(1));
+ }
+
+ if (l.startsWith('+')) {
+ return "-".concat(l.slice(1));
+ }
+
+ return l;
+ })
+ };
+ })
+ });
+}
+
// See: http://code.google.com/p/google-diff-match-patch/wiki/API
function convertChangesToDMP(changes) {
var ret = [],
@@ -1558,4 +1696,4 @@ function escapeHTML(s) {
return n;
}
-export { Diff, applyPatch, applyPatches, canonicalize, convertChangesToDMP, convertChangesToXML, createPatch, createTwoFilesPatch, diffArrays, diffChars, diffCss, diffJson, diffLines, diffSentences, diffTrimmedLines, diffWords, diffWordsWithSpace, merge, parsePatch, structuredPatch };
+export { Diff, applyPatch, applyPatches, canonicalize, convertChangesToDMP, convertChangesToXML, createPatch, createTwoFilesPatch, diffArrays, diffChars, diffCss, diffJson, diffLines, diffSentences, diffTrimmedLines, diffWords, diffWordsWithSpace, formatPatch, merge, parsePatch, reversePatch, structuredPatch };
diff --git a/deps/npm/node_modules/diff/lib/patch/apply.js b/deps/npm/node_modules/diff/lib/patch/apply.js
index 21c76ddb76ba78..cefea04dae73b0 100644
--- a/deps/npm/node_modules/diff/lib/patch/apply.js
+++ b/deps/npm/node_modules/diff/lib/patch/apply.js
@@ -148,7 +148,7 @@ function applyPatch(source, uniDiff) {
var line = _hunk.lines[j],
operation = line.length > 0 ? line[0] : ' ',
content = line.length > 0 ? line.substr(1) : line,
- delimiter = _hunk.linedelimiters[j];
+ delimiter = _hunk.linedelimiters && _hunk.linedelimiters[j] || '\n';
if (operation === ' ') {
_toPos++;
@@ -235,4 +235,4 @@ function applyPatches(uniDiff, options) {
processIndex();
}
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYXRjaC9hcHBseS5qcyJdLCJuYW1lcyI6WyJhcHBseVBhdGNoIiwic291cmNlIiwidW5pRGlmZiIsIm9wdGlvbnMiLCJwYXJzZVBhdGNoIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwiRXJyb3IiLCJsaW5lcyIsInNwbGl0IiwiZGVsaW1pdGVycyIsIm1hdGNoIiwiaHVua3MiLCJjb21wYXJlTGluZSIsImxpbmVOdW1iZXIiLCJsaW5lIiwib3BlcmF0aW9uIiwicGF0Y2hDb250ZW50IiwiZXJyb3JDb3VudCIsImZ1enpGYWN0b3IiLCJtaW5MaW5lIiwib2Zmc2V0IiwicmVtb3ZlRU9GTkwiLCJhZGRFT0ZOTCIsImh1bmtGaXRzIiwiaHVuayIsInRvUG9zIiwiaiIsImNvbnRlbnQiLCJzdWJzdHIiLCJpIiwibWF4TGluZSIsIm9sZExpbmVzIiwibG9jYWxPZmZzZXQiLCJvbGRTdGFydCIsIml0ZXJhdG9yIiwiZGlzdGFuY2VJdGVyYXRvciIsInVuZGVmaW5lZCIsImRpZmZPZmZzZXQiLCJuZXdMaW5lcyIsImRlbGltaXRlciIsImxpbmVkZWxpbWl0ZXJzIiwic3BsaWNlIiwicHJldmlvdXNPcGVyYXRpb24iLCJwb3AiLCJwdXNoIiwiX2siLCJqb2luIiwiYXBwbHlQYXRjaGVzIiwiY3VycmVudEluZGV4IiwicHJvY2Vzc0luZGV4IiwiaW5kZXgiLCJjb21wbGV0ZSIsImxvYWRGaWxlIiwiZXJyIiwiZGF0YSIsInVwZGF0ZWRDb250ZW50IiwicGF0Y2hlZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTs7Ozs7QUFFTyxTQUFTQSxVQUFULENBQW9CQyxNQUFwQixFQUE0QkMsT0FBNUIsRUFBbUQ7QUFBQTtBQUFBO0FBQUE7QUFBZEMsRUFBQUEsT0FBYyx1RUFBSixFQUFJOztBQUN4RCxNQUFJLE9BQU9ELE9BQVAsS0FBbUIsUUFBdkIsRUFBaUM7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QUNEOztBQUVELE1BQUlnRCxZQUFZLEdBQUcsQ0FBbkI7O0FBQ0EsV0FBU0MsWUFBVCxHQUF3QjtBQUN0QixRQUFJQyxLQUFLLEdBQUdsRCxPQUFPLENBQUNnRCxZQUFZLEVBQWIsQ0FBbkI7O0FBQ0EsUUFBSSxDQUFDRSxLQUFMLEVBQVk7QUFDVixhQUFPakQsT0FBTyxDQUFDa0QsUUFBUixFQUFQO0FBQ0Q7O0FBRURsRCxJQUFBQSxPQUFPLENBQUNtRCxRQUFSLENBQWlCRixLQUFqQixFQUF3QixVQUFTRyxHQUFULEVBQWNDLElBQWQsRUFBb0I7QUFDMUMsVUFBSUQsR0FBSixFQUFTO0FBQ1AsZUFBT3BELE9BQU8sQ0FBQ2tELFFBQVIsQ0FBaUJFLEdBQWpCLENBQVA7QUFDRDs7QUFFRCxVQUFJRSxjQUFjLEdBQUd6RCxVQUFVLENBQUN3RCxJQUFELEVBQU9KLEtBQVAsRUFBY2pELE9BQWQsQ0FBL0I7QUFDQUEsTUFBQUEsT0FBTyxDQUFDdUQsT0FBUixDQUFnQk4sS0FBaEIsRUFBdUJLLGNBQXZCLEVBQXVDLFVBQVNGLEdBQVQsRUFBYztBQUNuRCxZQUFJQSxHQUFKLEVBQVM7QUFDUCxpQkFBT3BELE9BQU8sQ0FBQ2tELFFBQVIsQ0FBaUJFLEdBQWpCLENBQVA7QUFDRDs7QUFFREosUUFBQUEsWUFBWTtBQUNiLE9BTkQ7QUFPRCxLQWJEO0FBY0Q7O0FBQ0RBLEVBQUFBLFlBQVk7QUFDYiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7cGFyc2VQYXRjaH0gZnJvbSAnLi9wYXJzZSc7XG5pbXBvcnQgZGlzdGFuY2VJdGVyYXRvciBmcm9tICcuLi91dGlsL2Rpc3RhbmNlLWl0ZXJhdG9yJztcblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5UGF0Y2goc291cmNlLCB1bmlEaWZmLCBvcHRpb25zID0ge30pIHtcbiAgaWYgKHR5cGVvZiB1bmlEaWZmID09PSAnc3RyaW5nJykge1xuICAgIHVuaURpZmYgPSBwYXJzZVBhdGNoKHVuaURpZmYpO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodW5pRGlmZikpIHtcbiAgICBpZiAodW5pRGlmZi5sZW5ndGggPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2FwcGx5UGF0Y2ggb25seSB3b3JrcyB3aXRoIGEgc2luZ2xlIGlucHV0LicpO1xuICAgIH1cblxuICAgIHVuaURpZmYgPSB1bmlEaWZmWzBdO1xuICB9XG5cbiAgLy8gQXBwbHkgdGhlIGRpZmYgdG8gdGhlIGlucHV0XG4gIGxldCBsaW5lcyA9IHNvdXJjZS5zcGxpdCgvXFxyXFxufFtcXG5cXHZcXGZcXHJcXHg4NV0vKSxcbiAgICAgIGRlbGltaXRlcnMgPSBzb3VyY2UubWF0Y2goL1xcclxcbnxbXFxuXFx2XFxmXFxyXFx4ODVdL2cpIHx8IFtdLFxuICAgICAgaHVua3MgPSB1bmlEaWZmLmh1bmtzLFxuXG4gICAgICBjb21wYXJlTGluZSA9IG9wdGlvbnMuY29tcGFyZUxpbmUgfHwgKChsaW5lTnVtYmVyLCBsaW5lLCBvcGVyYXRpb24sIHBhdGNoQ29udGVudCkgPT4gbGluZSA9PT0gcGF0Y2hDb250ZW50KSxcbiAgICAgIGVycm9yQ291bnQgPSAwLFxuICAgICAgZnV6ekZhY3RvciA9IG9wdGlvbnMuZnV6ekZhY3RvciB8fCAwLFxuICAgICAgbWluTGluZSA9IDAsXG4gICAgICBvZmZzZXQgPSAwLFxuXG4gICAgICByZW1vdmVFT0ZOTCxcbiAgICAgIGFkZEVPRk5MO1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIGh1bmsgZXhhY3RseSBmaXRzIG9uIHRoZSBwcm92aWRlZCBsb2NhdGlvblxuICAgKi9cbiAgZnVuY3Rpb24gaHVua0ZpdHMoaHVuaywgdG9Qb3MpIHtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGh1bmsubGluZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGxldCBsaW5lID0gaHVuay5saW5lc1tqXSxcbiAgICAgICAgICBvcGVyYXRpb24gPSAobGluZS5sZW5ndGggPiAwID8gbGluZVswXSA6ICcgJyksXG4gICAgICAgICAgY29udGVudCA9IChsaW5lLmxlbmd0aCA+IDAgPyBsaW5lLnN1YnN0cigxKSA6IGxpbmUpO1xuXG4gICAgICBpZiAob3BlcmF0aW9uID09PSAnICcgfHwgb3BlcmF0aW9uID09PSAnLScpIHtcbiAgICAgICAgLy8gQ29udGV4dCBzYW5pdHkgY2hlY2tcbiAgICAgICAgaWYgKCFjb21wYXJlTGluZSh0b1BvcyArIDEsIGxpbmVzW3RvUG9zXSwgb3BlcmF0aW9uLCBjb250ZW50KSkge1xuICAgICAgICAgIGVycm9yQ291bnQrKztcblxuICAgICAgICAgIGlmIChlcnJvckNvdW50ID4gZnV6ekZhY3Rvcikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0b1BvcysrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gU2VhcmNoIGJlc3QgZml0IG9mZnNldHMgZm9yIGVhY2ggaHVuayBiYXNlZCBvbiB0aGUgcHJldmlvdXMgb25lc1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGh1bmtzLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IGh1bmsgPSBodW5rc1tpXSxcbiAgICAgICAgbWF4TGluZSA9IGxpbmVzLmxlbmd0aCAtIGh1bmsub2xkTGluZXMsXG4gICAgICAgIGxvY2FsT2Zmc2V0ID0gMCxcbiAgICAgICAgdG9Qb3MgPSBvZmZzZXQgKyBodW5rLm9sZFN0YXJ0IC0gMTtcblxuICAgIGxldCBpdGVyYXRvciA9IGRpc3RhbmNlSXRlcmF0b3IodG9Qb3MsIG1pbkxpbmUsIG1heExpbmUpO1xuXG4gICAgZm9yICg7IGxvY2FsT2Zmc2V0ICE9PSB1bmRlZmluZWQ7IGxvY2FsT2Zmc2V0ID0gaXRlcmF0b3IoKSkge1xuICAgICAgaWYgKGh1bmtGaXRzKGh1bmssIHRvUG9zICsgbG9jYWxPZmZzZXQpKSB7XG4gICAgICAgIGh1bmsub2Zmc2V0ID0gb2Zmc2V0ICs9IGxvY2FsT2Zmc2V0O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobG9jYWxPZmZzZXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFNldCBsb3dlciB0ZXh0IGxpbWl0IHRvIGVuZCBvZiB0aGUgY3VycmVudCBodW5rLCBzbyBuZXh0IG9uZXMgZG9uJ3QgdHJ5XG4gICAgLy8gdG8gZml0IG92ZXIgYWxyZWFkeSBwYXRjaGVkIHRleHRcbiAgICBtaW5MaW5lID0gaHVuay5vZmZzZXQgKyBodW5rLm9sZFN0YXJ0ICsgaHVuay5vbGRMaW5lcztcbiAgfVxuXG4gIC8vIEFwcGx5IHBhdGNoIGh1bmtzXG4gIGxldCBkaWZmT2Zmc2V0ID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBodW5rcy5sZW5ndGg7IGkrKykge1xuICAgIGxldCBodW5rID0gaHVua3NbaV0sXG4gICAgICAgIHRvUG9zID0gaHVuay5vbGRTdGFydCArIGh1bmsub2Zmc2V0ICsgZGlmZk9mZnNldCAtIDE7XG4gICAgZGlmZk9mZnNldCArPSBodW5rLm5ld0xpbmVzIC0gaHVuay5vbGRMaW5lcztcblxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgaHVuay5saW5lcy5sZW5ndGg7IGorKykge1xuICAgICAgbGV0IGxpbmUgPSBodW5rLmxpbmVzW2pdLFxuICAgICAgICAgIG9wZXJhdGlvbiA9IChsaW5lLmxlbmd0aCA+IDAgPyBsaW5lWzBdIDogJyAnKSxcbiAgICAgICAgICBjb250ZW50ID0gKGxpbmUubGVuZ3RoID4gMCA/IGxpbmUuc3Vic3RyKDEpIDogbGluZSksXG4gICAgICAgICAgZGVsaW1pdGVyID0gaHVuay5saW5lZGVsaW1pdGVyc1tqXTtcblxuICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gJyAnKSB7XG4gICAgICAgIHRvUG9zKys7XG4gICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiA9PT0gJy0nKSB7XG4gICAgICAgIGxpbmVzLnNwbGljZSh0b1BvcywgMSk7XG4gICAgICAgIGRlbGltaXRlcnMuc3BsaWNlKHRvUG9zLCAxKTtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiA9PT0gJysnKSB7XG4gICAgICAgIGxpbmVzLnNwbGljZSh0b1BvcywgMCwgY29udGVudCk7XG4gICAgICAgIGRlbGltaXRlcnMuc3BsaWNlKHRvUG9zLCAwLCBkZWxpbWl0ZXIpO1xuICAgICAgICB0b1BvcysrO1xuICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gPT09ICdcXFxcJykge1xuICAgICAgICBsZXQgcHJldmlvdXNPcGVyYXRpb24gPSBodW5rLmxpbmVzW2ogLSAxXSA/IGh1bmsubGluZXNbaiAtIDFdWzBdIDogbnVsbDtcbiAgICAgICAgaWYgKHByZXZpb3VzT3BlcmF0aW9uID09PSAnKycpIHtcbiAgICAgICAgICByZW1vdmVFT0ZOTCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAocHJldmlvdXNPcGVyYXRpb24gPT09ICctJykge1xuICAgICAgICAgIGFkZEVPRk5MID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEhhbmRsZSBFT0ZOTCBpbnNlcnRpb24vcmVtb3ZhbFxuICBpZiAocmVtb3ZlRU9GTkwpIHtcbiAgICB3aGlsZSAoIWxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdKSB7XG4gICAgICBsaW5lcy5wb3AoKTtcbiAgICAgIGRlbGltaXRlcnMucG9wKCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGFkZEVPRk5MKSB7XG4gICAgbGluZXMucHVzaCgnJyk7XG4gICAgZGVsaW1pdGVycy5wdXNoKCdcXG4nKTtcbiAgfVxuICBmb3IgKGxldCBfayA9IDA7IF9rIDwgbGluZXMubGVuZ3RoIC0gMTsgX2srKykge1xuICAgIGxpbmVzW19rXSA9IGxpbmVzW19rXSArIGRlbGltaXRlcnNbX2tdO1xuICB9XG4gIHJldHVybiBsaW5lcy5qb2luKCcnKTtcbn1cblxuLy8gV3JhcHBlciB0aGF0IHN1cHBvcnRzIG11bHRpcGxlIGZpbGUgcGF0Y2hlcyB2aWEgY2FsbGJhY2tzLlxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5UGF0Y2hlcyh1bmlEaWZmLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2YgdW5pRGlmZiA9PT0gJ3N0cmluZycpIHtcbiAgICB1bmlEaWZmID0gcGFyc2VQYXRjaCh1bmlEaWZmKTtcbiAgfVxuXG4gIGxldCBjdXJyZW50SW5kZXggPSAwO1xuICBmdW5jdGlvbiBwcm9jZXNzSW5kZXgoKSB7XG4gICAgbGV0IGluZGV4ID0gdW5pRGlmZltjdXJyZW50SW5kZXgrK107XG4gICAgaWYgKCFpbmRleCkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBvcHRpb25zLmxvYWRGaWxlKGluZGV4LCBmdW5jdGlvbihlcnIsIGRhdGEpIHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuY29tcGxldGUoZXJyKTtcbiAgICAgIH1cblxuICAgICAgbGV0IHVwZGF0ZWRDb250ZW50ID0gYXBwbHlQYXRjaChkYXRhLCBpbmRleCwgb3B0aW9ucyk7XG4gICAgICBvcHRpb25zLnBhdGNoZWQoaW5kZXgsIHVwZGF0ZWRDb250ZW50LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJldHVybiBvcHRpb25zLmNvbXBsZXRlKGVycik7XG4gICAgICAgIH1cblxuICAgICAgICBwcm9jZXNzSW5kZXgoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIHByb2Nlc3NJbmRleCgpO1xufVxuIl19
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYXRjaC9hcHBseS5qcyJdLCJuYW1lcyI6WyJhcHBseVBhdGNoIiwic291cmNlIiwidW5pRGlmZiIsIm9wdGlvbnMiLCJwYXJzZVBhdGNoIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwiRXJyb3IiLCJsaW5lcyIsInNwbGl0IiwiZGVsaW1pdGVycyIsIm1hdGNoIiwiaHVua3MiLCJjb21wYXJlTGluZSIsImxpbmVOdW1iZXIiLCJsaW5lIiwib3BlcmF0aW9uIiwicGF0Y2hDb250ZW50IiwiZXJyb3JDb3VudCIsImZ1enpGYWN0b3IiLCJtaW5MaW5lIiwib2Zmc2V0IiwicmVtb3ZlRU9GTkwiLCJhZGRFT0ZOTCIsImh1bmtGaXRzIiwiaHVuayIsInRvUG9zIiwiaiIsImNvbnRlbnQiLCJzdWJzdHIiLCJpIiwibWF4TGluZSIsIm9sZExpbmVzIiwibG9jYWxPZmZzZXQiLCJvbGRTdGFydCIsIml0ZXJhdG9yIiwiZGlzdGFuY2VJdGVyYXRvciIsInVuZGVmaW5lZCIsImRpZmZPZmZzZXQiLCJuZXdMaW5lcyIsImRlbGltaXRlciIsImxpbmVkZWxpbWl0ZXJzIiwic3BsaWNlIiwicHJldmlvdXNPcGVyYXRpb24iLCJwb3AiLCJwdXNoIiwiX2siLCJqb2luIiwiYXBwbHlQYXRjaGVzIiwiY3VycmVudEluZGV4IiwicHJvY2Vzc0luZGV4IiwiaW5kZXgiLCJjb21wbGV0ZSIsImxvYWRGaWxlIiwiZXJyIiwiZGF0YSIsInVwZGF0ZWRDb250ZW50IiwicGF0Y2hlZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTs7Ozs7QUFFTyxTQUFTQSxVQUFULENBQW9CQyxNQUFwQixFQUE0QkMsT0FBNUIsRUFBbUQ7QUFBQTtBQUFBO0FBQUE7QUFBZEMsRUFBQUEsT0FBYyx1RUFBSixFQUFJOztBQUN4RCxNQUFJLE9BQU9ELE9BQVAsS0FBbUIsUUFBdkIsRUFBaUM7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QUFBO0FBQUFBO0FBQUE7QUFBQSxLQUFXRixPQUFYLENBQVY7QUFDRDs7QUFFRCxNQUFJZ0QsWUFBWSxHQUFHLENBQW5COztBQUNBLFdBQVNDLFlBQVQsR0FBd0I7QUFDdEIsUUFBSUMsS0FBSyxHQUFHbEQsT0FBTyxDQUFDZ0QsWUFBWSxFQUFiLENBQW5COztBQUNBLFFBQUksQ0FBQ0UsS0FBTCxFQUFZO0FBQ1YsYUFBT2pELE9BQU8sQ0FBQ2tELFFBQVIsRUFBUDtBQUNEOztBQUVEbEQsSUFBQUEsT0FBTyxDQUFDbUQsUUFBUixDQUFpQkYsS0FBakIsRUFBd0IsVUFBU0csR0FBVCxFQUFjQyxJQUFkLEVBQW9CO0FBQzFDLFVBQUlELEdBQUosRUFBUztBQUNQLGVBQU9wRCxPQUFPLENBQUNrRCxRQUFSLENBQWlCRSxHQUFqQixDQUFQO0FBQ0Q7O0FBRUQsVUFBSUUsY0FBYyxHQUFHekQsVUFBVSxDQUFDd0QsSUFBRCxFQUFPSixLQUFQLEVBQWNqRCxPQUFkLENBQS9CO0FBQ0FBLE1BQUFBLE9BQU8sQ0FBQ3VELE9BQVIsQ0FBZ0JOLEtBQWhCLEVBQXVCSyxjQUF2QixFQUF1QyxVQUFTRixHQUFULEVBQWM7QUFDbkQsWUFBSUEsR0FBSixFQUFTO0FBQ1AsaUJBQU9wRCxPQUFPLENBQUNrRCxRQUFSLENBQWlCRSxHQUFqQixDQUFQO0FBQ0Q7O0FBRURKLFFBQUFBLFlBQVk7QUFDYixPQU5EO0FBT0QsS0FiRDtBQWNEOztBQUNEQSxFQUFBQSxZQUFZO0FBQ2IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3BhcnNlUGF0Y2h9IGZyb20gJy4vcGFyc2UnO1xuaW1wb3J0IGRpc3RhbmNlSXRlcmF0b3IgZnJvbSAnLi4vdXRpbC9kaXN0YW5jZS1pdGVyYXRvcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseVBhdGNoKHNvdXJjZSwgdW5pRGlmZiwgb3B0aW9ucyA9IHt9KSB7XG4gIGlmICh0eXBlb2YgdW5pRGlmZiA9PT0gJ3N0cmluZycpIHtcbiAgICB1bmlEaWZmID0gcGFyc2VQYXRjaCh1bmlEaWZmKTtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KHVuaURpZmYpKSB7XG4gICAgaWYgKHVuaURpZmYubGVuZ3RoID4gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdhcHBseVBhdGNoIG9ubHkgd29ya3Mgd2l0aCBhIHNpbmdsZSBpbnB1dC4nKTtcbiAgICB9XG5cbiAgICB1bmlEaWZmID0gdW5pRGlmZlswXTtcbiAgfVxuXG4gIC8vIEFwcGx5IHRoZSBkaWZmIHRvIHRoZSBpbnB1dFxuICBsZXQgbGluZXMgPSBzb3VyY2Uuc3BsaXQoL1xcclxcbnxbXFxuXFx2XFxmXFxyXFx4ODVdLyksXG4gICAgICBkZWxpbWl0ZXJzID0gc291cmNlLm1hdGNoKC9cXHJcXG58W1xcblxcdlxcZlxcclxceDg1XS9nKSB8fCBbXSxcbiAgICAgIGh1bmtzID0gdW5pRGlmZi5odW5rcyxcblxuICAgICAgY29tcGFyZUxpbmUgPSBvcHRpb25zLmNvbXBhcmVMaW5lIHx8ICgobGluZU51bWJlciwgbGluZSwgb3BlcmF0aW9uLCBwYXRjaENvbnRlbnQpID0+IGxpbmUgPT09IHBhdGNoQ29udGVudCksXG4gICAgICBlcnJvckNvdW50ID0gMCxcbiAgICAgIGZ1enpGYWN0b3IgPSBvcHRpb25zLmZ1enpGYWN0b3IgfHwgMCxcbiAgICAgIG1pbkxpbmUgPSAwLFxuICAgICAgb2Zmc2V0ID0gMCxcblxuICAgICAgcmVtb3ZlRU9GTkwsXG4gICAgICBhZGRFT0ZOTDtcblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBodW5rIGV4YWN0bHkgZml0cyBvbiB0aGUgcHJvdmlkZWQgbG9jYXRpb25cbiAgICovXG4gIGZ1bmN0aW9uIGh1bmtGaXRzKGh1bmssIHRvUG9zKSB7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBodW5rLmxpbmVzLmxlbmd0aDsgaisrKSB7XG4gICAgICBsZXQgbGluZSA9IGh1bmsubGluZXNbal0sXG4gICAgICAgICAgb3BlcmF0aW9uID0gKGxpbmUubGVuZ3RoID4gMCA/IGxpbmVbMF0gOiAnICcpLFxuICAgICAgICAgIGNvbnRlbnQgPSAobGluZS5sZW5ndGggPiAwID8gbGluZS5zdWJzdHIoMSkgOiBsaW5lKTtcblxuICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gJyAnIHx8IG9wZXJhdGlvbiA9PT0gJy0nKSB7XG4gICAgICAgIC8vIENvbnRleHQgc2FuaXR5IGNoZWNrXG4gICAgICAgIGlmICghY29tcGFyZUxpbmUodG9Qb3MgKyAxLCBsaW5lc1t0b1Bvc10sIG9wZXJhdGlvbiwgY29udGVudCkpIHtcbiAgICAgICAgICBlcnJvckNvdW50Kys7XG5cbiAgICAgICAgICBpZiAoZXJyb3JDb3VudCA+IGZ1enpGYWN0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdG9Qb3MrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIFNlYXJjaCBiZXN0IGZpdCBvZmZzZXRzIGZvciBlYWNoIGh1bmsgYmFzZWQgb24gdGhlIHByZXZpb3VzIG9uZXNcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBodW5rcy5sZW5ndGg7IGkrKykge1xuICAgIGxldCBodW5rID0gaHVua3NbaV0sXG4gICAgICAgIG1heExpbmUgPSBsaW5lcy5sZW5ndGggLSBodW5rLm9sZExpbmVzLFxuICAgICAgICBsb2NhbE9mZnNldCA9IDAsXG4gICAgICAgIHRvUG9zID0gb2Zmc2V0ICsgaHVuay5vbGRTdGFydCAtIDE7XG5cbiAgICBsZXQgaXRlcmF0b3IgPSBkaXN0YW5jZUl0ZXJhdG9yKHRvUG9zLCBtaW5MaW5lLCBtYXhMaW5lKTtcblxuICAgIGZvciAoOyBsb2NhbE9mZnNldCAhPT0gdW5kZWZpbmVkOyBsb2NhbE9mZnNldCA9IGl0ZXJhdG9yKCkpIHtcbiAgICAgIGlmIChodW5rRml0cyhodW5rLCB0b1BvcyArIGxvY2FsT2Zmc2V0KSkge1xuICAgICAgICBodW5rLm9mZnNldCA9IG9mZnNldCArPSBsb2NhbE9mZnNldDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGxvY2FsT2Zmc2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBTZXQgbG93ZXIgdGV4dCBsaW1pdCB0byBlbmQgb2YgdGhlIGN1cnJlbnQgaHVuaywgc28gbmV4dCBvbmVzIGRvbid0IHRyeVxuICAgIC8vIHRvIGZpdCBvdmVyIGFscmVhZHkgcGF0Y2hlZCB0ZXh0XG4gICAgbWluTGluZSA9IGh1bmsub2Zmc2V0ICsgaHVuay5vbGRTdGFydCArIGh1bmsub2xkTGluZXM7XG4gIH1cblxuICAvLyBBcHBseSBwYXRjaCBodW5rc1xuICBsZXQgZGlmZk9mZnNldCA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaHVua3MubGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgaHVuayA9IGh1bmtzW2ldLFxuICAgICAgICB0b1BvcyA9IGh1bmsub2xkU3RhcnQgKyBodW5rLm9mZnNldCArIGRpZmZPZmZzZXQgLSAxO1xuICAgIGRpZmZPZmZzZXQgKz0gaHVuay5uZXdMaW5lcyAtIGh1bmsub2xkTGluZXM7XG5cbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGh1bmsubGluZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGxldCBsaW5lID0gaHVuay5saW5lc1tqXSxcbiAgICAgICAgICBvcGVyYXRpb24gPSAobGluZS5sZW5ndGggPiAwID8gbGluZVswXSA6ICcgJyksXG4gICAgICAgICAgY29udGVudCA9IChsaW5lLmxlbmd0aCA+IDAgPyBsaW5lLnN1YnN0cigxKSA6IGxpbmUpLFxuICAgICAgICAgIGRlbGltaXRlciA9IGh1bmsubGluZWRlbGltaXRlcnMgJiYgaHVuay5saW5lZGVsaW1pdGVyc1tqXSB8fCAnXFxuJztcblxuICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gJyAnKSB7XG4gICAgICAgIHRvUG9zKys7XG4gICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiA9PT0gJy0nKSB7XG4gICAgICAgIGxpbmVzLnNwbGljZSh0b1BvcywgMSk7XG4gICAgICAgIGRlbGltaXRlcnMuc3BsaWNlKHRvUG9zLCAxKTtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiA9PT0gJysnKSB7XG4gICAgICAgIGxpbmVzLnNwbGljZSh0b1BvcywgMCwgY29udGVudCk7XG4gICAgICAgIGRlbGltaXRlcnMuc3BsaWNlKHRvUG9zLCAwLCBkZWxpbWl0ZXIpO1xuICAgICAgICB0b1BvcysrO1xuICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gPT09ICdcXFxcJykge1xuICAgICAgICBsZXQgcHJldmlvdXNPcGVyYXRpb24gPSBodW5rLmxpbmVzW2ogLSAxXSA/IGh1bmsubGluZXNbaiAtIDFdWzBdIDogbnVsbDtcbiAgICAgICAgaWYgKHByZXZpb3VzT3BlcmF0aW9uID09PSAnKycpIHtcbiAgICAgICAgICByZW1vdmVFT0ZOTCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAocHJldmlvdXNPcGVyYXRpb24gPT09ICctJykge1xuICAgICAgICAgIGFkZEVPRk5MID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEhhbmRsZSBFT0ZOTCBpbnNlcnRpb24vcmVtb3ZhbFxuICBpZiAocmVtb3ZlRU9GTkwpIHtcbiAgICB3aGlsZSAoIWxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdKSB7XG4gICAgICBsaW5lcy5wb3AoKTtcbiAgICAgIGRlbGltaXRlcnMucG9wKCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGFkZEVPRk5MKSB7XG4gICAgbGluZXMucHVzaCgnJyk7XG4gICAgZGVsaW1pdGVycy5wdXNoKCdcXG4nKTtcbiAgfVxuICBmb3IgKGxldCBfayA9IDA7IF9rIDwgbGluZXMubGVuZ3RoIC0gMTsgX2srKykge1xuICAgIGxpbmVzW19rXSA9IGxpbmVzW19rXSArIGRlbGltaXRlcnNbX2tdO1xuICB9XG4gIHJldHVybiBsaW5lcy5qb2luKCcnKTtcbn1cblxuLy8gV3JhcHBlciB0aGF0IHN1cHBvcnRzIG11bHRpcGxlIGZpbGUgcGF0Y2hlcyB2aWEgY2FsbGJhY2tzLlxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5UGF0Y2hlcyh1bmlEaWZmLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2YgdW5pRGlmZiA9PT0gJ3N0cmluZycpIHtcbiAgICB1bmlEaWZmID0gcGFyc2VQYXRjaCh1bmlEaWZmKTtcbiAgfVxuXG4gIGxldCBjdXJyZW50SW5kZXggPSAwO1xuICBmdW5jdGlvbiBwcm9jZXNzSW5kZXgoKSB7XG4gICAgbGV0IGluZGV4ID0gdW5pRGlmZltjdXJyZW50SW5kZXgrK107XG4gICAgaWYgKCFpbmRleCkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBvcHRpb25zLmxvYWRGaWxlKGluZGV4LCBmdW5jdGlvbihlcnIsIGRhdGEpIHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuY29tcGxldGUoZXJyKTtcbiAgICAgIH1cblxuICAgICAgbGV0IHVwZGF0ZWRDb250ZW50ID0gYXBwbHlQYXRjaChkYXRhLCBpbmRleCwgb3B0aW9ucyk7XG4gICAgICBvcHRpb25zLnBhdGNoZWQoaW5kZXgsIHVwZGF0ZWRDb250ZW50LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJldHVybiBvcHRpb25zLmNvbXBsZXRlKGVycik7XG4gICAgICAgIH1cblxuICAgICAgICBwcm9jZXNzSW5kZXgoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIHByb2Nlc3NJbmRleCgpO1xufVxuIl19
diff --git a/deps/npm/node_modules/diff/lib/patch/create.js b/deps/npm/node_modules/diff/lib/patch/create.js
index 1d3b4c303ce4bc..45be1512a5a088 100644
--- a/deps/npm/node_modules/diff/lib/patch/create.js
+++ b/deps/npm/node_modules/diff/lib/patch/create.js
@@ -232,6 +232,10 @@ function structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, ne
}
function formatPatch(diff) {
+ if (Array.isArray(diff)) {
+ return diff.map(formatPatch).join('\n');
+ }
+
var ret = [];
if (diff.oldFileName == diff.newFileName) {
@@ -269,4 +273,4 @@ function createTwoFilesPatch(oldFileName, newFileName, oldStr, newStr, oldHeader
function createPatch(fileName, oldStr, newStr, oldHeader, newHeader, options) {
return createTwoFilesPatch(fileName, fileName, oldStr, newStr, oldHeader, newHeader, options);
}
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYXRjaC9jcmVhdGUuanMiXSwibmFtZXMiOlsic3RydWN0dXJlZFBhdGNoIiwib2xkRmlsZU5hbWUiLCJuZXdGaWxlTmFtZSIsIm9sZFN0ciIsIm5ld1N0ciIsIm9sZEhlYWRlciIsIm5ld0hlYWRlciIsIm9wdGlvbnMiLCJjb250ZXh0IiwiZGlmZiIsImRpZmZMaW5lcyIsInB1c2giLCJ2YWx1ZSIsImxpbmVzIiwiY29udGV4dExpbmVzIiwibWFwIiwiZW50cnkiLCJodW5rcyIsIm9sZFJhbmdlU3RhcnQiLCJuZXdSYW5nZVN0YXJ0IiwiY3VyUmFuZ2UiLCJvbGRMaW5lIiwibmV3TGluZSIsImkiLCJjdXJyZW50IiwicmVwbGFjZSIsInNwbGl0IiwiYWRkZWQiLCJyZW1vdmVkIiwicHJldiIsInNsaWNlIiwibGVuZ3RoIiwiY29udGV4dFNpemUiLCJNYXRoIiwibWluIiwiaHVuayIsIm9sZFN0YXJ0Iiwib2xkTGluZXMiLCJuZXdTdGFydCIsIm5ld0xpbmVzIiwib2xkRU9GTmV3bGluZSIsInRlc3QiLCJuZXdFT0ZOZXdsaW5lIiwibm9ObEJlZm9yZUFkZHMiLCJzcGxpY2UiLCJmb3JtYXRQYXRjaCIsInJldCIsImFwcGx5Iiwiam9pbiIsImNyZWF0ZVR3b0ZpbGVzUGF0Y2giLCJjcmVhdGVQYXRjaCIsImZpbGVOYW1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7QUFFTyxTQUFTQSxlQUFULENBQXlCQyxXQUF6QixFQUFzQ0MsV0FBdEMsRUFBbURDLE1BQW5ELEVBQTJEQyxNQUEzRCxFQUFtRUMsU0FBbkUsRUFBOEVDLFNBQTlFLEVBQXlGQyxPQUF6RixFQUFrRztBQUN2RyxNQUFJLENBQUNBLE9BQUwsRUFBYztBQUNaQSxJQUFBQSxPQUFPLEdBQUcsRUFBVjtBQUNEOztBQUNELE1BQUksT0FBT0EsT0FBTyxDQUFDQyxPQUFmLEtBQTJCLFdBQS9CLEVBQTRDO0FB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IHtkaWZmTGluZXN9IGZyb20gJy4uL2RpZmYvbGluZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJ1Y3R1cmVkUGF0Y2gob2xkRmlsZU5hbWUsIG5ld0ZpbGVOYW1lLCBvbGRTdHIsIG5ld1N0ciwgb2xkSGVhZGVyLCBuZXdIZWFkZXIsIG9wdGlvbnMpIHtcbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5jb250ZXh0ID09PSAndW5kZWZpbmVkJykge1xuICAgIG9wdGlvbnMuY29udGV4dCA9IDQ7XG4gIH1cblxuICBjb25zdCBkaWZmID0gZGlmZkxpbmVzKG9sZFN0ciwgbmV3U3RyLCBvcHRpb25zKTtcbiAgaWYoIWRpZmYpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBkaWZmLnB1c2goe3ZhbHVlOiAnJywgbGluZXM6IFtdfSk7IC8vIEFwcGVuZCBhbiBlbXB0eSB2YWx1ZSB0byBtYWtlIGNsZWFudXAgZWFzaWVyXG5cbiAgZnVuY3Rpb24gY29udGV4dExpbmVzKGxpbmVzKSB7XG4gICAgcmV0dXJuIGxpbmVzLm1hcChmdW5jdGlvbihlbnRyeSkgeyByZXR1cm4gJyAnICsgZW50cnk7IH0pO1xuICB9XG5cbiAgbGV0IGh1bmtzID0gW107XG4gIGxldCBvbGRSYW5nZVN0YXJ0ID0gMCwgbmV3UmFuZ2VTdGFydCA9IDAsIGN1clJhbmdlID0gW10sXG4gICAgICBvbGRMaW5lID0gMSwgbmV3TGluZSA9IDE7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGlmZi5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGN1cnJlbnQgPSBkaWZmW2ldLFxuICAgICAgICAgIGxpbmVzID0gY3VycmVudC5saW5lcyB8fCBjdXJyZW50LnZhbHVlLnJlcGxhY2UoL1xcbiQvLCAnJykuc3BsaXQoJ1xcbicpO1xuICAgIGN1cnJlbnQubGluZXMgPSBsaW5lcztcblxuICAgIGlmIChjdXJyZW50LmFkZGVkIHx8IGN1cnJlbnQucmVtb3ZlZCkge1xuICAgICAgLy8gSWYgd2UgaGF2ZSBwcmV2aW91cyBjb250ZXh0LCBzdGFydCB3aXRoIHRoYXRcbiAgICAgIGlmICghb2xkUmFuZ2VTdGFydCkge1xuICAgICAgICBjb25zdCBwcmV2ID0gZGlmZltpIC0gMV07XG4gICAgICAgIG9sZFJhbmdlU3RhcnQgPSBvbGRMaW5lO1xuICAgICAgICBuZXdSYW5nZVN0YXJ0ID0gbmV3TGluZTtcblxuICAgICAgICBpZiAocHJldikge1xuICAgICAgICAgIGN1clJhbmdlID0gb3B0aW9ucy5jb250ZXh0ID4gMCA/IGNvbnRleHRMaW5lcyhwcmV2LmxpbmVzLnNsaWNlKC1vcHRpb25zLmNvbnRleHQpKSA6IFtdO1xuICAgICAgICAgIG9sZFJhbmdlU3RhcnQgLT0gY3VyUmFuZ2UubGVuZ3RoO1xuICAgICAgICAgIG5ld1JhbmdlU3RhcnQgLT0gY3VyUmFuZ2UubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIE91dHB1dCBvdXIgY2hhbmdlc1xuICAgICAgY3VyUmFuZ2UucHVzaCguLi4gbGluZXMubWFwKGZ1bmN0aW9uKGVudHJ5KSB7XG4gICAgICAgIHJldHVybiAoY3VycmVudC5hZGRlZCA/ICcrJyA6ICctJykgKyBlbnRyeTtcbiAgICAgIH0pKTtcblxuICAgICAgLy8gVHJhY2sgdGhlIHVwZGF0ZWQgZmlsZSBwb3NpdGlvblxuICAgICAgaWYgKGN1cnJlbnQuYWRkZWQpIHtcbiAgICAgICAgbmV3TGluZSArPSBsaW5lcy5sZW5ndGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvbGRMaW5lICs9IGxpbmVzLmxlbmd0aDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWRlbnRpY2FsIGNvbnRleHQgbGluZXMuIFRyYWNrIGxpbmUgY2hhbmdlc1xuICAgICAgaWYgKG9sZFJhbmdlU3RhcnQpIHtcbiAgICAgICAgLy8gQ2xvc2Ugb3V0IGFueSBjaGFuZ2VzIHRoYXQgaGF2ZSBiZWVuIG91dHB1dCAob3Igam9pbiBvdmVybGFwcGluZylcbiAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCA8PSBvcHRpb25zLmNvbnRleHQgKiAyICYmIGkgPCBkaWZmLmxlbmd0aCAtIDIpIHtcbiAgICAgICAgICAvLyBPdmVybGFwcGluZ1xuICAgICAgICAgIGN1clJhbmdlLnB1c2goLi4uIGNvbnRleHRMaW5lcyhsaW5lcykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGVuZCB0aGUgcmFuZ2UgYW5kIG91dHB1dFxuICAgICAgICAgIGxldCBjb250ZXh0U2l6ZSA9IE1hdGgubWluKGxpbmVzLmxlbmd0aCwgb3B0aW9ucy5jb250ZXh0KTtcbiAgICAgICAgICBjdXJSYW5nZS5wdXNoKC4uLiBjb250ZXh0TGluZXMobGluZXMuc2xpY2UoMCwgY29udGV4dFNpemUpKSk7XG5cbiAgICAgICAgICBsZXQgaHVuayA9IHtcbiAgICAgICAgICAgIG9sZFN0YXJ0OiBvbGRSYW5nZVN0YXJ0LFxuICAgICAgICAgICAgb2xkTGluZXM6IChvbGRMaW5lIC0gb2xkUmFuZ2VTdGFydCArIGNvbnRleHRTaXplKSxcbiAgICAgICAgICAgIG5ld1N0YXJ0OiBuZXdSYW5nZVN0YXJ0LFxuICAgICAgICAgICAgbmV3TGluZXM6IChuZXdMaW5lIC0gbmV3UmFuZ2VTdGFydCArIGNvbnRleHRTaXplKSxcbiAgICAgICAgICAgIGxpbmVzOiBjdXJSYW5nZVxuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKGkgPj0gZGlmZi5sZW5ndGggLSAyICYmIGxpbmVzLmxlbmd0aCA8PSBvcHRpb25zLmNvbnRleHQpIHtcbiAgICAgICAgICAgIC8vIEVPRiBpcyBpbnNpZGUgdGhpcyBodW5rXG4gICAgICAgICAgICBsZXQgb2xkRU9GTmV3bGluZSA9ICgoL1xcbiQvKS50ZXN0KG9sZFN0cikpO1xuICAgICAgICAgICAgbGV0IG5ld0VPRk5ld2xpbmUgPSAoKC9cXG4kLykudGVzdChuZXdTdHIpKTtcbiAgICAgICAgICAgIGxldCBub05sQmVmb3JlQWRkcyA9IGxpbmVzLmxlbmd0aCA9PSAwICYmIGN1clJhbmdlLmxlbmd0aCA+IGh1bmsub2xkTGluZXM7XG4gICAgICAgICAgICBpZiAoIW9sZEVPRk5ld2xpbmUgJiYgbm9ObEJlZm9yZUFkZHMgJiYgb2xkU3RyLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgLy8gc3BlY2lhbCBjYXNlOiBvbGQgaGFzIG5vIGVvbCBhbmQgbm8gdHJhaWxpbmcgY29udGV4dDsgbm8tbmwgY2FuIGVuZCB1cCBiZWZvcmUgYWRkc1xuICAgICAgICAgICAgICAvLyBob3dldmVyLCBpZiB0aGUgb2xkIGZpbGUgaXMgZW1wdHksIGRvIG5vdCBvdXRwdXQgdGhlIG5vLW5sIGxpbmVcbiAgICAgICAgICAgICAgY3VyUmFuZ2Uuc3BsaWNlKGh1bmsub2xkTGluZXMsIDAsICdcXFxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgoIW9sZEVPRk5ld2xpbmUgJiYgIW5vTmxCZWZvcmVBZGRzKSB8fCAhbmV3RU9GTmV3bGluZSkge1xuICAgICAgICAgICAgICBjdXJSYW5nZS5wdXNoKCdcXFxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaHVua3MucHVzaChodW5rKTtcblxuICAgICAgICAgIG9sZFJhbmdlU3RhcnQgPSAwO1xuICAgICAgICAgIG5ld1JhbmdlU3RhcnQgPSAwO1xuICAgICAgICAgIGN1clJhbmdlID0gW107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG9sZExpbmUgKz0gbGluZXMubGVuZ3RoO1xuICAgICAgbmV3TGluZSArPSBsaW5lcy5sZW5ndGg7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBvbGRGaWxlTmFtZTogb2xkRmlsZU5hbWUsIG5ld0ZpbGVOYW1lOiBuZXdGaWxlTmFtZSxcbiAgICBvbGRIZWFkZXI6IG9sZEhlYWRlciwgbmV3SGVhZGVyOiBuZXdIZWFkZXIsXG4gICAgaHVua3M6IGh1bmtzXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRQYXRjaChkaWZmKSB7XG4gIGNvbnN0IHJldCA9IFtdO1xuICBpZiAoZGlmZi5vbGRGaWxlTmFtZSA9PSBkaWZmLm5ld0ZpbGVOYW1lKSB7XG4gICAgcmV0LnB1c2goJ0luZGV4OiAnICsgZGlmZi5vbGRGaWxlTmFtZSk7XG4gIH1cbiAgcmV0LnB1c2goJz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0nKTtcbiAgcmV0LnB1c2goJy0tLSAnICsgZGlmZi5vbGRGaWxlTmFtZSArICh0eXBlb2YgZGlmZi5vbGRIZWFkZXIgPT09ICd1bmRlZmluZWQnID8gJycgOiAnXFx0JyArIGRpZmYub2xkSGVhZGVyKSk7XG4gIHJldC5wdXNoKCcrKysgJyArIGRpZmYubmV3RmlsZU5hbWUgKyAodHlwZW9mIGRpZmYubmV3SGVhZGVyID09PSAndW5kZWZpbmVkJyA/ICcnIDogJ1xcdCcgKyBkaWZmLm5ld0hlYWRlcikpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGlmZi5odW5rcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGh1bmsgPSBkaWZmLmh1bmtzW2ldO1xuICAgIC8vIFVuaWZpZWQgRGlmZiBGb3JtYXQgcXVpcms6IElmIHRoZSBjaHVuayBzaXplIGlzIDAsXG4gICAgLy8gdGhlIGZpcnN0IG51bWJlciBpcyBvbmUgbG93ZXIgdGhhbiBvbmUgd291bGQgZXhwZWN0LlxuICAgIC8vIGh0dHBzOi8vd3d3LmFydGltYS5jb20vd2VibG9ncy92aWV3cG9zdC5qc3A/dGhyZWFkPTE2NDI5M1xuICAgIGlmIChodW5rLm9sZExpbmVzID09PSAwKSB7XG4gICAgICBodW5rLm9sZFN0YXJ0IC09IDE7XG4gICAgfVxuICAgIGlmIChodW5rLm5ld0xpbmVzID09PSAwKSB7XG4gICAgICBodW5rLm5ld1N0YXJ0IC09IDE7XG4gICAgfVxuICAgIHJldC5wdXNoKFxuICAgICAgJ0BAIC0nICsgaHVuay5vbGRTdGFydCArICcsJyArIGh1bmsub2xkTGluZXNcbiAgICAgICsgJyArJyArIGh1bmsubmV3U3RhcnQgKyAnLCcgKyBodW5rLm5ld0xpbmVzXG4gICAgICArICcgQEAnXG4gICAgKTtcbiAgICByZXQucHVzaC5hcHBseShyZXQsIGh1bmsubGluZXMpO1xuICB9XG5cbiAgcmV0dXJuIHJldC5qb2luKCdcXG4nKSArICdcXG4nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVHdvRmlsZXNQYXRjaChvbGRGaWxlTmFtZSwgbmV3RmlsZU5hbWUsIG9sZFN0ciwgbmV3U3RyLCBvbGRIZWFkZXIsIG5ld0hlYWRlciwgb3B0aW9ucykge1xuICByZXR1cm4gZm9ybWF0UGF0Y2goc3RydWN0dXJlZFBhdGNoKG9sZEZpbGVOYW1lLCBuZXdGaWxlTmFtZSwgb2xkU3RyLCBuZXdTdHIsIG9sZEhlYWRlciwgbmV3SGVhZGVyLCBvcHRpb25zKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQYXRjaChmaWxlTmFtZSwgb2xkU3RyLCBuZXdTdHIsIG9sZEhlYWRlciwgbmV3SGVhZGVyLCBvcHRpb25zKSB7XG4gIHJldHVybiBjcmVhdGVUd29GaWxlc1BhdGNoKGZpbGVOYW1lLCBmaWxlTmFtZSwgb2xkU3RyLCBuZXdTdHIsIG9sZEhlYWRlciwgbmV3SGVhZGVyLCBvcHRpb25zKTtcbn1cbiJdfQ==
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYXRjaC9jcmVhdGUuanMiXSwibmFtZXMiOlsic3RydWN0dXJlZFBhdGNoIiwib2xkRmlsZU5hbWUiLCJuZXdGaWxlTmFtZSIsIm9sZFN0ciIsIm5ld1N0ciIsIm9sZEhlYWRlciIsIm5ld0hlYWRlciIsIm9wdGlvbnMiLCJjb250ZXh0IiwiZGlmZiIsImRpZmZMaW5lcyIsInB1c2giLCJ2YWx1ZSIsImxpbmVzIiwiY29udGV4dExpbmVzIiwibWFwIiwiZW50cnkiLCJodW5rcyIsIm9sZFJhbmdlU3RhcnQiLCJuZXdSYW5nZVN0YXJ0IiwiY3VyUmFuZ2UiLCJvbGRMaW5lIiwibmV3TGluZSIsImkiLCJjdXJyZW50IiwicmVwbGFjZSIsInNwbGl0IiwiYWRkZWQiLCJyZW1vdmVkIiwicHJldiIsInNsaWNlIiwibGVuZ3RoIiwiY29udGV4dFNpemUiLCJNYXRoIiwibWluIiwiaHVuayIsIm9sZFN0YXJ0Iiwib2xkTGluZXMiLCJuZXdTdGFydCIsIm5ld0xpbmVzIiwib2xkRU9GTmV3bGluZSIsInRlc3QiLCJuZXdFT0ZOZXdsaW5lIiwibm9ObEJlZm9yZUFkZHMiLCJzcGxpY2UiLCJmb3JtYXRQYXRjaCIsIkFycmF5IiwiaXNBcnJheSIsImpvaW4iLCJyZXQiLCJhcHBseSIsImNyZWF0ZVR3b0ZpbGVzUGF0Y2giLCJjcmVhdGVQYXRjaCIsImZpbGVOYW1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7QUFFTyxTQUFTQSxlQUFULENBQXlCQyxXQUF6QixFQUFzQ0MsV0FBdEMsRUFBbURDLE1BQW5ELEVBQTJEQyxNQUEzRCxFQUFtRUMsU0FBbkUsRUFBOEVDLFNBQTlFLEVBQXlGQyxPQUF6RixFQUFrRztBQUN2RyxNQUFJLENBQUNBLE9BQUwsRUFBYztBQUNaQSxJQUFBQSxPQUFPLEdBQUcsRUFBVjtBQUNEOztBQUNELE1BQUksT0FBT0EsT0FBTyxDQUFDQyxPQUFmLEtBQTJCLFdBQS9CLEVBQTRDO0FBQzFDRCxJQUFBQSxPQUFPLENBQUNDLE9BQVIsR0FBa0IsQ0FBbEI7QUFDRDs7QUFFRCxNQUFNQyxJQUFJO0FBQUc7QUFBQTtBQUFBOztBQUFBQztBQUFBQTtBQUFBQTtBQUFBQTtBQUFBQTtBQUFBQTtBQUFBO0FBQUEsR0FBVVAsTUFBVixFQUFrQkMsTUFBbEIsRUFBMEJHLE9BQTFCLENBQWI7O0FBQ0EsTUFBRyxDQUFDRSxJQUFKLEVBQVU7QUFDUjtBQUNEOztBQUVEQSxFQUFBQSxJQUFJLENBQUNFLElBQUwsQ0FBVTtBQUFDQyxJQUFBQSxLQUFLLEVBQUUsRUFBUjtBQUFZQyxJQUFBQSxLQUFLLEVBQUU7QUFBbkIsR0FBVixFQWJ1RyxDQWFwRTs7QUFFbkMsV0FBU0MsWUFBVCxDQUFzQkQsS0FBdEIsRUFBNkI7QUFDM0IsV0FBT0EsS0FBSyxDQUFDRSxHQUFOLENBQVUsVUFBU0MsS0FBVCxFQUFnQjtBQUFFLGFBQU8sTUFBTUEsS0FBYjtBQUFxQixLQUFqRCxDQUFQO0FBQ0Q7O0FBRUQsTUFBSUMsS0FBSyxHQUFHLEVBQVo7QUFDQSxNQUFJQyxhQUFhLEdBQUcsQ0FBcEI7QUFBQSxNQUF1QkMsYUFBYSxHQUFHLENBQXZDO0FBQUEsTUFBMENDLFFBQVEsR0FBRyxFQUFyRDtBQUFBLE1BQ0lDLE9BQU8sR0FBRyxDQURkO0FBQUEsTUFDaUJDLE9BQU8sR0FBRyxDQUQzQjs7QUFwQnVHO0FBQUE7QUFBQTtBQXNCOUZDLEVBQUFBLENBdEI4RjtBQXVCckcsUUFBTUMsT0FBTyxHQUFHZixJQUFJLENBQUNjLENBQUQsQ0FBcEI7QUFBQSxRQUNNVixLQUFLLEdBQUdXLE9BQU8sQ0FBQ1gsS0FBUixJQUFpQlcsT0FBTyxDQUFDWixLQUFSLENBQWNhLE9BQWQsQ0FBc0IsS0FBdEIsRUFBNkIsRUFBN0IsRUFBaUNDLEtBQWpDLENBQXVDLElBQXZDLENBRC9CO0FBRUFGLElBQUFBLE9BQU8sQ0FBQ1gsS0FBUixHQUFnQkEsS0FBaEI7O0FBRUEsUUFBSVcsT0FBTyxDQUFDRyxLQUFSLElBQWlCSCxPQUFPLENBQUNJLE9BQTdCLEVBQXNDO0FBQUE7QUFBQTs7QUFBQTtBQUNwQztBQUNBLFVBQUksQ0FBQ1YsYUFBTCxFQUFvQjtBQUNsQixZQUFNVyxJQUFJLEdBQUdwQixJQUFJLENBQUNjLENBQUMsR0FBRyxDQUFMLENBQWpCO0FBQ0FMLFFBQUFBLGFBQWEsR0FBR0csT0FBaEI7QUFDQUYsUUFBQUEsYUFBYSxHQUFHRyxPQUFoQjs7QUFFQSxZQUFJTyxJQUFKLEVBQVU7QUFDUlQsVUFBQUEsUUFBUSxHQUFHYixPQUFPLENBQUNDLE9BQVIsR0FBa0IsQ0FBbEIsR0FBc0JNLFlBQVksQ0FBQ2UsSUFBSSxDQUFDaEIsS0FBTCxDQUFXaUIsS0FBWCxDQUFpQixDQUFDdkIsT0FBTyxDQUFDQyxPQUExQixDQUFELENBQWxDLEdBQXlFLEVBQXBGO0FBQ0FVLFVBQUFBLGFBQWEsSUFBSUUsUUFBUSxDQUFDVyxNQUExQjtBQUNBWixVQUFBQSxhQUFhLElBQUlDLFFBQVEsQ0FBQ1csTUFBMUI7QUFDRDtBQUNGLE9BWm1DLENBY3BDOzs7QUFDQTs7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQVgsTUFBQUEsUUFBUSxFQUFDVCxJQUFUO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBa0JFLE1BQUFBLEtBQUssQ0FBQ0UsR0FBTixDQUFVLFVBQVNDLEtBQVQsRUFBZ0I7QUFDMUMsZUFBTyxDQUFDUSxPQUFPLENBQUNHLEtBQVIsR0FBZ0IsR0FBaEIsR0FBc0IsR0FBdkIsSUFBOEJYLEtBQXJDO0FBQ0QsT0FGaUIsQ0FBbEIsR0Fmb0MsQ0FtQnBDOzs7QUFDQSxVQUFJUSxPQUFPLENBQUNHLEtBQVosRUFBbUI7QUFDakJMLFFBQUFBLE9BQU8sSUFBSVQsS0FBSyxDQUFDa0IsTUFBakI7QUFDRCxPQUZELE1BRU87QUFDTFYsUUFBQUEsT0FBTyxJQUFJUixLQUFLLENBQUNrQixNQUFqQjtBQUNEO0FBQ0YsS0F6QkQsTUF5Qk87QUFDTDtBQUNBLFVBQUliLGFBQUosRUFBbUI7QUFDakI7QUFDQSxZQUFJTCxLQUFLLENBQUNrQixNQUFOLElBQWdCeEIsT0FBTyxDQUFDQyxPQUFSLEdBQWtCLENBQWxDLElBQXVDZSxDQUFDLEdBQUdkLElBQUksQ0FBQ3NCLE1BQUwsR0FBYyxDQUE3RCxFQUFnRTtBQUFBO0FBQUE7O0FBQUE7QUFDOUQ7O0FBQ0E7O0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUFYLFVBQUFBLFFBQVEsRUFBQ1QsSUFBVDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQWtCRyxVQUFBQSxZQUFZLENBQUNELEtBQUQsQ0FBOUI7QUFDRCxTQUhELE1BR087QUFBQTtBQUFBOztBQUFBO0FBQ0w7QUFDQSxjQUFJbUIsV0FBVyxHQUFHQyxJQUFJLENBQUNDLEdBQUwsQ0FBU3JCLEtBQUssQ0FBQ2tCLE1BQWYsRUFBdUJ4QixPQUFPLENBQUNDLE9BQS9CLENBQWxCOztBQUNBOztBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBWSxVQUFBQSxRQUFRLEVBQUNULElBQVQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFrQkcsVUFBQUEsWUFBWSxDQUFDRCxLQUFLLENBQUNpQixLQUFOLENBQVksQ0FBWixFQUFlRSxXQUFmLENBQUQsQ0FBOUI7O0FBRUEsY0FBSUcsSUFBSSxHQUFHO0FBQ1RDLFlBQUFBLFFBQVEsRUFBRWxCLGFBREQ7QUFFVG1CLFlBQUFBLFFBQVEsRUFBR2hCLE9BQU8sR0FBR0gsYUFBVixHQUEwQmMsV0FGNUI7QUFHVE0sWUFBQUEsUUFBUSxFQUFFbkIsYUFIRDtBQUlUb0IsWUFBQUEsUUFBUSxFQUFHakIsT0FBTyxHQUFHSCxhQUFWLEdBQTBCYSxXQUo1QjtBQUtUbkIsWUFBQUEsS0FBSyxFQUFFTztBQUxFLFdBQVg7O0FBT0EsY0FBSUcsQ0FBQyxJQUFJZCxJQUFJLENBQUNzQixNQUFMLEdBQWMsQ0FBbkIsSUFBd0JsQixLQUFLLENBQUNrQixNQUFOLElBQWdCeEIsT0FBTyxDQUFDQyxPQUFwRCxFQUE2RDtBQUMzRDtBQUNBLGdCQUFJZ0MsYUFBYSxHQUFLLEtBQUQsQ0FBUUMsSUFBUixDQUFhdEMsTUFBYixDQUFyQjtBQUNBLGdCQUFJdUMsYUFBYSxHQUFLLEtBQUQsQ0FBUUQsSUFBUixDQUFhckMsTUFBYixDQUFyQjtBQUNBLGdCQUFJdUMsY0FBYyxHQUFHOUIsS0FBSyxDQUFDa0IsTUFBTixJQUFnQixDQUFoQixJQUFxQlgsUUFBUSxDQUFDVyxNQUFULEdBQWtCSSxJQUFJLENBQUNFLFFBQWpFOztBQUNBLGdCQUFJLENBQUNHLGFBQUQsSUFBa0JHLGNBQWxCLElBQW9DeEMsTUFBTSxDQUFDNEIsTUFBUCxHQUFnQixDQUF4RCxFQUEyRDtBQUN6RDtBQUNBO0FBQ0FYLGNBQUFBLFFBQVEsQ0FBQ3dCLE1BQVQsQ0FBZ0JULElBQUksQ0FBQ0UsUUFBckIsRUFBK0IsQ0FBL0IsRUFBa0MsOEJBQWxDO0FBQ0Q7O0FBQ0QsZ0JBQUssQ0FBQ0csYUFBRCxJQUFrQixDQUFDRyxjQUFwQixJQUF1QyxDQUFDRCxhQUE1QyxFQUEyRDtBQUN6RHRCLGNBQUFBLFFBQVEsQ0FBQ1QsSUFBVCxDQUFjLDhCQUFkO0FBQ0Q7QUFDRjs7QUFDRE0sVUFBQUEsS0FBSyxDQUFDTixJQUFOLENBQVd3QixJQUFYO0FBRUFqQixVQUFBQSxhQUFhLEdBQUcsQ0FBaEI7QUFDQUMsVUFBQUEsYUFBYSxHQUFHLENBQWhCO0FBQ0FDLFVBQUFBLFFBQVEsR0FBRyxFQUFYO0FBQ0Q7QUFDRjs7QUFDREMsTUFBQUEsT0FBTyxJQUFJUixLQUFLLENBQUNrQixNQUFqQjtBQUNBVCxNQUFBQSxPQUFPLElBQUlULEtBQUssQ0FBQ2tCLE1BQWpCO0FBQ0Q7QUE5Rm9HOztBQXNCdkcsT0FBSyxJQUFJUixDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHZCxJQUFJLENBQUNzQixNQUF6QixFQUFpQ1IsQ0FBQyxFQUFsQyxFQUFzQztBQUFBO0FBQUE7QUFBQTtBQUE3QkEsSUFBQUEsQ0FBNkI7QUF5RXJDOztBQUVELFNBQU87QUFDTHRCLElBQUFBLFdBQVcsRUFBRUEsV0FEUjtBQUNxQkMsSUFBQUEsV0FBVyxFQUFFQSxXQURsQztBQUVMRyxJQUFBQSxTQUFTLEVBQUVBLFNBRk47QUFFaUJDLElBQUFBLFNBQVMsRUFBRUEsU0FGNUI7QUFHTFcsSUFBQUEsS0FBSyxFQUFFQTtBQUhGLEdBQVA7QUFLRDs7QUFFTSxTQUFTNEIsV0FBVCxDQUFxQnBDLElBQXJCLEVBQTJCO0FBQ2hDLE1BQUlxQyxLQUFLLENBQUNDLE9BQU4sQ0FBY3RDLElBQWQsQ0FBSixFQUF5QjtBQUN2QixXQUFPQSxJQUFJLENBQUNNLEdBQUwsQ0FBUzhCLFdBQVQsRUFBc0JHLElBQXRCLENBQTJCLElBQTNCLENBQVA7QUFDRDs7QUFFRCxNQUFNQyxHQUFHLEdBQUcsRUFBWjs7QUFDQSxNQUFJeEMsSUFBSSxDQUFDUixXQUFMLElBQW9CUSxJQUFJLENBQUNQLFdBQTdCLEVBQTBDO0FBQ3hDK0MsSUFBQUEsR0FBRyxDQUFDdEMsSUFBSixDQUFTLFlBQVlGLElBQUksQ0FBQ1IsV0FBMUI7QUFDRDs7QUFDRGdELEVBQUFBLEdBQUcsQ0FBQ3RDLElBQUosQ0FBUyxxRUFBVDtBQUNBc0MsRUFBQUEsR0FBRyxDQUFDdEMsSUFBSixDQUFTLFNBQVNGLElBQUksQ0FBQ1IsV0FBZCxJQUE2QixPQUFPUSxJQUFJLENBQUNKLFNBQVosS0FBMEIsV0FBMUIsR0FBd0MsRUFBeEMsR0FBNkMsT0FBT0ksSUFBSSxDQUFDSixTQUF0RixDQUFUO0FBQ0E0QyxFQUFBQSxHQUFHLENBQUN0QyxJQUFKLENBQVMsU0FBU0YsSUFBSSxDQUFDUCxXQUFkLElBQTZCLE9BQU9PLElBQUksQ0FBQ0gsU0FBWixLQUEwQixXQUExQixHQUF3QyxFQUF4QyxHQUE2QyxPQUFPRyxJQUFJLENBQUNILFNBQXRGLENBQVQ7O0FBRUEsT0FBSyxJQUFJaUIsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR2QsSUFBSSxDQUFDUSxLQUFMLENBQVdjLE1BQS9CLEVBQXVDUixDQUFDLEVBQXhDLEVBQTRDO0FBQzFDLFFBQU1ZLElBQUksR0FBRzFCLElBQUksQ0FBQ1EsS0FBTCxDQUFXTSxDQUFYLENBQWIsQ0FEMEMsQ0FFMUM7QUFDQTtBQUNBOztBQUNBLFFBQUlZLElBQUksQ0FBQ0UsUUFBTCxLQUFrQixDQUF0QixFQUF5QjtBQUN2QkYsTUFBQUEsSUFBSSxDQUFDQyxRQUFMLElBQWlCLENBQWpCO0FBQ0Q7O0FBQ0QsUUFBSUQsSUFBSSxDQUFDSSxRQUFMLEtBQWtCLENBQXRCLEVBQXlCO0FBQ3ZCSixNQUFBQSxJQUFJLENBQUNHLFFBQUwsSUFBaUIsQ0FBakI7QUFDRDs7QUFDRFcsSUFBQUEsR0FBRyxDQUFDdEMsSUFBSixDQUNFLFNBQVN3QixJQUFJLENBQUNDLFFBQWQsR0FBeUIsR0FBekIsR0FBK0JELElBQUksQ0FBQ0UsUUFBcEMsR0FDRSxJQURGLEdBQ1NGLElBQUksQ0FBQ0csUUFEZCxHQUN5QixHQUR6QixHQUMrQkgsSUFBSSxDQUFDSSxRQURwQyxHQUVFLEtBSEo7QUFLQVUsSUFBQUEsR0FBRyxDQUFDdEMsSUFBSixDQUFTdUMsS0FBVCxDQUFlRCxHQUFmLEVBQW9CZCxJQUFJLENBQUN0QixLQUF6QjtBQUNEOztBQUVELFNBQU9vQyxHQUFHLENBQUNELElBQUosQ0FBUyxJQUFULElBQWlCLElBQXhCO0FBQ0Q7O0FBRU0sU0FBU0csbUJBQVQsQ0FBNkJsRCxXQUE3QixFQUEwQ0MsV0FBMUMsRUFBdURDLE1BQXZELEVBQStEQyxNQUEvRCxFQUF1RUMsU0FBdkUsRUFBa0ZDLFNBQWxGLEVBQTZGQyxPQUE3RixFQUFzRztBQUMzRyxTQUFPc0MsV0FBVyxDQUFDN0MsZUFBZSxDQUFDQyxXQUFELEVBQWNDLFdBQWQsRUFBMkJDLE1BQTNCLEVBQW1DQyxNQUFuQyxFQUEyQ0MsU0FBM0MsRUFBc0RDLFNBQXRELEVBQWlFQyxPQUFqRSxDQUFoQixDQUFsQjtBQUNEOztBQUVNLFNBQVM2QyxXQUFULENBQXFCQyxRQUFyQixFQUErQmxELE1BQS9CLEVBQXVDQyxNQUF2QyxFQUErQ0MsU0FBL0MsRUFBMERDLFNBQTFELEVBQXFFQyxPQUFyRSxFQUE4RTtBQUNuRixTQUFPNEMsbUJBQW1CLENBQUNFLFFBQUQsRUFBV0EsUUFBWCxFQUFxQmxELE1BQXJCLEVBQTZCQyxNQUE3QixFQUFxQ0MsU0FBckMsRUFBZ0RDLFNBQWhELEVBQTJEQyxPQUEzRCxDQUExQjtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtkaWZmTGluZXN9IGZyb20gJy4uL2RpZmYvbGluZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJ1Y3R1cmVkUGF0Y2gob2xkRmlsZU5hbWUsIG5ld0ZpbGVOYW1lLCBvbGRTdHIsIG5ld1N0ciwgb2xkSGVhZGVyLCBuZXdIZWFkZXIsIG9wdGlvbnMpIHtcbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5jb250ZXh0ID09PSAndW5kZWZpbmVkJykge1xuICAgIG9wdGlvbnMuY29udGV4dCA9IDQ7XG4gIH1cblxuICBjb25zdCBkaWZmID0gZGlmZkxpbmVzKG9sZFN0ciwgbmV3U3RyLCBvcHRpb25zKTtcbiAgaWYoIWRpZmYpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBkaWZmLnB1c2goe3ZhbHVlOiAnJywgbGluZXM6IFtdfSk7IC8vIEFwcGVuZCBhbiBlbXB0eSB2YWx1ZSB0byBtYWtlIGNsZWFudXAgZWFzaWVyXG5cbiAgZnVuY3Rpb24gY29udGV4dExpbmVzKGxpbmVzKSB7XG4gICAgcmV0dXJuIGxpbmVzLm1hcChmdW5jdGlvbihlbnRyeSkgeyByZXR1cm4gJyAnICsgZW50cnk7IH0pO1xuICB9XG5cbiAgbGV0IGh1bmtzID0gW107XG4gIGxldCBvbGRSYW5nZVN0YXJ0ID0gMCwgbmV3UmFuZ2VTdGFydCA9IDAsIGN1clJhbmdlID0gW10sXG4gICAgICBvbGRMaW5lID0gMSwgbmV3TGluZSA9IDE7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGlmZi5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGN1cnJlbnQgPSBkaWZmW2ldLFxuICAgICAgICAgIGxpbmVzID0gY3VycmVudC5saW5lcyB8fCBjdXJyZW50LnZhbHVlLnJlcGxhY2UoL1xcbiQvLCAnJykuc3BsaXQoJ1xcbicpO1xuICAgIGN1cnJlbnQubGluZXMgPSBsaW5lcztcblxuICAgIGlmIChjdXJyZW50LmFkZGVkIHx8IGN1cnJlbnQucmVtb3ZlZCkge1xuICAgICAgLy8gSWYgd2UgaGF2ZSBwcmV2aW91cyBjb250ZXh0LCBzdGFydCB3aXRoIHRoYXRcbiAgICAgIGlmICghb2xkUmFuZ2VTdGFydCkge1xuICAgICAgICBjb25zdCBwcmV2ID0gZGlmZltpIC0gMV07XG4gICAgICAgIG9sZFJhbmdlU3RhcnQgPSBvbGRMaW5lO1xuICAgICAgICBuZXdSYW5nZVN0YXJ0ID0gbmV3TGluZTtcblxuICAgICAgICBpZiAocHJldikge1xuICAgICAgICAgIGN1clJhbmdlID0gb3B0aW9ucy5jb250ZXh0ID4gMCA/IGNvbnRleHRMaW5lcyhwcmV2LmxpbmVzLnNsaWNlKC1vcHRpb25zLmNvbnRleHQpKSA6IFtdO1xuICAgICAgICAgIG9sZFJhbmdlU3RhcnQgLT0gY3VyUmFuZ2UubGVuZ3RoO1xuICAgICAgICAgIG5ld1JhbmdlU3RhcnQgLT0gY3VyUmFuZ2UubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIE91dHB1dCBvdXIgY2hhbmdlc1xuICAgICAgY3VyUmFuZ2UucHVzaCguLi4gbGluZXMubWFwKGZ1bmN0aW9uKGVudHJ5KSB7XG4gICAgICAgIHJldHVybiAoY3VycmVudC5hZGRlZCA/ICcrJyA6ICctJykgKyBlbnRyeTtcbiAgICAgIH0pKTtcblxuICAgICAgLy8gVHJhY2sgdGhlIHVwZGF0ZWQgZmlsZSBwb3NpdGlvblxuICAgICAgaWYgKGN1cnJlbnQuYWRkZWQpIHtcbiAgICAgICAgbmV3TGluZSArPSBsaW5lcy5sZW5ndGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvbGRMaW5lICs9IGxpbmVzLmxlbmd0aDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWRlbnRpY2FsIGNvbnRleHQgbGluZXMuIFRyYWNrIGxpbmUgY2hhbmdlc1xuICAgICAgaWYgKG9sZFJhbmdlU3RhcnQpIHtcbiAgICAgICAgLy8gQ2xvc2Ugb3V0IGFueSBjaGFuZ2VzIHRoYXQgaGF2ZSBiZWVuIG91dHB1dCAob3Igam9pbiBvdmVybGFwcGluZylcbiAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCA8PSBvcHRpb25zLmNvbnRleHQgKiAyICYmIGkgPCBkaWZmLmxlbmd0aCAtIDIpIHtcbiAgICAgICAgICAvLyBPdmVybGFwcGluZ1xuICAgICAgICAgIGN1clJhbmdlLnB1c2goLi4uIGNvbnRleHRMaW5lcyhsaW5lcykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGVuZCB0aGUgcmFuZ2UgYW5kIG91dHB1dFxuICAgICAgICAgIGxldCBjb250ZXh0U2l6ZSA9IE1hdGgubWluKGxpbmVzLmxlbmd0aCwgb3B0aW9ucy5jb250ZXh0KTtcbiAgICAgICAgICBjdXJSYW5nZS5wdXNoKC4uLiBjb250ZXh0TGluZXMobGluZXMuc2xpY2UoMCwgY29udGV4dFNpemUpKSk7XG5cbiAgICAgICAgICBsZXQgaHVuayA9IHtcbiAgICAgICAgICAgIG9sZFN0YXJ0OiBvbGRSYW5nZVN0YXJ0LFxuICAgICAgICAgICAgb2xkTGluZXM6IChvbGRMaW5lIC0gb2xkUmFuZ2VTdGFydCArIGNvbnRleHRTaXplKSxcbiAgICAgICAgICAgIG5ld1N0YXJ0OiBuZXdSYW5nZVN0YXJ0LFxuICAgICAgICAgICAgbmV3TGluZXM6IChuZXdMaW5lIC0gbmV3UmFuZ2VTdGFydCArIGNvbnRleHRTaXplKSxcbiAgICAgICAgICAgIGxpbmVzOiBjdXJSYW5nZVxuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKGkgPj0gZGlmZi5sZW5ndGggLSAyICYmIGxpbmVzLmxlbmd0aCA8PSBvcHRpb25zLmNvbnRleHQpIHtcbiAgICAgICAgICAgIC8vIEVPRiBpcyBpbnNpZGUgdGhpcyBodW5rXG4gICAgICAgICAgICBsZXQgb2xkRU9GTmV3bGluZSA9ICgoL1xcbiQvKS50ZXN0KG9sZFN0cikpO1xuICAgICAgICAgICAgbGV0IG5ld0VPRk5ld2xpbmUgPSAoKC9cXG4kLykudGVzdChuZXdTdHIpKTtcbiAgICAgICAgICAgIGxldCBub05sQmVmb3JlQWRkcyA9IGxpbmVzLmxlbmd0aCA9PSAwICYmIGN1clJhbmdlLmxlbmd0aCA+IGh1bmsub2xkTGluZXM7XG4gICAgICAgICAgICBpZiAoIW9sZEVPRk5ld2xpbmUgJiYgbm9ObEJlZm9yZUFkZHMgJiYgb2xkU3RyLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgLy8gc3BlY2lhbCBjYXNlOiBvbGQgaGFzIG5vIGVvbCBhbmQgbm8gdHJhaWxpbmcgY29udGV4dDsgbm8tbmwgY2FuIGVuZCB1cCBiZWZvcmUgYWRkc1xuICAgICAgICAgICAgICAvLyBob3dldmVyLCBpZiB0aGUgb2xkIGZpbGUgaXMgZW1wdHksIGRvIG5vdCBvdXRwdXQgdGhlIG5vLW5sIGxpbmVcbiAgICAgICAgICAgICAgY3VyUmFuZ2Uuc3BsaWNlKGh1bmsub2xkTGluZXMsIDAsICdcXFxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgoIW9sZEVPRk5ld2xpbmUgJiYgIW5vTmxCZWZvcmVBZGRzKSB8fCAhbmV3RU9GTmV3bGluZSkge1xuICAgICAgICAgICAgICBjdXJSYW5nZS5wdXNoKCdcXFxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaHVua3MucHVzaChodW5rKTtcblxuICAgICAgICAgIG9sZFJhbmdlU3RhcnQgPSAwO1xuICAgICAgICAgIG5ld1JhbmdlU3RhcnQgPSAwO1xuICAgICAgICAgIGN1clJhbmdlID0gW107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG9sZExpbmUgKz0gbGluZXMubGVuZ3RoO1xuICAgICAgbmV3TGluZSArPSBsaW5lcy5sZW5ndGg7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBvbGRGaWxlTmFtZTogb2xkRmlsZU5hbWUsIG5ld0ZpbGVOYW1lOiBuZXdGaWxlTmFtZSxcbiAgICBvbGRIZWFkZXI6IG9sZEhlYWRlciwgbmV3SGVhZGVyOiBuZXdIZWFkZXIsXG4gICAgaHVua3M6IGh1bmtzXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRQYXRjaChkaWZmKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGRpZmYpKSB7XG4gICAgcmV0dXJuIGRpZmYubWFwKGZvcm1hdFBhdGNoKS5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIGNvbnN0IHJldCA9IFtdO1xuICBpZiAoZGlmZi5vbGRGaWxlTmFtZSA9PSBkaWZmLm5ld0ZpbGVOYW1lKSB7XG4gICAgcmV0LnB1c2goJ0luZGV4OiAnICsgZGlmZi5vbGRGaWxlTmFtZSk7XG4gIH1cbiAgcmV0LnB1c2goJz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0nKTtcbiAgcmV0LnB1c2goJy0tLSAnICsgZGlmZi5vbGRGaWxlTmFtZSArICh0eXBlb2YgZGlmZi5vbGRIZWFkZXIgPT09ICd1bmRlZmluZWQnID8gJycgOiAnXFx0JyArIGRpZmYub2xkSGVhZGVyKSk7XG4gIHJldC5wdXNoKCcrKysgJyArIGRpZmYubmV3RmlsZU5hbWUgKyAodHlwZW9mIGRpZmYubmV3SGVhZGVyID09PSAndW5kZWZpbmVkJyA/ICcnIDogJ1xcdCcgKyBkaWZmLm5ld0hlYWRlcikpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGlmZi5odW5rcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGh1bmsgPSBkaWZmLmh1bmtzW2ldO1xuICAgIC8vIFVuaWZpZWQgRGlmZiBGb3JtYXQgcXVpcms6IElmIHRoZSBjaHVuayBzaXplIGlzIDAsXG4gICAgLy8gdGhlIGZpcnN0IG51bWJlciBpcyBvbmUgbG93ZXIgdGhhbiBvbmUgd291bGQgZXhwZWN0LlxuICAgIC8vIGh0dHBzOi8vd3d3LmFydGltYS5jb20vd2VibG9ncy92aWV3cG9zdC5qc3A/dGhyZWFkPTE2NDI5M1xuICAgIGlmIChodW5rLm9sZExpbmVzID09PSAwKSB7XG4gICAgICBodW5rLm9sZFN0YXJ0IC09IDE7XG4gICAgfVxuICAgIGlmIChodW5rLm5ld0xpbmVzID09PSAwKSB7XG4gICAgICBodW5rLm5ld1N0YXJ0IC09IDE7XG4gICAgfVxuICAgIHJldC5wdXNoKFxuICAgICAgJ0BAIC0nICsgaHVuay5vbGRTdGFydCArICcsJyArIGh1bmsub2xkTGluZXNcbiAgICAgICsgJyArJyArIGh1bmsubmV3U3RhcnQgKyAnLCcgKyBodW5rLm5ld0xpbmVzXG4gICAgICArICcgQEAnXG4gICAgKTtcbiAgICByZXQucHVzaC5hcHBseShyZXQsIGh1bmsubGluZXMpO1xuICB9XG5cbiAgcmV0dXJuIHJldC5qb2luKCdcXG4nKSArICdcXG4nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVHdvRmlsZXNQYXRjaChvbGRGaWxlTmFtZSwgbmV3RmlsZU5hbWUsIG9sZFN0ciwgbmV3U3RyLCBvbGRIZWFkZXIsIG5ld0hlYWRlciwgb3B0aW9ucykge1xuICByZXR1cm4gZm9ybWF0UGF0Y2goc3RydWN0dXJlZFBhdGNoKG9sZEZpbGVOYW1lLCBuZXdGaWxlTmFtZSwgb2xkU3RyLCBuZXdTdHIsIG9sZEhlYWRlciwgbmV3SGVhZGVyLCBvcHRpb25zKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQYXRjaChmaWxlTmFtZSwgb2xkU3RyLCBuZXdTdHIsIG9sZEhlYWRlciwgbmV3SGVhZGVyLCBvcHRpb25zKSB7XG4gIHJldHVybiBjcmVhdGVUd29GaWxlc1BhdGNoKGZpbGVOYW1lLCBmaWxlTmFtZSwgb2xkU3RyLCBuZXdTdHIsIG9sZEhlYWRlciwgbmV3SGVhZGVyLCBvcHRpb25zKTtcbn1cbiJdfQ==
diff --git a/deps/npm/node_modules/diff/lib/patch/reverse.js b/deps/npm/node_modules/diff/lib/patch/reverse.js
new file mode 100644
index 00000000000000..6e4be99af8ac32
--- /dev/null
+++ b/deps/npm/node_modules/diff/lib/patch/reverse.js
@@ -0,0 +1,63 @@
+/*istanbul ignore start*/
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.reversePatch = reversePatch;
+
+function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
+
+function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
+
+function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+/*istanbul ignore end*/
+function reversePatch(structuredPatch) {
+ if (Array.isArray(structuredPatch)) {
+ return structuredPatch.map(reversePatch).reverse();
+ }
+
+ return (
+ /*istanbul ignore start*/
+ _objectSpread(_objectSpread({},
+ /*istanbul ignore end*/
+ structuredPatch), {}, {
+ oldFileName: structuredPatch.newFileName,
+ oldHeader: structuredPatch.newHeader,
+ newFileName: structuredPatch.oldFileName,
+ newHeader: structuredPatch.oldHeader,
+ hunks: structuredPatch.hunks.map(function (hunk) {
+ return {
+ oldLines: hunk.newLines,
+ oldStart: hunk.newStart,
+ newLines: hunk.oldLines,
+ newStart: hunk.oldStart,
+ linedelimiters: hunk.linedelimiters,
+ lines: hunk.lines.map(function (l) {
+ if (l.startsWith('-')) {
+ return (
+ /*istanbul ignore start*/
+ "+".concat(
+ /*istanbul ignore end*/
+ l.slice(1))
+ );
+ }
+
+ if (l.startsWith('+')) {
+ return (
+ /*istanbul ignore start*/
+ "-".concat(
+ /*istanbul ignore end*/
+ l.slice(1))
+ );
+ }
+
+ return l;
+ })
+ };
+ })
+ })
+ );
+}
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYXRjaC9yZXZlcnNlLmpzIl0sIm5hbWVzIjpbInJldmVyc2VQYXRjaCIsInN0cnVjdHVyZWRQYXRjaCIsIkFycmF5IiwiaXNBcnJheSIsIm1hcCIsInJldmVyc2UiLCJvbGRGaWxlTmFtZSIsIm5ld0ZpbGVOYW1lIiwib2xkSGVhZGVyIiwibmV3SGVhZGVyIiwiaHVua3MiLCJodW5rIiwib2xkTGluZXMiLCJuZXdMaW5lcyIsIm9sZFN0YXJ0IiwibmV3U3RhcnQiLCJsaW5lZGVsaW1pdGVycyIsImxpbmVzIiwibCIsInN0YXJ0c1dpdGgiLCJzbGljZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQU8sU0FBU0EsWUFBVCxDQUFzQkMsZUFBdEIsRUFBdUM7QUFDNUMsTUFBSUMsS0FBSyxDQUFDQyxPQUFOLENBQWNGLGVBQWQsQ0FBSixFQUFvQztBQUNsQyxXQUFPQSxlQUFlLENBQUNHLEdBQWhCLENBQW9CSixZQUFwQixFQUFrQ0ssT0FBbEMsRUFBUDtBQUNEOztBQUVEO0FBQUE7QUFBQTtBQUFBO0FBQ0tKLElBQUFBLGVBREw7QUFFRUssTUFBQUEsV0FBVyxFQUFFTCxlQUFlLENBQUNNLFdBRi9CO0FBR0VDLE1BQUFBLFNBQVMsRUFBRVAsZUFBZSxDQUFDUSxTQUg3QjtBQUlFRixNQUFBQSxXQUFXLEVBQUVOLGVBQWUsQ0FBQ0ssV0FKL0I7QUFLRUcsTUFBQUEsU0FBUyxFQUFFUixlQUFlLENBQUNPLFNBTDdCO0FBTUVFLE1BQUFBLEtBQUssRUFBRVQsZUFBZSxDQUFDUyxLQUFoQixDQUFzQk4sR0FBdEIsQ0FBMEIsVUFBQU8sSUFBSSxFQUFJO0FBQ3ZDLGVBQU87QUFDTEMsVUFBQUEsUUFBUSxFQUFFRCxJQUFJLENBQUNFLFFBRFY7QUFFTEMsVUFBQUEsUUFBUSxFQUFFSCxJQUFJLENBQUNJLFFBRlY7QUFHTEYsVUFBQUEsUUFBUSxFQUFFRixJQUFJLENBQUNDLFFBSFY7QUFJTEcsVUFBQUEsUUFBUSxFQUFFSixJQUFJLENBQUNHLFFBSlY7QUFLTEUsVUFBQUEsY0FBYyxFQUFFTCxJQUFJLENBQUNLLGNBTGhCO0FBTUxDLFVBQUFBLEtBQUssRUFBRU4sSUFBSSxDQUFDTSxLQUFMLENBQVdiLEdBQVgsQ0FBZSxVQUFBYyxDQUFDLEVBQUk7QUFDekIsZ0JBQUlBLENBQUMsQ0FBQ0MsVUFBRixDQUFhLEdBQWIsQ0FBSixFQUF1QjtBQUFFO0FBQUE7QUFBQTtBQUFBO0FBQVdELGdCQUFBQSxDQUFDLENBQUNFLEtBQUYsQ0FBUSxDQUFSLENBQVg7QUFBQTtBQUEwQjs7QUFDbkQsZ0JBQUlGLENBQUMsQ0FBQ0MsVUFBRixDQUFhLEdBQWIsQ0FBSixFQUF1QjtBQUFFO0FBQUE7QUFBQTtBQUFBO0FBQVdELGdCQUFBQSxDQUFDLENBQUNFLEtBQUYsQ0FBUSxDQUFSLENBQVg7QUFBQTtBQUEwQjs7QUFDbkQsbUJBQU9GLENBQVA7QUFDRCxXQUpNO0FBTkYsU0FBUDtBQVlELE9BYk07QUFOVDtBQUFBO0FBcUJEIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIHJldmVyc2VQYXRjaChzdHJ1Y3R1cmVkUGF0Y2gpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoc3RydWN0dXJlZFBhdGNoKSkge1xuICAgIHJldHVybiBzdHJ1Y3R1cmVkUGF0Y2gubWFwKHJldmVyc2VQYXRjaCkucmV2ZXJzZSgpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdHJ1Y3R1cmVkUGF0Y2gsXG4gICAgb2xkRmlsZU5hbWU6IHN0cnVjdHVyZWRQYXRjaC5uZXdGaWxlTmFtZSxcbiAgICBvbGRIZWFkZXI6IHN0cnVjdHVyZWRQYXRjaC5uZXdIZWFkZXIsXG4gICAgbmV3RmlsZU5hbWU6IHN0cnVjdHVyZWRQYXRjaC5vbGRGaWxlTmFtZSxcbiAgICBuZXdIZWFkZXI6IHN0cnVjdHVyZWRQYXRjaC5vbGRIZWFkZXIsXG4gICAgaHVua3M6IHN0cnVjdHVyZWRQYXRjaC5odW5rcy5tYXAoaHVuayA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvbGRMaW5lczogaHVuay5uZXdMaW5lcyxcbiAgICAgICAgb2xkU3RhcnQ6IGh1bmsubmV3U3RhcnQsXG4gICAgICAgIG5ld0xpbmVzOiBodW5rLm9sZExpbmVzLFxuICAgICAgICBuZXdTdGFydDogaHVuay5vbGRTdGFydCxcbiAgICAgICAgbGluZWRlbGltaXRlcnM6IGh1bmsubGluZWRlbGltaXRlcnMsXG4gICAgICAgIGxpbmVzOiBodW5rLmxpbmVzLm1hcChsID0+IHtcbiAgICAgICAgICBpZiAobC5zdGFydHNXaXRoKCctJykpIHsgcmV0dXJuIGArJHtsLnNsaWNlKDEpfWA7IH1cbiAgICAgICAgICBpZiAobC5zdGFydHNXaXRoKCcrJykpIHsgcmV0dXJuIGAtJHtsLnNsaWNlKDEpfWA7IH1cbiAgICAgICAgICByZXR1cm4gbDtcbiAgICAgICAgfSlcbiAgICAgIH07XG4gICAgfSlcbiAgfTtcbn1cbiJdfQ==
diff --git a/deps/npm/node_modules/diff/package.json b/deps/npm/node_modules/diff/package.json
index a2fc30c581218f..dcffb9474baefc 100644
--- a/deps/npm/node_modules/diff/package.json
+++ b/deps/npm/node_modules/diff/package.json
@@ -1,7 +1,7 @@
{
"name": "diff",
- "version": "5.1.0",
- "description": "A javascript text diff implementation.",
+ "version": "5.2.0",
+ "description": "A JavaScript text diff implementation.",
"keywords": [
"diff",
"jsdiff",
@@ -13,7 +13,8 @@
"javascript"
],
"maintainers": [
- "Kevin Decker (http://incaseofstairs.com)"
+ "Kevin Decker (http://incaseofstairs.com)",
+ "Mark Amery "
],
"bugs": {
"email": "kpdecker@gmail.com",
@@ -37,7 +38,8 @@
"require": "./lib/index.js"
},
"./package.json": "./package.json",
- "./": "./"
+ "./": "./",
+ "./*": "./*"
},
"scripts": {
"clean": "rm -rf lib/ dist/",
@@ -50,10 +52,10 @@
"@babel/plugin-transform-modules-commonjs": "^7.2.0",
"@babel/preset-env": "^7.2.3",
"@babel/register": "^7.0.0",
+ "@colors/colors": "^1.3.3",
"babel-eslint": "^10.0.1",
"babel-loader": "^8.0.5",
"chai": "^4.2.0",
- "colors": "^1.3.3",
"eslint": "^5.12.0",
"grunt": "^1.0.3",
"grunt-babel": "^8.0.0",
@@ -69,7 +71,7 @@
"grunt-mocha-test": "^0.13.3",
"grunt-webpack": "^3.1.3",
"istanbul": "github:kpdecker/istanbul",
- "karma": "^5.1.1",
+ "karma": "^6.3.16",
"karma-chrome-launcher": "^3.1.0",
"karma-mocha": "^2.0.1",
"karma-mocha-reporter": "^2.0.0",
diff --git a/deps/npm/node_modules/diff/release-notes.md b/deps/npm/node_modules/diff/release-notes.md
index b7bc9c803b9022..fe98f22d239e7e 100644
--- a/deps/npm/node_modules/diff/release-notes.md
+++ b/deps/npm/node_modules/diff/release-notes.md
@@ -1,14 +1,22 @@
# Release Notes
-## Development
+## v5.2.0
-[Commits](https://github.com/kpdecker/jsdiff/compare/v5.0.0...master)
+[Commits](https://github.com/kpdecker/jsdiff/compare/v5.1.0...master)
+
+- [#411](https://github.com/kpdecker/jsdiff/pull/411) Big performance improvement. Previously an O(n) array-copying operation inside the innermost loop of jsdiff's base diffing code increased the overall worst-case time complexity of computing a diff from O(n²) to O(n³). This is now fixed, bringing the worst-case time complexity down to what it theoretically should be for a Myers diff implementation.
+- [#448](https://github.com/kpdecker/jsdiff/pull/411) Performance improvement. Diagonals whose furthest-reaching D-path would go off the edge of the edit graph are now skipped, rather than being pointlessly considered as called for by the original Myers diff algorithm. This dramatically speeds up computing diffs where the new text just appends or truncates content at the end of the old text.
+- [#351](https://github.com/kpdecker/jsdiff/issues/351) Importing from the lib folder - e.g. `require("diff/lib/diff/word.js")` - will work again now. This had been broken for users on the latest version of Node since Node 17.5.0, which changed how Node interprets the `exports` property in jsdiff's `package.json` file.
+- [#344](https://github.com/kpdecker/jsdiff/issues/344) `diffLines`, `createTwoFilesPatch`, and other patch-creation methods now take an optional `stripTrailingCr: true` option which causes Windows-style `\r\n` line endings to be replaced with Unix-style `\n` line endings before calculating the diff, just like GNU `diff`'s `--strip-trailing-cr` flag.
+- [#451](https://github.com/kpdecker/jsdiff/pull/451) Added `diff.formatPatch`.
+- [#450](https://github.com/kpdecker/jsdiff/pull/450) Added `diff.reversePatch`.
+- [#478](https://github.com/kpdecker/jsdiff/pull/478) Added `timeout` option.
## v5.1.0
- [#365](https://github.com/kpdecker/jsdiff/issues/365) Allow early termination to limit execution time with degenerate cases
-[Commits](https://github.com/kpdecker/jsdiff/compare/v5.0.0...v5.0.1)
+[Commits](https://github.com/kpdecker/jsdiff/compare/v5.0.0...v5.1.0)
## v5.0.0
diff --git a/deps/npm/node_modules/gauge/node_modules/ansi-regex/index.js b/deps/npm/node_modules/gauge/node_modules/ansi-regex/index.js
deleted file mode 100644
index 616ff837d3ff01..00000000000000
--- a/deps/npm/node_modules/gauge/node_modules/ansi-regex/index.js
+++ /dev/null
@@ -1,10 +0,0 @@
-'use strict';
-
-module.exports = ({onlyFirst = false} = {}) => {
- const pattern = [
- '[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)',
- '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))'
- ].join('|');
-
- return new RegExp(pattern, onlyFirst ? undefined : 'g');
-};
diff --git a/deps/npm/node_modules/gauge/node_modules/ansi-regex/license b/deps/npm/node_modules/gauge/node_modules/ansi-regex/license
deleted file mode 100644
index e7af2f77107d73..00000000000000
--- a/deps/npm/node_modules/gauge/node_modules/ansi-regex/license
+++ /dev/null
@@ -1,9 +0,0 @@
-MIT License
-
-Copyright (c) Sindre Sorhus (sindresorhus.com)
-
-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/deps/npm/node_modules/gauge/node_modules/strip-ansi/index.js b/deps/npm/node_modules/gauge/node_modules/strip-ansi/index.js
deleted file mode 100644
index 9a593dfcd1fd5c..00000000000000
--- a/deps/npm/node_modules/gauge/node_modules/strip-ansi/index.js
+++ /dev/null
@@ -1,4 +0,0 @@
-'use strict';
-const ansiRegex = require('ansi-regex');
-
-module.exports = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string;
diff --git a/deps/npm/node_modules/gauge/node_modules/strip-ansi/license b/deps/npm/node_modules/gauge/node_modules/strip-ansi/license
deleted file mode 100644
index e7af2f77107d73..00000000000000
--- a/deps/npm/node_modules/gauge/node_modules/strip-ansi/license
+++ /dev/null
@@ -1,9 +0,0 @@
-MIT License
-
-Copyright (c) Sindre Sorhus (sindresorhus.com)
-
-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/deps/npm/node_modules/hasown/index.js b/deps/npm/node_modules/hasown/index.js
index 3b91618323842f..34e60591349679 100644
--- a/deps/npm/node_modules/hasown/index.js
+++ b/deps/npm/node_modules/hasown/index.js
@@ -4,5 +4,5 @@ var call = Function.prototype.call;
var $hasOwn = Object.prototype.hasOwnProperty;
var bind = require('function-bind');
-/** @type {(o: {}, p: PropertyKey) => p is keyof o} */
+/** @type {import('.')} */
module.exports = bind.call(call, $hasOwn);
diff --git a/deps/npm/node_modules/hasown/package.json b/deps/npm/node_modules/hasown/package.json
index 954500640223c2..1b03e9d3018bde 100644
--- a/deps/npm/node_modules/hasown/package.json
+++ b/deps/npm/node_modules/hasown/package.json
@@ -1,21 +1,21 @@
{
"name": "hasown",
- "version": "2.0.0",
+ "version": "2.0.1",
"description": "A robust, ES3 compatible, \"has own property\" predicate.",
"main": "index.js",
"exports": {
".": "./index.js",
"./package.json": "./package.json"
},
+ "types": "index.d.ts",
+ "sideEffects": false,
"scripts": {
- "prepack": "npmignore --auto --commentLines=autogenerated && npm run emit-types",
+ "prepack": "npmignore --auto --commentLines=autogenerated",
"prepublish": "not-in-publish || npm run prepublishOnly",
"prepublishOnly": "safe-publish-latest",
"prelint": "evalmd README.md",
"lint": "eslint --ext=js,mjs .",
"postlint": "npm run tsc",
- "preemit-types": "rm -f *.ts *.ts.map test/*.ts test/*.ts.map",
- "emit-types": "npm run tsc -- --noEmit false --emitDeclarationOnly",
"pretest": "npm run lint",
"tsc": "tsc -p .",
"tests-only": "nyc tape 'test/**/*.js'",
@@ -51,20 +51,20 @@
},
"devDependencies": {
"@ljharb/eslint-config": "^21.1.0",
- "@types/function-bind": "^1.1.9",
- "@types/mock-property": "^1.0.1",
- "@types/tape": "^5.6.3",
- "aud": "^2.0.3",
+ "@types/function-bind": "^1.1.10",
+ "@types/mock-property": "^1.0.2",
+ "@types/tape": "^5.6.4",
+ "aud": "^2.0.4",
"auto-changelog": "^2.4.0",
"eslint": "=8.8.0",
"evalmd": "^0.0.19",
"in-publish": "^2.0.1",
- "mock-property": "^1.0.2",
- "npmignore": "^0.3.0",
+ "mock-property": "^1.0.3",
+ "npmignore": "^0.3.1",
"nyc": "^10.3.2",
"safe-publish-latest": "^2.0.0",
- "tape": "^5.7.1",
- "typescript": "^5.3.0-dev.20231019"
+ "tape": "^5.7.4",
+ "typescript": "next"
},
"engines": {
"node": ">= 0.4"
@@ -83,9 +83,7 @@
"publishConfig": {
"ignore": [
".github/workflows",
- "test",
- "!*.d.ts",
- "!*.d.ts.map"
+ "test"
]
}
}
diff --git a/deps/npm/node_modules/http-proxy-agent/LICENSE b/deps/npm/node_modules/http-proxy-agent/LICENSE
index aad14057fad570..7ddd1e9bdb4507 100644
--- a/deps/npm/node_modules/http-proxy-agent/LICENSE
+++ b/deps/npm/node_modules/http-proxy-agent/LICENSE
@@ -1,9 +1,6 @@
-License
--------
-
(The MIT License)
-Copyright (c) 2013 Nathan Rajlich <nathan@tootallnate.net>
+Copyright (c) 2013 Nathan Rajlich
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
diff --git a/deps/npm/node_modules/http-proxy-agent/dist/index.js b/deps/npm/node_modules/http-proxy-agent/dist/index.js
index 4a7daf6156f941..fb2751c2264314 100644
--- a/deps/npm/node_modules/http-proxy-agent/dist/index.js
+++ b/deps/npm/node_modules/http-proxy-agent/dist/index.js
@@ -32,6 +32,7 @@ const tls = __importStar(require("tls"));
const debug_1 = __importDefault(require("debug"));
const events_1 = require("events");
const agent_base_1 = require("agent-base");
+const url_1 = require("url");
const debug = (0, debug_1.default)('http-proxy-agent');
/**
* The `HttpProxyAgent` implements an HTTP Agent subclass that connects
@@ -40,7 +41,7 @@ const debug = (0, debug_1.default)('http-proxy-agent');
class HttpProxyAgent extends agent_base_1.Agent {
constructor(proxy, opts) {
super(opts);
- this.proxy = typeof proxy === 'string' ? new URL(proxy) : proxy;
+ this.proxy = typeof proxy === 'string' ? new url_1.URL(proxy) : proxy;
this.proxyHeaders = opts?.headers ?? {};
debug('Creating new HttpProxyAgent instance: %o', this.proxy.href);
// Trim off the brackets from IPv6 addresses
@@ -67,7 +68,7 @@ class HttpProxyAgent extends agent_base_1.Agent {
const protocol = opts.secureEndpoint ? 'https:' : 'http:';
const hostname = req.getHeader('host') || 'localhost';
const base = `${protocol}//${hostname}`;
- const url = new URL(req.path, base);
+ const url = new url_1.URL(req.path, base);
if (opts.port !== 80) {
url.port = String(opts.port);
}
diff --git a/deps/npm/node_modules/http-proxy-agent/package.json b/deps/npm/node_modules/http-proxy-agent/package.json
index 08c650cbb22aa4..a53940a3d88a39 100644
--- a/deps/npm/node_modules/http-proxy-agent/package.json
+++ b/deps/npm/node_modules/http-proxy-agent/package.json
@@ -1,6 +1,6 @@
{
"name": "http-proxy-agent",
- "version": "7.0.0",
+ "version": "7.0.2",
"description": "An HTTP(s) proxy `http.Agent` implementation for HTTP",
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
diff --git a/deps/npm/node_modules/https-proxy-agent/LICENSE b/deps/npm/node_modules/https-proxy-agent/LICENSE
new file mode 100644
index 00000000000000..008728cb51847d
--- /dev/null
+++ b/deps/npm/node_modules/https-proxy-agent/LICENSE
@@ -0,0 +1,22 @@
+(The MIT License)
+
+Copyright (c) 2013 Nathan Rajlich
+
+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.
\ No newline at end of file
diff --git a/deps/npm/node_modules/https-proxy-agent/dist/index.js b/deps/npm/node_modules/https-proxy-agent/dist/index.js
index 978af031baf3aa..4c420aa7c20533 100644
--- a/deps/npm/node_modules/https-proxy-agent/dist/index.js
+++ b/deps/npm/node_modules/https-proxy-agent/dist/index.js
@@ -32,6 +32,7 @@ const tls = __importStar(require("tls"));
const assert_1 = __importDefault(require("assert"));
const debug_1 = __importDefault(require("debug"));
const agent_base_1 = require("agent-base");
+const url_1 = require("url");
const parse_proxy_response_1 = require("./parse-proxy-response");
const debug = (0, debug_1.default)('https-proxy-agent');
/**
@@ -50,7 +51,7 @@ class HttpsProxyAgent extends agent_base_1.Agent {
constructor(proxy, opts) {
super(opts);
this.options = { path: undefined };
- this.proxy = typeof proxy === 'string' ? new URL(proxy) : proxy;
+ this.proxy = typeof proxy === 'string' ? new url_1.URL(proxy) : proxy;
this.proxyHeaders = opts?.headers ?? {};
debug('Creating new HttpsProxyAgent instance: %o', this.proxy.href);
// Trim off the brackets from IPv6 addresses
@@ -84,7 +85,7 @@ class HttpsProxyAgent extends agent_base_1.Agent {
const servername = this.connectOpts.servername || this.connectOpts.host;
socket = tls.connect({
...this.connectOpts,
- servername: servername && net.isIP(servername) ? undefined : servername
+ servername: servername && net.isIP(servername) ? undefined : servername,
});
}
else {
diff --git a/deps/npm/node_modules/https-proxy-agent/package.json b/deps/npm/node_modules/https-proxy-agent/package.json
index 07c04f82a9c3ab..f3c67ef3804bbd 100644
--- a/deps/npm/node_modules/https-proxy-agent/package.json
+++ b/deps/npm/node_modules/https-proxy-agent/package.json
@@ -1,6 +1,6 @@
{
"name": "https-proxy-agent",
- "version": "7.0.2",
+ "version": "7.0.4",
"description": "An HTTP(s) proxy `http.Agent` implementation for HTTPS",
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
diff --git a/deps/npm/node_modules/ip-address/LICENSE b/deps/npm/node_modules/ip-address/LICENSE
new file mode 100644
index 00000000000000..ec79adb0c40203
--- /dev/null
+++ b/deps/npm/node_modules/ip-address/LICENSE
@@ -0,0 +1,19 @@
+Copyright (C) 2011 by Beau Gunderson
+
+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/deps/npm/node_modules/ip-address/dist/address-error.js b/deps/npm/node_modules/ip-address/dist/address-error.js
new file mode 100644
index 00000000000000..4fcade3ba2486c
--- /dev/null
+++ b/deps/npm/node_modules/ip-address/dist/address-error.js
@@ -0,0 +1,14 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.AddressError = void 0;
+class AddressError extends Error {
+ constructor(message, parseMessage) {
+ super(message);
+ this.name = 'AddressError';
+ if (parseMessage !== null) {
+ this.parseMessage = parseMessage;
+ }
+ }
+}
+exports.AddressError = AddressError;
+//# sourceMappingURL=address-error.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/ip-address/dist/common.js b/deps/npm/node_modules/ip-address/dist/common.js
new file mode 100644
index 00000000000000..4d10c9a4e82035
--- /dev/null
+++ b/deps/npm/node_modules/ip-address/dist/common.js
@@ -0,0 +1,26 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.isCorrect = exports.isInSubnet = void 0;
+function isInSubnet(address) {
+ if (this.subnetMask < address.subnetMask) {
+ return false;
+ }
+ if (this.mask(address.subnetMask) === address.mask()) {
+ return true;
+ }
+ return false;
+}
+exports.isInSubnet = isInSubnet;
+function isCorrect(defaultBits) {
+ return function () {
+ if (this.addressMinusSuffix !== this.correctForm()) {
+ return false;
+ }
+ if (this.subnetMask === defaultBits && !this.parsedSubnet) {
+ return true;
+ }
+ return this.parsedSubnet === String(this.subnetMask);
+ };
+}
+exports.isCorrect = isCorrect;
+//# sourceMappingURL=common.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/ip-address/dist/ip-address.js b/deps/npm/node_modules/ip-address/dist/ip-address.js
new file mode 100644
index 00000000000000..553c005a63cb64
--- /dev/null
+++ b/deps/npm/node_modules/ip-address/dist/ip-address.js
@@ -0,0 +1,35 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.v6 = exports.AddressError = exports.Address6 = exports.Address4 = void 0;
+const ipv4_1 = require("./ipv4");
+Object.defineProperty(exports, "Address4", { enumerable: true, get: function () { return ipv4_1.Address4; } });
+const ipv6_1 = require("./ipv6");
+Object.defineProperty(exports, "Address6", { enumerable: true, get: function () { return ipv6_1.Address6; } });
+const address_error_1 = require("./address-error");
+Object.defineProperty(exports, "AddressError", { enumerable: true, get: function () { return address_error_1.AddressError; } });
+const helpers = __importStar(require("./v6/helpers"));
+exports.v6 = { helpers };
+//# sourceMappingURL=ip-address.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/ip-address/dist/ipv4.js b/deps/npm/node_modules/ip-address/dist/ipv4.js
new file mode 100644
index 00000000000000..22a81b5047f05a
--- /dev/null
+++ b/deps/npm/node_modules/ip-address/dist/ipv4.js
@@ -0,0 +1,326 @@
+"use strict";
+/* eslint-disable no-param-reassign */
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.Address4 = void 0;
+const common = __importStar(require("./common"));
+const constants = __importStar(require("./v4/constants"));
+const address_error_1 = require("./address-error");
+const jsbn_1 = require("jsbn");
+const sprintf_js_1 = require("sprintf-js");
+/**
+ * Represents an IPv4 address
+ * @class Address4
+ * @param {string} address - An IPv4 address string
+ */
+class Address4 {
+ constructor(address) {
+ this.groups = constants.GROUPS;
+ this.parsedAddress = [];
+ this.parsedSubnet = '';
+ this.subnet = '/32';
+ this.subnetMask = 32;
+ this.v4 = true;
+ /**
+ * Returns true if the address is correct, false otherwise
+ * @memberof Address4
+ * @instance
+ * @returns {Boolean}
+ */
+ this.isCorrect = common.isCorrect(constants.BITS);
+ /**
+ * Returns true if the given address is in the subnet of the current address
+ * @memberof Address4
+ * @instance
+ * @returns {boolean}
+ */
+ this.isInSubnet = common.isInSubnet;
+ this.address = address;
+ const subnet = constants.RE_SUBNET_STRING.exec(address);
+ if (subnet) {
+ this.parsedSubnet = subnet[0].replace('/', '');
+ this.subnetMask = parseInt(this.parsedSubnet, 10);
+ this.subnet = `/${this.subnetMask}`;
+ if (this.subnetMask < 0 || this.subnetMask > constants.BITS) {
+ throw new address_error_1.AddressError('Invalid subnet mask.');
+ }
+ address = address.replace(constants.RE_SUBNET_STRING, '');
+ }
+ this.addressMinusSuffix = address;
+ this.parsedAddress = this.parse(address);
+ }
+ static isValid(address) {
+ try {
+ // eslint-disable-next-line no-new
+ new Address4(address);
+ return true;
+ }
+ catch (e) {
+ return false;
+ }
+ }
+ /*
+ * Parses a v4 address
+ */
+ parse(address) {
+ const groups = address.split('.');
+ if (!address.match(constants.RE_ADDRESS)) {
+ throw new address_error_1.AddressError('Invalid IPv4 address.');
+ }
+ return groups;
+ }
+ /**
+ * Returns the correct form of an address
+ * @memberof Address4
+ * @instance
+ * @returns {String}
+ */
+ correctForm() {
+ return this.parsedAddress.map((part) => parseInt(part, 10)).join('.');
+ }
+ /**
+ * Converts a hex string to an IPv4 address object
+ * @memberof Address4
+ * @static
+ * @param {string} hex - a hex string to convert
+ * @returns {Address4}
+ */
+ static fromHex(hex) {
+ const padded = hex.replace(/:/g, '').padStart(8, '0');
+ const groups = [];
+ let i;
+ for (i = 0; i < 8; i += 2) {
+ const h = padded.slice(i, i + 2);
+ groups.push(parseInt(h, 16));
+ }
+ return new Address4(groups.join('.'));
+ }
+ /**
+ * Converts an integer into a IPv4 address object
+ * @memberof Address4
+ * @static
+ * @param {integer} integer - a number to convert
+ * @returns {Address4}
+ */
+ static fromInteger(integer) {
+ return Address4.fromHex(integer.toString(16));
+ }
+ /**
+ * Return an address from in-addr.arpa form
+ * @memberof Address4
+ * @static
+ * @param {string} arpaFormAddress - an 'in-addr.arpa' form ipv4 address
+ * @returns {Adress4}
+ * @example
+ * var address = Address4.fromArpa(42.2.0.192.in-addr.arpa.)
+ * address.correctForm(); // '192.0.2.42'
+ */
+ static fromArpa(arpaFormAddress) {
+ // remove ending ".in-addr.arpa." or just "."
+ const leader = arpaFormAddress.replace(/(\.in-addr\.arpa)?\.$/, '');
+ const address = leader.split('.').reverse().join('.');
+ return new Address4(address);
+ }
+ /**
+ * Converts an IPv4 address object to a hex string
+ * @memberof Address4
+ * @instance
+ * @returns {String}
+ */
+ toHex() {
+ return this.parsedAddress.map((part) => (0, sprintf_js_1.sprintf)('%02x', parseInt(part, 10))).join(':');
+ }
+ /**
+ * Converts an IPv4 address object to an array of bytes
+ * @memberof Address4
+ * @instance
+ * @returns {Array}
+ */
+ toArray() {
+ return this.parsedAddress.map((part) => parseInt(part, 10));
+ }
+ /**
+ * Converts an IPv4 address object to an IPv6 address group
+ * @memberof Address4
+ * @instance
+ * @returns {String}
+ */
+ toGroup6() {
+ const output = [];
+ let i;
+ for (i = 0; i < constants.GROUPS; i += 2) {
+ const hex = (0, sprintf_js_1.sprintf)('%02x%02x', parseInt(this.parsedAddress[i], 10), parseInt(this.parsedAddress[i + 1], 10));
+ output.push((0, sprintf_js_1.sprintf)('%x', parseInt(hex, 16)));
+ }
+ return output.join(':');
+ }
+ /**
+ * Returns the address as a BigInteger
+ * @memberof Address4
+ * @instance
+ * @returns {BigInteger}
+ */
+ bigInteger() {
+ return new jsbn_1.BigInteger(this.parsedAddress.map((n) => (0, sprintf_js_1.sprintf)('%02x', parseInt(n, 10))).join(''), 16);
+ }
+ /**
+ * Helper function getting start address.
+ * @memberof Address4
+ * @instance
+ * @returns {BigInteger}
+ */
+ _startAddress() {
+ return new jsbn_1.BigInteger(this.mask() + '0'.repeat(constants.BITS - this.subnetMask), 2);
+ }
+ /**
+ * The first address in the range given by this address' subnet.
+ * Often referred to as the Network Address.
+ * @memberof Address4
+ * @instance
+ * @returns {Address4}
+ */
+ startAddress() {
+ return Address4.fromBigInteger(this._startAddress());
+ }
+ /**
+ * The first host address in the range given by this address's subnet ie
+ * the first address after the Network Address
+ * @memberof Address4
+ * @instance
+ * @returns {Address4}
+ */
+ startAddressExclusive() {
+ const adjust = new jsbn_1.BigInteger('1');
+ return Address4.fromBigInteger(this._startAddress().add(adjust));
+ }
+ /**
+ * Helper function getting end address.
+ * @memberof Address4
+ * @instance
+ * @returns {BigInteger}
+ */
+ _endAddress() {
+ return new jsbn_1.BigInteger(this.mask() + '1'.repeat(constants.BITS - this.subnetMask), 2);
+ }
+ /**
+ * The last address in the range given by this address' subnet
+ * Often referred to as the Broadcast
+ * @memberof Address4
+ * @instance
+ * @returns {Address4}
+ */
+ endAddress() {
+ return Address4.fromBigInteger(this._endAddress());
+ }
+ /**
+ * The last host address in the range given by this address's subnet ie
+ * the last address prior to the Broadcast Address
+ * @memberof Address4
+ * @instance
+ * @returns {Address4}
+ */
+ endAddressExclusive() {
+ const adjust = new jsbn_1.BigInteger('1');
+ return Address4.fromBigInteger(this._endAddress().subtract(adjust));
+ }
+ /**
+ * Converts a BigInteger to a v4 address object
+ * @memberof Address4
+ * @static
+ * @param {BigInteger} bigInteger - a BigInteger to convert
+ * @returns {Address4}
+ */
+ static fromBigInteger(bigInteger) {
+ return Address4.fromInteger(parseInt(bigInteger.toString(), 10));
+ }
+ /**
+ * Returns the first n bits of the address, defaulting to the
+ * subnet mask
+ * @memberof Address4
+ * @instance
+ * @returns {String}
+ */
+ mask(mask) {
+ if (mask === undefined) {
+ mask = this.subnetMask;
+ }
+ return this.getBitsBase2(0, mask);
+ }
+ /**
+ * Returns the bits in the given range as a base-2 string
+ * @memberof Address4
+ * @instance
+ * @returns {string}
+ */
+ getBitsBase2(start, end) {
+ return this.binaryZeroPad().slice(start, end);
+ }
+ /**
+ * Return the reversed ip6.arpa form of the address
+ * @memberof Address4
+ * @param {Object} options
+ * @param {boolean} options.omitSuffix - omit the "in-addr.arpa" suffix
+ * @instance
+ * @returns {String}
+ */
+ reverseForm(options) {
+ if (!options) {
+ options = {};
+ }
+ const reversed = this.correctForm().split('.').reverse().join('.');
+ if (options.omitSuffix) {
+ return reversed;
+ }
+ return (0, sprintf_js_1.sprintf)('%s.in-addr.arpa.', reversed);
+ }
+ /**
+ * Returns true if the given address is a multicast address
+ * @memberof Address4
+ * @instance
+ * @returns {boolean}
+ */
+ isMulticast() {
+ return this.isInSubnet(new Address4('224.0.0.0/4'));
+ }
+ /**
+ * Returns a zero-padded base-2 string representation of the address
+ * @memberof Address4
+ * @instance
+ * @returns {string}
+ */
+ binaryZeroPad() {
+ return this.bigInteger().toString(2).padStart(constants.BITS, '0');
+ }
+ /**
+ * Groups an IPv4 address for inclusion at the end of an IPv6 address
+ * @returns {String}
+ */
+ groupForV6() {
+ const segments = this.parsedAddress;
+ return this.address.replace(constants.RE_ADDRESS, (0, sprintf_js_1.sprintf)('%s.%s', segments.slice(0, 2).join('.'), segments.slice(2, 4).join('.')));
+ }
+}
+exports.Address4 = Address4;
+//# sourceMappingURL=ipv4.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/ip-address/dist/ipv6.js b/deps/npm/node_modules/ip-address/dist/ipv6.js
new file mode 100644
index 00000000000000..c88ab84b9ad77a
--- /dev/null
+++ b/deps/npm/node_modules/ip-address/dist/ipv6.js
@@ -0,0 +1,998 @@
+"use strict";
+/* eslint-disable prefer-destructuring */
+/* eslint-disable no-param-reassign */
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.Address6 = void 0;
+const common = __importStar(require("./common"));
+const constants4 = __importStar(require("./v4/constants"));
+const constants6 = __importStar(require("./v6/constants"));
+const helpers = __importStar(require("./v6/helpers"));
+const ipv4_1 = require("./ipv4");
+const regular_expressions_1 = require("./v6/regular-expressions");
+const address_error_1 = require("./address-error");
+const jsbn_1 = require("jsbn");
+const sprintf_js_1 = require("sprintf-js");
+function assert(condition) {
+ if (!condition) {
+ throw new Error('Assertion failed.');
+ }
+}
+function addCommas(number) {
+ const r = /(\d+)(\d{3})/;
+ while (r.test(number)) {
+ number = number.replace(r, '$1,$2');
+ }
+ return number;
+}
+function spanLeadingZeroes4(n) {
+ n = n.replace(/^(0{1,})([1-9]+)$/, '$1$2');
+ n = n.replace(/^(0{1,})(0)$/, '$1$2');
+ return n;
+}
+/*
+ * A helper function to compact an array
+ */
+function compact(address, slice) {
+ const s1 = [];
+ const s2 = [];
+ let i;
+ for (i = 0; i < address.length; i++) {
+ if (i < slice[0]) {
+ s1.push(address[i]);
+ }
+ else if (i > slice[1]) {
+ s2.push(address[i]);
+ }
+ }
+ return s1.concat(['compact']).concat(s2);
+}
+function paddedHex(octet) {
+ return (0, sprintf_js_1.sprintf)('%04x', parseInt(octet, 16));
+}
+function unsignByte(b) {
+ // eslint-disable-next-line no-bitwise
+ return b & 0xff;
+}
+/**
+ * Represents an IPv6 address
+ * @class Address6
+ * @param {string} address - An IPv6 address string
+ * @param {number} [groups=8] - How many octets to parse
+ * @example
+ * var address = new Address6('2001::/32');
+ */
+class Address6 {
+ constructor(address, optionalGroups) {
+ this.addressMinusSuffix = '';
+ this.parsedSubnet = '';
+ this.subnet = '/128';
+ this.subnetMask = 128;
+ this.v4 = false;
+ this.zone = '';
+ // #region Attributes
+ /**
+ * Returns true if the given address is in the subnet of the current address
+ * @memberof Address6
+ * @instance
+ * @returns {boolean}
+ */
+ this.isInSubnet = common.isInSubnet;
+ /**
+ * Returns true if the address is correct, false otherwise
+ * @memberof Address6
+ * @instance
+ * @returns {boolean}
+ */
+ this.isCorrect = common.isCorrect(constants6.BITS);
+ if (optionalGroups === undefined) {
+ this.groups = constants6.GROUPS;
+ }
+ else {
+ this.groups = optionalGroups;
+ }
+ this.address = address;
+ const subnet = constants6.RE_SUBNET_STRING.exec(address);
+ if (subnet) {
+ this.parsedSubnet = subnet[0].replace('/', '');
+ this.subnetMask = parseInt(this.parsedSubnet, 10);
+ this.subnet = `/${this.subnetMask}`;
+ if (Number.isNaN(this.subnetMask) ||
+ this.subnetMask < 0 ||
+ this.subnetMask > constants6.BITS) {
+ throw new address_error_1.AddressError('Invalid subnet mask.');
+ }
+ address = address.replace(constants6.RE_SUBNET_STRING, '');
+ }
+ else if (/\//.test(address)) {
+ throw new address_error_1.AddressError('Invalid subnet mask.');
+ }
+ const zone = constants6.RE_ZONE_STRING.exec(address);
+ if (zone) {
+ this.zone = zone[0];
+ address = address.replace(constants6.RE_ZONE_STRING, '');
+ }
+ this.addressMinusSuffix = address;
+ this.parsedAddress = this.parse(this.addressMinusSuffix);
+ }
+ static isValid(address) {
+ try {
+ // eslint-disable-next-line no-new
+ new Address6(address);
+ return true;
+ }
+ catch (e) {
+ return false;
+ }
+ }
+ /**
+ * Convert a BigInteger to a v6 address object
+ * @memberof Address6
+ * @static
+ * @param {BigInteger} bigInteger - a BigInteger to convert
+ * @returns {Address6}
+ * @example
+ * var bigInteger = new BigInteger('1000000000000');
+ * var address = Address6.fromBigInteger(bigInteger);
+ * address.correctForm(); // '::e8:d4a5:1000'
+ */
+ static fromBigInteger(bigInteger) {
+ const hex = bigInteger.toString(16).padStart(32, '0');
+ const groups = [];
+ let i;
+ for (i = 0; i < constants6.GROUPS; i++) {
+ groups.push(hex.slice(i * 4, (i + 1) * 4));
+ }
+ return new Address6(groups.join(':'));
+ }
+ /**
+ * Convert a URL (with optional port number) to an address object
+ * @memberof Address6
+ * @static
+ * @param {string} url - a URL with optional port number
+ * @example
+ * var addressAndPort = Address6.fromURL('http://[ffff::]:8080/foo/');
+ * addressAndPort.address.correctForm(); // 'ffff::'
+ * addressAndPort.port; // 8080
+ */
+ static fromURL(url) {
+ let host;
+ let port = null;
+ let result;
+ // If we have brackets parse them and find a port
+ if (url.indexOf('[') !== -1 && url.indexOf(']:') !== -1) {
+ result = constants6.RE_URL_WITH_PORT.exec(url);
+ if (result === null) {
+ return {
+ error: 'failed to parse address with port',
+ address: null,
+ port: null,
+ };
+ }
+ host = result[1];
+ port = result[2];
+ // If there's a URL extract the address
+ }
+ else if (url.indexOf('/') !== -1) {
+ // Remove the protocol prefix
+ url = url.replace(/^[a-z0-9]+:\/\//, '');
+ // Parse the address
+ result = constants6.RE_URL.exec(url);
+ if (result === null) {
+ return {
+ error: 'failed to parse address from URL',
+ address: null,
+ port: null,
+ };
+ }
+ host = result[1];
+ // Otherwise just assign the URL to the host and let the library parse it
+ }
+ else {
+ host = url;
+ }
+ // If there's a port convert it to an integer
+ if (port) {
+ port = parseInt(port, 10);
+ // squelch out of range ports
+ if (port < 0 || port > 65536) {
+ port = null;
+ }
+ }
+ else {
+ // Standardize `undefined` to `null`
+ port = null;
+ }
+ return {
+ address: new Address6(host),
+ port,
+ };
+ }
+ /**
+ * Create an IPv6-mapped address given an IPv4 address
+ * @memberof Address6
+ * @static
+ * @param {string} address - An IPv4 address string
+ * @returns {Address6}
+ * @example
+ * var address = Address6.fromAddress4('192.168.0.1');
+ * address.correctForm(); // '::ffff:c0a8:1'
+ * address.to4in6(); // '::ffff:192.168.0.1'
+ */
+ static fromAddress4(address) {
+ const address4 = new ipv4_1.Address4(address);
+ const mask6 = constants6.BITS - (constants4.BITS - address4.subnetMask);
+ return new Address6(`::ffff:${address4.correctForm()}/${mask6}`);
+ }
+ /**
+ * Return an address from ip6.arpa form
+ * @memberof Address6
+ * @static
+ * @param {string} arpaFormAddress - an 'ip6.arpa' form address
+ * @returns {Adress6}
+ * @example
+ * var address = Address6.fromArpa(e.f.f.f.3.c.2.6.f.f.f.e.6.6.8.e.1.0.6.7.9.4.e.c.0.0.0.0.1.0.0.2.ip6.arpa.)
+ * address.correctForm(); // '2001:0:ce49:7601:e866:efff:62c3:fffe'
+ */
+ static fromArpa(arpaFormAddress) {
+ // remove ending ".ip6.arpa." or just "."
+ let address = arpaFormAddress.replace(/(\.ip6\.arpa)?\.$/, '');
+ const semicolonAmount = 7;
+ // correct ip6.arpa form with ending removed will be 63 characters
+ if (address.length !== 63) {
+ throw new address_error_1.AddressError("Invalid 'ip6.arpa' form.");
+ }
+ const parts = address.split('.').reverse();
+ for (let i = semicolonAmount; i > 0; i--) {
+ const insertIndex = i * 4;
+ parts.splice(insertIndex, 0, ':');
+ }
+ address = parts.join('');
+ return new Address6(address);
+ }
+ /**
+ * Return the Microsoft UNC transcription of the address
+ * @memberof Address6
+ * @instance
+ * @returns {String} the Microsoft UNC transcription of the address
+ */
+ microsoftTranscription() {
+ return (0, sprintf_js_1.sprintf)('%s.ipv6-literal.net', this.correctForm().replace(/:/g, '-'));
+ }
+ /**
+ * Return the first n bits of the address, defaulting to the subnet mask
+ * @memberof Address6
+ * @instance
+ * @param {number} [mask=subnet] - the number of bits to mask
+ * @returns {String} the first n bits of the address as a string
+ */
+ mask(mask = this.subnetMask) {
+ return this.getBitsBase2(0, mask);
+ }
+ /**
+ * Return the number of possible subnets of a given size in the address
+ * @memberof Address6
+ * @instance
+ * @param {number} [size=128] - the subnet size
+ * @returns {String}
+ */
+ // TODO: probably useful to have a numeric version of this too
+ possibleSubnets(subnetSize = 128) {
+ const availableBits = constants6.BITS - this.subnetMask;
+ const subnetBits = Math.abs(subnetSize - constants6.BITS);
+ const subnetPowers = availableBits - subnetBits;
+ if (subnetPowers < 0) {
+ return '0';
+ }
+ return addCommas(new jsbn_1.BigInteger('2', 10).pow(subnetPowers).toString(10));
+ }
+ /**
+ * Helper function getting start address.
+ * @memberof Address6
+ * @instance
+ * @returns {BigInteger}
+ */
+ _startAddress() {
+ return new jsbn_1.BigInteger(this.mask() + '0'.repeat(constants6.BITS - this.subnetMask), 2);
+ }
+ /**
+ * The first address in the range given by this address' subnet
+ * Often referred to as the Network Address.
+ * @memberof Address6
+ * @instance
+ * @returns {Address6}
+ */
+ startAddress() {
+ return Address6.fromBigInteger(this._startAddress());
+ }
+ /**
+ * The first host address in the range given by this address's subnet ie
+ * the first address after the Network Address
+ * @memberof Address6
+ * @instance
+ * @returns {Address6}
+ */
+ startAddressExclusive() {
+ const adjust = new jsbn_1.BigInteger('1');
+ return Address6.fromBigInteger(this._startAddress().add(adjust));
+ }
+ /**
+ * Helper function getting end address.
+ * @memberof Address6
+ * @instance
+ * @returns {BigInteger}
+ */
+ _endAddress() {
+ return new jsbn_1.BigInteger(this.mask() + '1'.repeat(constants6.BITS - this.subnetMask), 2);
+ }
+ /**
+ * The last address in the range given by this address' subnet
+ * Often referred to as the Broadcast
+ * @memberof Address6
+ * @instance
+ * @returns {Address6}
+ */
+ endAddress() {
+ return Address6.fromBigInteger(this._endAddress());
+ }
+ /**
+ * The last host address in the range given by this address's subnet ie
+ * the last address prior to the Broadcast Address
+ * @memberof Address6
+ * @instance
+ * @returns {Address6}
+ */
+ endAddressExclusive() {
+ const adjust = new jsbn_1.BigInteger('1');
+ return Address6.fromBigInteger(this._endAddress().subtract(adjust));
+ }
+ /**
+ * Return the scope of the address
+ * @memberof Address6
+ * @instance
+ * @returns {String}
+ */
+ getScope() {
+ let scope = constants6.SCOPES[this.getBits(12, 16).intValue()];
+ if (this.getType() === 'Global unicast' && scope !== 'Link local') {
+ scope = 'Global';
+ }
+ return scope || 'Unknown';
+ }
+ /**
+ * Return the type of the address
+ * @memberof Address6
+ * @instance
+ * @returns {String}
+ */
+ getType() {
+ for (const subnet of Object.keys(constants6.TYPES)) {
+ if (this.isInSubnet(new Address6(subnet))) {
+ return constants6.TYPES[subnet];
+ }
+ }
+ return 'Global unicast';
+ }
+ /**
+ * Return the bits in the given range as a BigInteger
+ * @memberof Address6
+ * @instance
+ * @returns {BigInteger}
+ */
+ getBits(start, end) {
+ return new jsbn_1.BigInteger(this.getBitsBase2(start, end), 2);
+ }
+ /**
+ * Return the bits in the given range as a base-2 string
+ * @memberof Address6
+ * @instance
+ * @returns {String}
+ */
+ getBitsBase2(start, end) {
+ return this.binaryZeroPad().slice(start, end);
+ }
+ /**
+ * Return the bits in the given range as a base-16 string
+ * @memberof Address6
+ * @instance
+ * @returns {String}
+ */
+ getBitsBase16(start, end) {
+ const length = end - start;
+ if (length % 4 !== 0) {
+ throw new Error('Length of bits to retrieve must be divisible by four');
+ }
+ return this.getBits(start, end)
+ .toString(16)
+ .padStart(length / 4, '0');
+ }
+ /**
+ * Return the bits that are set past the subnet mask length
+ * @memberof Address6
+ * @instance
+ * @returns {String}
+ */
+ getBitsPastSubnet() {
+ return this.getBitsBase2(this.subnetMask, constants6.BITS);
+ }
+ /**
+ * Return the reversed ip6.arpa form of the address
+ * @memberof Address6
+ * @param {Object} options
+ * @param {boolean} options.omitSuffix - omit the "ip6.arpa" suffix
+ * @instance
+ * @returns {String}
+ */
+ reverseForm(options) {
+ if (!options) {
+ options = {};
+ }
+ const characters = Math.floor(this.subnetMask / 4);
+ const reversed = this.canonicalForm()
+ .replace(/:/g, '')
+ .split('')
+ .slice(0, characters)
+ .reverse()
+ .join('.');
+ if (characters > 0) {
+ if (options.omitSuffix) {
+ return reversed;
+ }
+ return (0, sprintf_js_1.sprintf)('%s.ip6.arpa.', reversed);
+ }
+ if (options.omitSuffix) {
+ return '';
+ }
+ return 'ip6.arpa.';
+ }
+ /**
+ * Return the correct form of the address
+ * @memberof Address6
+ * @instance
+ * @returns {String}
+ */
+ correctForm() {
+ let i;
+ let groups = [];
+ let zeroCounter = 0;
+ const zeroes = [];
+ for (i = 0; i < this.parsedAddress.length; i++) {
+ const value = parseInt(this.parsedAddress[i], 16);
+ if (value === 0) {
+ zeroCounter++;
+ }
+ if (value !== 0 && zeroCounter > 0) {
+ if (zeroCounter > 1) {
+ zeroes.push([i - zeroCounter, i - 1]);
+ }
+ zeroCounter = 0;
+ }
+ }
+ // Do we end with a string of zeroes?
+ if (zeroCounter > 1) {
+ zeroes.push([this.parsedAddress.length - zeroCounter, this.parsedAddress.length - 1]);
+ }
+ const zeroLengths = zeroes.map((n) => n[1] - n[0] + 1);
+ if (zeroes.length > 0) {
+ const index = zeroLengths.indexOf(Math.max(...zeroLengths));
+ groups = compact(this.parsedAddress, zeroes[index]);
+ }
+ else {
+ groups = this.parsedAddress;
+ }
+ for (i = 0; i < groups.length; i++) {
+ if (groups[i] !== 'compact') {
+ groups[i] = parseInt(groups[i], 16).toString(16);
+ }
+ }
+ let correct = groups.join(':');
+ correct = correct.replace(/^compact$/, '::');
+ correct = correct.replace(/^compact|compact$/, ':');
+ correct = correct.replace(/compact/, '');
+ return correct;
+ }
+ /**
+ * Return a zero-padded base-2 string representation of the address
+ * @memberof Address6
+ * @instance
+ * @returns {String}
+ * @example
+ * var address = new Address6('2001:4860:4001:803::1011');
+ * address.binaryZeroPad();
+ * // '0010000000000001010010000110000001000000000000010000100000000011
+ * // 0000000000000000000000000000000000000000000000000001000000010001'
+ */
+ binaryZeroPad() {
+ return this.bigInteger().toString(2).padStart(constants6.BITS, '0');
+ }
+ // TODO: Improve the semantics of this helper function
+ parse4in6(address) {
+ const groups = address.split(':');
+ const lastGroup = groups.slice(-1)[0];
+ const address4 = lastGroup.match(constants4.RE_ADDRESS);
+ if (address4) {
+ this.parsedAddress4 = address4[0];
+ this.address4 = new ipv4_1.Address4(this.parsedAddress4);
+ for (let i = 0; i < this.address4.groups; i++) {
+ if (/^0[0-9]+/.test(this.address4.parsedAddress[i])) {
+ throw new address_error_1.AddressError("IPv4 addresses can't have leading zeroes.", address.replace(constants4.RE_ADDRESS, this.address4.parsedAddress.map(spanLeadingZeroes4).join('.')));
+ }
+ }
+ this.v4 = true;
+ groups[groups.length - 1] = this.address4.toGroup6();
+ address = groups.join(':');
+ }
+ return address;
+ }
+ // TODO: Make private?
+ parse(address) {
+ address = this.parse4in6(address);
+ const badCharacters = address.match(constants6.RE_BAD_CHARACTERS);
+ if (badCharacters) {
+ throw new address_error_1.AddressError((0, sprintf_js_1.sprintf)('Bad character%s detected in address: %s', badCharacters.length > 1 ? 's' : '', badCharacters.join('')), address.replace(constants6.RE_BAD_CHARACTERS, '$1'));
+ }
+ const badAddress = address.match(constants6.RE_BAD_ADDRESS);
+ if (badAddress) {
+ throw new address_error_1.AddressError((0, sprintf_js_1.sprintf)('Address failed regex: %s', badAddress.join('')), address.replace(constants6.RE_BAD_ADDRESS, '$1'));
+ }
+ let groups = [];
+ const halves = address.split('::');
+ if (halves.length === 2) {
+ let first = halves[0].split(':');
+ let last = halves[1].split(':');
+ if (first.length === 1 && first[0] === '') {
+ first = [];
+ }
+ if (last.length === 1 && last[0] === '') {
+ last = [];
+ }
+ const remaining = this.groups - (first.length + last.length);
+ if (!remaining) {
+ throw new address_error_1.AddressError('Error parsing groups');
+ }
+ this.elidedGroups = remaining;
+ this.elisionBegin = first.length;
+ this.elisionEnd = first.length + this.elidedGroups;
+ groups = groups.concat(first);
+ for (let i = 0; i < remaining; i++) {
+ groups.push('0');
+ }
+ groups = groups.concat(last);
+ }
+ else if (halves.length === 1) {
+ groups = address.split(':');
+ this.elidedGroups = 0;
+ }
+ else {
+ throw new address_error_1.AddressError('Too many :: groups found');
+ }
+ groups = groups.map((group) => (0, sprintf_js_1.sprintf)('%x', parseInt(group, 16)));
+ if (groups.length !== this.groups) {
+ throw new address_error_1.AddressError('Incorrect number of groups found');
+ }
+ return groups;
+ }
+ /**
+ * Return the canonical form of the address
+ * @memberof Address6
+ * @instance
+ * @returns {String}
+ */
+ canonicalForm() {
+ return this.parsedAddress.map(paddedHex).join(':');
+ }
+ /**
+ * Return the decimal form of the address
+ * @memberof Address6
+ * @instance
+ * @returns {String}
+ */
+ decimal() {
+ return this.parsedAddress.map((n) => (0, sprintf_js_1.sprintf)('%05d', parseInt(n, 16))).join(':');
+ }
+ /**
+ * Return the address as a BigInteger
+ * @memberof Address6
+ * @instance
+ * @returns {BigInteger}
+ */
+ bigInteger() {
+ return new jsbn_1.BigInteger(this.parsedAddress.map(paddedHex).join(''), 16);
+ }
+ /**
+ * Return the last two groups of this address as an IPv4 address string
+ * @memberof Address6
+ * @instance
+ * @returns {Address4}
+ * @example
+ * var address = new Address6('2001:4860:4001::1825:bf11');
+ * address.to4().correctForm(); // '24.37.191.17'
+ */
+ to4() {
+ const binary = this.binaryZeroPad().split('');
+ return ipv4_1.Address4.fromHex(new jsbn_1.BigInteger(binary.slice(96, 128).join(''), 2).toString(16));
+ }
+ /**
+ * Return the v4-in-v6 form of the address
+ * @memberof Address6
+ * @instance
+ * @returns {String}
+ */
+ to4in6() {
+ const address4 = this.to4();
+ const address6 = new Address6(this.parsedAddress.slice(0, 6).join(':'), 6);
+ const correct = address6.correctForm();
+ let infix = '';
+ if (!/:$/.test(correct)) {
+ infix = ':';
+ }
+ return correct + infix + address4.address;
+ }
+ /**
+ * Return an object containing the Teredo properties of the address
+ * @memberof Address6
+ * @instance
+ * @returns {Object}
+ */
+ inspectTeredo() {
+ /*
+ - Bits 0 to 31 are set to the Teredo prefix (normally 2001:0000::/32).
+ - Bits 32 to 63 embed the primary IPv4 address of the Teredo server that
+ is used.
+ - Bits 64 to 79 can be used to define some flags. Currently only the
+ higher order bit is used; it is set to 1 if the Teredo client is
+ located behind a cone NAT, 0 otherwise. For Microsoft's Windows Vista
+ and Windows Server 2008 implementations, more bits are used. In those
+ implementations, the format for these 16 bits is "CRAAAAUG AAAAAAAA",
+ where "C" remains the "Cone" flag. The "R" bit is reserved for future
+ use. The "U" bit is for the Universal/Local flag (set to 0). The "G" bit
+ is Individual/Group flag (set to 0). The A bits are set to a 12-bit
+ randomly generated number chosen by the Teredo client to introduce
+ additional protection for the Teredo node against IPv6-based scanning
+ attacks.
+ - Bits 80 to 95 contains the obfuscated UDP port number. This is the
+ port number that is mapped by the NAT to the Teredo client with all
+ bits inverted.
+ - Bits 96 to 127 contains the obfuscated IPv4 address. This is the
+ public IPv4 address of the NAT with all bits inverted.
+ */
+ const prefix = this.getBitsBase16(0, 32);
+ const udpPort = this.getBits(80, 96).xor(new jsbn_1.BigInteger('ffff', 16)).toString();
+ const server4 = ipv4_1.Address4.fromHex(this.getBitsBase16(32, 64));
+ const client4 = ipv4_1.Address4.fromHex(this.getBits(96, 128).xor(new jsbn_1.BigInteger('ffffffff', 16)).toString(16));
+ const flags = this.getBits(64, 80);
+ const flagsBase2 = this.getBitsBase2(64, 80);
+ const coneNat = flags.testBit(15);
+ const reserved = flags.testBit(14);
+ const groupIndividual = flags.testBit(8);
+ const universalLocal = flags.testBit(9);
+ const nonce = new jsbn_1.BigInteger(flagsBase2.slice(2, 6) + flagsBase2.slice(8, 16), 2).toString(10);
+ return {
+ prefix: (0, sprintf_js_1.sprintf)('%s:%s', prefix.slice(0, 4), prefix.slice(4, 8)),
+ server4: server4.address,
+ client4: client4.address,
+ flags: flagsBase2,
+ coneNat,
+ microsoft: {
+ reserved,
+ universalLocal,
+ groupIndividual,
+ nonce,
+ },
+ udpPort,
+ };
+ }
+ /**
+ * Return an object containing the 6to4 properties of the address
+ * @memberof Address6
+ * @instance
+ * @returns {Object}
+ */
+ inspect6to4() {
+ /*
+ - Bits 0 to 15 are set to the 6to4 prefix (2002::/16).
+ - Bits 16 to 48 embed the IPv4 address of the 6to4 gateway that is used.
+ */
+ const prefix = this.getBitsBase16(0, 16);
+ const gateway = ipv4_1.Address4.fromHex(this.getBitsBase16(16, 48));
+ return {
+ prefix: (0, sprintf_js_1.sprintf)('%s', prefix.slice(0, 4)),
+ gateway: gateway.address,
+ };
+ }
+ /**
+ * Return a v6 6to4 address from a v6 v4inv6 address
+ * @memberof Address6
+ * @instance
+ * @returns {Address6}
+ */
+ to6to4() {
+ if (!this.is4()) {
+ return null;
+ }
+ const addr6to4 = [
+ '2002',
+ this.getBitsBase16(96, 112),
+ this.getBitsBase16(112, 128),
+ '',
+ '/16',
+ ].join(':');
+ return new Address6(addr6to4);
+ }
+ /**
+ * Return a byte array
+ * @memberof Address6
+ * @instance
+ * @returns {Array}
+ */
+ toByteArray() {
+ const byteArray = this.bigInteger().toByteArray();
+ // work around issue where `toByteArray` returns a leading 0 element
+ if (byteArray.length === 17 && byteArray[0] === 0) {
+ return byteArray.slice(1);
+ }
+ return byteArray;
+ }
+ /**
+ * Return an unsigned byte array
+ * @memberof Address6
+ * @instance
+ * @returns {Array}
+ */
+ toUnsignedByteArray() {
+ return this.toByteArray().map(unsignByte);
+ }
+ /**
+ * Convert a byte array to an Address6 object
+ * @memberof Address6
+ * @static
+ * @returns {Address6}
+ */
+ static fromByteArray(bytes) {
+ return this.fromUnsignedByteArray(bytes.map(unsignByte));
+ }
+ /**
+ * Convert an unsigned byte array to an Address6 object
+ * @memberof Address6
+ * @static
+ * @returns {Address6}
+ */
+ static fromUnsignedByteArray(bytes) {
+ const BYTE_MAX = new jsbn_1.BigInteger('256', 10);
+ let result = new jsbn_1.BigInteger('0', 10);
+ let multiplier = new jsbn_1.BigInteger('1', 10);
+ for (let i = bytes.length - 1; i >= 0; i--) {
+ result = result.add(multiplier.multiply(new jsbn_1.BigInteger(bytes[i].toString(10), 10)));
+ multiplier = multiplier.multiply(BYTE_MAX);
+ }
+ return Address6.fromBigInteger(result);
+ }
+ /**
+ * Returns true if the address is in the canonical form, false otherwise
+ * @memberof Address6
+ * @instance
+ * @returns {boolean}
+ */
+ isCanonical() {
+ return this.addressMinusSuffix === this.canonicalForm();
+ }
+ /**
+ * Returns true if the address is a link local address, false otherwise
+ * @memberof Address6
+ * @instance
+ * @returns {boolean}
+ */
+ isLinkLocal() {
+ // Zeroes are required, i.e. we can't check isInSubnet with 'fe80::/10'
+ if (this.getBitsBase2(0, 64) ===
+ '1111111010000000000000000000000000000000000000000000000000000000') {
+ return true;
+ }
+ return false;
+ }
+ /**
+ * Returns true if the address is a multicast address, false otherwise
+ * @memberof Address6
+ * @instance
+ * @returns {boolean}
+ */
+ isMulticast() {
+ return this.getType() === 'Multicast';
+ }
+ /**
+ * Returns true if the address is a v4-in-v6 address, false otherwise
+ * @memberof Address6
+ * @instance
+ * @returns {boolean}
+ */
+ is4() {
+ return this.v4;
+ }
+ /**
+ * Returns true if the address is a Teredo address, false otherwise
+ * @memberof Address6
+ * @instance
+ * @returns {boolean}
+ */
+ isTeredo() {
+ return this.isInSubnet(new Address6('2001::/32'));
+ }
+ /**
+ * Returns true if the address is a 6to4 address, false otherwise
+ * @memberof Address6
+ * @instance
+ * @returns {boolean}
+ */
+ is6to4() {
+ return this.isInSubnet(new Address6('2002::/16'));
+ }
+ /**
+ * Returns true if the address is a loopback address, false otherwise
+ * @memberof Address6
+ * @instance
+ * @returns {boolean}
+ */
+ isLoopback() {
+ return this.getType() === 'Loopback';
+ }
+ // #endregion
+ // #region HTML
+ /**
+ * @returns {String} the address in link form with a default port of 80
+ */
+ href(optionalPort) {
+ if (optionalPort === undefined) {
+ optionalPort = '';
+ }
+ else {
+ optionalPort = (0, sprintf_js_1.sprintf)(':%s', optionalPort);
+ }
+ return (0, sprintf_js_1.sprintf)('http://[%s]%s/', this.correctForm(), optionalPort);
+ }
+ /**
+ * @returns {String} a link suitable for conveying the address via a URL hash
+ */
+ link(options) {
+ if (!options) {
+ options = {};
+ }
+ if (options.className === undefined) {
+ options.className = '';
+ }
+ if (options.prefix === undefined) {
+ options.prefix = '/#address=';
+ }
+ if (options.v4 === undefined) {
+ options.v4 = false;
+ }
+ let formFunction = this.correctForm;
+ if (options.v4) {
+ formFunction = this.to4in6;
+ }
+ if (options.className) {
+ return (0, sprintf_js_1.sprintf)('%2$s', options.prefix, formFunction.call(this), options.className);
+ }
+ return (0, sprintf_js_1.sprintf)('%2$s', options.prefix, formFunction.call(this));
+ }
+ /**
+ * Groups an address
+ * @returns {String}
+ */
+ group() {
+ if (this.elidedGroups === 0) {
+ // The simple case
+ return helpers.simpleGroup(this.address).join(':');
+ }
+ assert(typeof this.elidedGroups === 'number');
+ assert(typeof this.elisionBegin === 'number');
+ // The elided case
+ const output = [];
+ const [left, right] = this.address.split('::');
+ if (left.length) {
+ output.push(...helpers.simpleGroup(left));
+ }
+ else {
+ output.push('');
+ }
+ const classes = ['hover-group'];
+ for (let i = this.elisionBegin; i < this.elisionBegin + this.elidedGroups; i++) {
+ classes.push((0, sprintf_js_1.sprintf)('group-%d', i));
+ }
+ output.push((0, sprintf_js_1.sprintf)('', classes.join(' ')));
+ if (right.length) {
+ output.push(...helpers.simpleGroup(right, this.elisionEnd));
+ }
+ else {
+ output.push('');
+ }
+ if (this.is4()) {
+ assert(this.address4 instanceof ipv4_1.Address4);
+ output.pop();
+ output.push(this.address4.groupForV6());
+ }
+ return output.join(':');
+ }
+ // #endregion
+ // #region Regular expressions
+ /**
+ * Generate a regular expression string that can be used to find or validate
+ * all variations of this address
+ * @memberof Address6
+ * @instance
+ * @param {boolean} substringSearch
+ * @returns {string}
+ */
+ regularExpressionString(substringSearch = false) {
+ let output = [];
+ // TODO: revisit why this is necessary
+ const address6 = new Address6(this.correctForm());
+ if (address6.elidedGroups === 0) {
+ // The simple case
+ output.push((0, regular_expressions_1.simpleRegularExpression)(address6.parsedAddress));
+ }
+ else if (address6.elidedGroups === constants6.GROUPS) {
+ // A completely elided address
+ output.push((0, regular_expressions_1.possibleElisions)(constants6.GROUPS));
+ }
+ else {
+ // A partially elided address
+ const halves = address6.address.split('::');
+ if (halves[0].length) {
+ output.push((0, regular_expressions_1.simpleRegularExpression)(halves[0].split(':')));
+ }
+ assert(typeof address6.elidedGroups === 'number');
+ output.push((0, regular_expressions_1.possibleElisions)(address6.elidedGroups, halves[0].length !== 0, halves[1].length !== 0));
+ if (halves[1].length) {
+ output.push((0, regular_expressions_1.simpleRegularExpression)(halves[1].split(':')));
+ }
+ output = [output.join(':')];
+ }
+ if (!substringSearch) {
+ output = [
+ '(?=^|',
+ regular_expressions_1.ADDRESS_BOUNDARY,
+ '|[^\\w\\:])(',
+ ...output,
+ ')(?=[^\\w\\:]|',
+ regular_expressions_1.ADDRESS_BOUNDARY,
+ '|$)',
+ ];
+ }
+ return output.join('');
+ }
+ /**
+ * Generate a regular expression that can be used to find or validate all
+ * variations of this address.
+ * @memberof Address6
+ * @instance
+ * @param {boolean} substringSearch
+ * @returns {RegExp}
+ */
+ regularExpression(substringSearch = false) {
+ return new RegExp(this.regularExpressionString(substringSearch), 'i');
+ }
+}
+exports.Address6 = Address6;
+//# sourceMappingURL=ipv6.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/ip-address/dist/v4/constants.js b/deps/npm/node_modules/ip-address/dist/v4/constants.js
new file mode 100644
index 00000000000000..6fa2518f964912
--- /dev/null
+++ b/deps/npm/node_modules/ip-address/dist/v4/constants.js
@@ -0,0 +1,8 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.RE_SUBNET_STRING = exports.RE_ADDRESS = exports.GROUPS = exports.BITS = void 0;
+exports.BITS = 32;
+exports.GROUPS = 4;
+exports.RE_ADDRESS = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/g;
+exports.RE_SUBNET_STRING = /\/\d{1,2}$/;
+//# sourceMappingURL=constants.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/ip-address/dist/v6/constants.js b/deps/npm/node_modules/ip-address/dist/v6/constants.js
new file mode 100644
index 00000000000000..e316bb0d0c2cd5
--- /dev/null
+++ b/deps/npm/node_modules/ip-address/dist/v6/constants.js
@@ -0,0 +1,76 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.RE_URL_WITH_PORT = exports.RE_URL = exports.RE_ZONE_STRING = exports.RE_SUBNET_STRING = exports.RE_BAD_ADDRESS = exports.RE_BAD_CHARACTERS = exports.TYPES = exports.SCOPES = exports.GROUPS = exports.BITS = void 0;
+exports.BITS = 128;
+exports.GROUPS = 8;
+/**
+ * Represents IPv6 address scopes
+ * @memberof Address6
+ * @static
+ */
+exports.SCOPES = {
+ 0: 'Reserved',
+ 1: 'Interface local',
+ 2: 'Link local',
+ 4: 'Admin local',
+ 5: 'Site local',
+ 8: 'Organization local',
+ 14: 'Global',
+ 15: 'Reserved',
+};
+/**
+ * Represents IPv6 address types
+ * @memberof Address6
+ * @static
+ */
+exports.TYPES = {
+ 'ff01::1/128': 'Multicast (All nodes on this interface)',
+ 'ff01::2/128': 'Multicast (All routers on this interface)',
+ 'ff02::1/128': 'Multicast (All nodes on this link)',
+ 'ff02::2/128': 'Multicast (All routers on this link)',
+ 'ff05::2/128': 'Multicast (All routers in this site)',
+ 'ff02::5/128': 'Multicast (OSPFv3 AllSPF routers)',
+ 'ff02::6/128': 'Multicast (OSPFv3 AllDR routers)',
+ 'ff02::9/128': 'Multicast (RIP routers)',
+ 'ff02::a/128': 'Multicast (EIGRP routers)',
+ 'ff02::d/128': 'Multicast (PIM routers)',
+ 'ff02::16/128': 'Multicast (MLDv2 reports)',
+ 'ff01::fb/128': 'Multicast (mDNSv6)',
+ 'ff02::fb/128': 'Multicast (mDNSv6)',
+ 'ff05::fb/128': 'Multicast (mDNSv6)',
+ 'ff02::1:2/128': 'Multicast (All DHCP servers and relay agents on this link)',
+ 'ff05::1:2/128': 'Multicast (All DHCP servers and relay agents in this site)',
+ 'ff02::1:3/128': 'Multicast (All DHCP servers on this link)',
+ 'ff05::1:3/128': 'Multicast (All DHCP servers in this site)',
+ '::/128': 'Unspecified',
+ '::1/128': 'Loopback',
+ 'ff00::/8': 'Multicast',
+ 'fe80::/10': 'Link-local unicast',
+};
+/**
+ * A regular expression that matches bad characters in an IPv6 address
+ * @memberof Address6
+ * @static
+ */
+exports.RE_BAD_CHARACTERS = /([^0-9a-f:/%])/gi;
+/**
+ * A regular expression that matches an incorrect IPv6 address
+ * @memberof Address6
+ * @static
+ */
+exports.RE_BAD_ADDRESS = /([0-9a-f]{5,}|:{3,}|[^:]:$|^:[^:]|\/$)/gi;
+/**
+ * A regular expression that matches an IPv6 subnet
+ * @memberof Address6
+ * @static
+ */
+exports.RE_SUBNET_STRING = /\/\d{1,3}(?=%|$)/;
+/**
+ * A regular expression that matches an IPv6 zone
+ * @memberof Address6
+ * @static
+ */
+exports.RE_ZONE_STRING = /%.*$/;
+exports.RE_URL = new RegExp(/^\[{0,1}([0-9a-f:]+)\]{0,1}/);
+exports.RE_URL_WITH_PORT = new RegExp(/\[([0-9a-f:]+)\]:([0-9]{1,5})/);
+//# sourceMappingURL=constants.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/ip-address/dist/v6/helpers.js b/deps/npm/node_modules/ip-address/dist/v6/helpers.js
new file mode 100644
index 00000000000000..918aaa58c85d79
--- /dev/null
+++ b/deps/npm/node_modules/ip-address/dist/v6/helpers.js
@@ -0,0 +1,48 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.simpleGroup = exports.spanLeadingZeroes = exports.spanAll = exports.spanAllZeroes = void 0;
+const sprintf_js_1 = require("sprintf-js");
+/**
+ * @returns {String} the string with all zeroes contained in a
+ */
+function spanAllZeroes(s) {
+ return s.replace(/(0+)/g, '$1');
+}
+exports.spanAllZeroes = spanAllZeroes;
+/**
+ * @returns {String} the string with each character contained in a
+ */
+function spanAll(s, offset = 0) {
+ const letters = s.split('');
+ return letters
+ .map((n, i) => (0, sprintf_js_1.sprintf)('%s', n, i + offset, spanAllZeroes(n)) // XXX Use #base-2 .value-0 instead?
+ )
+ .join('');
+}
+exports.spanAll = spanAll;
+function spanLeadingZeroesSimple(group) {
+ return group.replace(/^(0+)/, '$1');
+}
+/**
+ * @returns {String} the string with leading zeroes contained in a
+ */
+function spanLeadingZeroes(address) {
+ const groups = address.split(':');
+ return groups.map((g) => spanLeadingZeroesSimple(g)).join(':');
+}
+exports.spanLeadingZeroes = spanLeadingZeroes;
+/**
+ * Groups an address
+ * @returns {String} a grouped address
+ */
+function simpleGroup(addressString, offset = 0) {
+ const groups = addressString.split(':');
+ return groups.map((g, i) => {
+ if (/group-v4/.test(g)) {
+ return g;
+ }
+ return (0, sprintf_js_1.sprintf)('%s', i + offset, spanLeadingZeroesSimple(g));
+ });
+}
+exports.simpleGroup = simpleGroup;
+//# sourceMappingURL=helpers.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/ip-address/dist/v6/regular-expressions.js b/deps/npm/node_modules/ip-address/dist/v6/regular-expressions.js
new file mode 100644
index 00000000000000..616550a864509f
--- /dev/null
+++ b/deps/npm/node_modules/ip-address/dist/v6/regular-expressions.js
@@ -0,0 +1,96 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.possibleElisions = exports.simpleRegularExpression = exports.ADDRESS_BOUNDARY = exports.padGroup = exports.groupPossibilities = void 0;
+const v6 = __importStar(require("./constants"));
+const sprintf_js_1 = require("sprintf-js");
+function groupPossibilities(possibilities) {
+ return (0, sprintf_js_1.sprintf)('(%s)', possibilities.join('|'));
+}
+exports.groupPossibilities = groupPossibilities;
+function padGroup(group) {
+ if (group.length < 4) {
+ return (0, sprintf_js_1.sprintf)('0{0,%d}%s', 4 - group.length, group);
+ }
+ return group;
+}
+exports.padGroup = padGroup;
+exports.ADDRESS_BOUNDARY = '[^A-Fa-f0-9:]';
+function simpleRegularExpression(groups) {
+ const zeroIndexes = [];
+ groups.forEach((group, i) => {
+ const groupInteger = parseInt(group, 16);
+ if (groupInteger === 0) {
+ zeroIndexes.push(i);
+ }
+ });
+ // You can technically elide a single 0, this creates the regular expressions
+ // to match that eventuality
+ const possibilities = zeroIndexes.map((zeroIndex) => groups
+ .map((group, i) => {
+ if (i === zeroIndex) {
+ const elision = i === 0 || i === v6.GROUPS - 1 ? ':' : '';
+ return groupPossibilities([padGroup(group), elision]);
+ }
+ return padGroup(group);
+ })
+ .join(':'));
+ // The simplest case
+ possibilities.push(groups.map(padGroup).join(':'));
+ return groupPossibilities(possibilities);
+}
+exports.simpleRegularExpression = simpleRegularExpression;
+function possibleElisions(elidedGroups, moreLeft, moreRight) {
+ const left = moreLeft ? '' : ':';
+ const right = moreRight ? '' : ':';
+ const possibilities = [];
+ // 1. elision of everything (::)
+ if (!moreLeft && !moreRight) {
+ possibilities.push('::');
+ }
+ // 2. complete elision of the middle
+ if (moreLeft && moreRight) {
+ possibilities.push('');
+ }
+ if ((moreRight && !moreLeft) || (!moreRight && moreLeft)) {
+ // 3. complete elision of one side
+ possibilities.push(':');
+ }
+ // 4. elision from the left side
+ possibilities.push((0, sprintf_js_1.sprintf)('%s(:0{1,4}){1,%d}', left, elidedGroups - 1));
+ // 5. elision from the right side
+ possibilities.push((0, sprintf_js_1.sprintf)('(0{1,4}:){1,%d}%s', elidedGroups - 1, right));
+ // 6. no elision
+ possibilities.push((0, sprintf_js_1.sprintf)('(0{1,4}:){%d}0{1,4}', elidedGroups - 1));
+ // 7. elision (including sloppy elision) from the middle
+ for (let groups = 1; groups < elidedGroups - 1; groups++) {
+ for (let position = 1; position < elidedGroups - groups; position++) {
+ possibilities.push((0, sprintf_js_1.sprintf)('(0{1,4}:){%d}:(0{1,4}:){%d}0{1,4}', position, elidedGroups - position - groups - 1));
+ }
+ }
+ return groupPossibilities(possibilities);
+}
+exports.possibleElisions = possibleElisions;
+//# sourceMappingURL=regular-expressions.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/ip-address/node_modules/sprintf-js/CONTRIBUTORS.md b/deps/npm/node_modules/ip-address/node_modules/sprintf-js/CONTRIBUTORS.md
new file mode 100644
index 00000000000000..a16608e936a72c
--- /dev/null
+++ b/deps/npm/node_modules/ip-address/node_modules/sprintf-js/CONTRIBUTORS.md
@@ -0,0 +1,26 @@
+Alexander Rose [@arose](https://github.com/arose)
+Alexandru Mărășteanu [@alexei](https://github.com/alexei)
+Andras [@andrasq](https://github.com/andrasq)
+Benoit Giannangeli [@giann](https://github.com/giann)
+Branden Visser [@mrvisser](https://github.com/mrvisser)
+David Baird
+daurnimator [@daurnimator](https://github.com/daurnimator)
+Doug Beck [@beck](https://github.com/beck)
+Dzmitry Litskalau [@litmit](https://github.com/litmit)
+Fred Ludlow [@fredludlow](https://github.com/fredludlow)
+Hans Pufal
+Henry [@alograg](https://github.com/alograg)
+Johnny Shields [@johnnyshields](https://github.com/johnnyshields)
+Kamal Abdali
+Matt Simerson [@msimerson](https://github.com/msimerson)
+Maxime Robert [@marob](https://github.com/marob)
+MeriemKhelifi [@MeriemKhelifi](https://github.com/MeriemKhelifi)
+Michael Schramm [@wodka](https://github.com/wodka)
+Nazar Mokrynskyi [@nazar-pc](https://github.com/nazar-pc)
+Oliver Salzburg [@oliversalzburg](https://github.com/oliversalzburg)
+Pablo [@ppollono](https://github.com/ppollono)
+Rabehaja Stevens [@RABEHAJA-STEVENS](https://github.com/RABEHAJA-STEVENS)
+Raphael Pigulla [@pigulla](https://github.com/pigulla)
+rebeccapeltz [@rebeccapeltz](https://github.com/rebeccapeltz)
+Stefan Tingström [@stingstrom](https://github.com/stingstrom)
+Tim Gates [@timgates42](https://github.com/timgates42)
diff --git a/deps/npm/node_modules/ip-address/node_modules/sprintf-js/LICENSE b/deps/npm/node_modules/ip-address/node_modules/sprintf-js/LICENSE
new file mode 100644
index 00000000000000..83f832a2ee2829
--- /dev/null
+++ b/deps/npm/node_modules/ip-address/node_modules/sprintf-js/LICENSE
@@ -0,0 +1,24 @@
+Copyright (c) 2007-present, Alexandru Mărășteanu
+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 this software 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 AUTHORS OR COPYRIGHT HOLDERS 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.
diff --git a/deps/npm/node_modules/ip-address/node_modules/sprintf-js/dist/.gitattributes b/deps/npm/node_modules/ip-address/node_modules/sprintf-js/dist/.gitattributes
new file mode 100644
index 00000000000000..a837fd3849f783
--- /dev/null
+++ b/deps/npm/node_modules/ip-address/node_modules/sprintf-js/dist/.gitattributes
@@ -0,0 +1,4 @@
+#ignore all generated files from diff
+#also skip line ending check
+*.js -diff -text
+*.map -diff -text
diff --git a/deps/npm/node_modules/ip-address/node_modules/sprintf-js/dist/angular-sprintf.min.js b/deps/npm/node_modules/ip-address/node_modules/sprintf-js/dist/angular-sprintf.min.js
new file mode 100644
index 00000000000000..5dff8c54337dbd
--- /dev/null
+++ b/deps/npm/node_modules/ip-address/node_modules/sprintf-js/dist/angular-sprintf.min.js
@@ -0,0 +1,3 @@
+/*! sprintf-js v1.1.3 | Copyright (c) 2007-present, Alexandru Mărășteanu | BSD-3-Clause */
+!function(){"use strict";angular.module("sprintf",[]).filter("sprintf",function(){return function(){return sprintf.apply(null,arguments)}}).filter("fmt",["$filter",function(t){return t("sprintf")}]).filter("vsprintf",function(){return function(t,n){return vsprintf(t,n)}}).filter("vfmt",["$filter",function(t){return t("vsprintf")}])}();
+//# sourceMappingURL=angular-sprintf.min.js.map
diff --git a/deps/npm/node_modules/ip-address/node_modules/sprintf-js/dist/sprintf.min.js b/deps/npm/node_modules/ip-address/node_modules/sprintf-js/dist/sprintf.min.js
new file mode 100644
index 00000000000000..ed09637ea39052
--- /dev/null
+++ b/deps/npm/node_modules/ip-address/node_modules/sprintf-js/dist/sprintf.min.js
@@ -0,0 +1,3 @@
+/*! sprintf-js v1.1.3 | Copyright (c) 2007-present, Alexandru Mărășteanu | BSD-3-Clause */
+!function(){"use strict";var g={not_string:/[^s]/,not_bool:/[^t]/,not_type:/[^T]/,not_primitive:/[^v]/,number:/[diefg]/,numeric_arg:/[bcdiefguxX]/,json:/[j]/,not_json:/[^j]/,text:/^[^\x25]+/,modulo:/^\x25{2}/,placeholder:/^\x25(?:([1-9]\d*)\$|\(([^)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-gijostTuvxX])/,key:/^([a-z_][a-z_\d]*)/i,key_access:/^\.([a-z_][a-z_\d]*)/i,index_access:/^\[(\d+)\]/,sign:/^[+-]/};function y(e){return function(e,t){var r,n,i,s,a,o,p,c,l,u=1,f=e.length,d="";for(n=0;n>>0).toString(8);break;case"s":r=String(r),r=s.precision?r.substring(0,s.precision):r;break;case"t":r=String(!!r),r=s.precision?r.substring(0,s.precision):r;break;case"T":r=Object.prototype.toString.call(r).slice(8,-1).toLowerCase(),r=s.precision?r.substring(0,s.precision):r;break;case"u":r=parseInt(r,10)>>>0;break;case"v":r=r.valueOf(),r=s.precision?r.substring(0,s.precision):r;break;case"x":r=(parseInt(r,10)>>>0).toString(16);break;case"X":r=(parseInt(r,10)>>>0).toString(16).toUpperCase()}g.json.test(s.type)?d+=r:(!g.number.test(s.type)||c&&!s.sign?l="":(l=c?"+":"-",r=r.toString().replace(g.sign,"")),o=s.pad_char?"0"===s.pad_char?"0":s.pad_char.charAt(1):" ",p=s.width-(l+r).length,a=s.width&&0",
+ "main": "src/sprintf.js",
+ "scripts": {
+ "test": "mocha test/*.js",
+ "pretest": "npm run lint",
+ "lint": "eslint .",
+ "lint:fix": "eslint --fix ."
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/alexei/sprintf.js.git"
+ },
+ "license": "BSD-3-Clause",
+ "readmeFilename": "README.md",
+ "devDependencies": {
+ "benchmark": "^2.1.4",
+ "eslint": "^5.10.0",
+ "gulp": "^3.9.1",
+ "gulp-benchmark": "^1.1.1",
+ "gulp-eslint": "^5.0.0",
+ "gulp-header": "^2.0.5",
+ "gulp-mocha": "^6.0.0",
+ "gulp-rename": "^1.4.0",
+ "gulp-sourcemaps": "^2.6.4",
+ "gulp-uglify": "^3.0.1",
+ "mocha": "^5.2.0"
+ },
+ "overrides": {
+ "graceful-fs": "^4.2.11"
+ }
+}
diff --git a/deps/npm/node_modules/ip-address/node_modules/sprintf-js/src/angular-sprintf.js b/deps/npm/node_modules/ip-address/node_modules/sprintf-js/src/angular-sprintf.js
new file mode 100644
index 00000000000000..dbfdd65ab25083
--- /dev/null
+++ b/deps/npm/node_modules/ip-address/node_modules/sprintf-js/src/angular-sprintf.js
@@ -0,0 +1,24 @@
+/* global angular, sprintf, vsprintf */
+
+!function() {
+ 'use strict'
+
+ angular.
+ module('sprintf', []).
+ filter('sprintf', function() {
+ return function() {
+ return sprintf.apply(null, arguments)
+ }
+ }).
+ filter('fmt', ['$filter', function($filter) {
+ return $filter('sprintf')
+ }]).
+ filter('vsprintf', function() {
+ return function(format, argv) {
+ return vsprintf(format, argv)
+ }
+ }).
+ filter('vfmt', ['$filter', function($filter) {
+ return $filter('vsprintf')
+ }])
+}(); // eslint-disable-line
diff --git a/deps/npm/node_modules/ip-address/node_modules/sprintf-js/src/sprintf.js b/deps/npm/node_modules/ip-address/node_modules/sprintf-js/src/sprintf.js
new file mode 100644
index 00000000000000..65d6324645ef1d
--- /dev/null
+++ b/deps/npm/node_modules/ip-address/node_modules/sprintf-js/src/sprintf.js
@@ -0,0 +1,231 @@
+/* global window, exports, define */
+
+!function() {
+ 'use strict'
+
+ var re = {
+ not_string: /[^s]/,
+ not_bool: /[^t]/,
+ not_type: /[^T]/,
+ not_primitive: /[^v]/,
+ number: /[diefg]/,
+ numeric_arg: /[bcdiefguxX]/,
+ json: /[j]/,
+ not_json: /[^j]/,
+ text: /^[^\x25]+/,
+ modulo: /^\x25{2}/,
+ placeholder: /^\x25(?:([1-9]\d*)\$|\(([^)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-gijostTuvxX])/,
+ key: /^([a-z_][a-z_\d]*)/i,
+ key_access: /^\.([a-z_][a-z_\d]*)/i,
+ index_access: /^\[(\d+)\]/,
+ sign: /^[+-]/
+ }
+
+ function sprintf(key) {
+ // `arguments` is not an array, but should be fine for this call
+ return sprintf_format(sprintf_parse(key), arguments)
+ }
+
+ function vsprintf(fmt, argv) {
+ return sprintf.apply(null, [fmt].concat(argv || []))
+ }
+
+ function sprintf_format(parse_tree, argv) {
+ var cursor = 1, tree_length = parse_tree.length, arg, output = '', i, k, ph, pad, pad_character, pad_length, is_positive, sign
+ for (i = 0; i < tree_length; i++) {
+ if (typeof parse_tree[i] === 'string') {
+ output += parse_tree[i]
+ }
+ else if (typeof parse_tree[i] === 'object') {
+ ph = parse_tree[i] // convenience purposes only
+ if (ph.keys) { // keyword argument
+ arg = argv[cursor]
+ for (k = 0; k < ph.keys.length; k++) {
+ if (arg == undefined) {
+ throw new Error(sprintf('[sprintf] Cannot access property "%s" of undefined value "%s"', ph.keys[k], ph.keys[k-1]))
+ }
+ arg = arg[ph.keys[k]]
+ }
+ }
+ else if (ph.param_no) { // positional argument (explicit)
+ arg = argv[ph.param_no]
+ }
+ else { // positional argument (implicit)
+ arg = argv[cursor++]
+ }
+
+ if (re.not_type.test(ph.type) && re.not_primitive.test(ph.type) && arg instanceof Function) {
+ arg = arg()
+ }
+
+ if (re.numeric_arg.test(ph.type) && (typeof arg !== 'number' && isNaN(arg))) {
+ throw new TypeError(sprintf('[sprintf] expecting number but found %T', arg))
+ }
+
+ if (re.number.test(ph.type)) {
+ is_positive = arg >= 0
+ }
+
+ switch (ph.type) {
+ case 'b':
+ arg = parseInt(arg, 10).toString(2)
+ break
+ case 'c':
+ arg = String.fromCharCode(parseInt(arg, 10))
+ break
+ case 'd':
+ case 'i':
+ arg = parseInt(arg, 10)
+ break
+ case 'j':
+ arg = JSON.stringify(arg, null, ph.width ? parseInt(ph.width) : 0)
+ break
+ case 'e':
+ arg = ph.precision ? parseFloat(arg).toExponential(ph.precision) : parseFloat(arg).toExponential()
+ break
+ case 'f':
+ arg = ph.precision ? parseFloat(arg).toFixed(ph.precision) : parseFloat(arg)
+ break
+ case 'g':
+ arg = ph.precision ? String(Number(arg.toPrecision(ph.precision))) : parseFloat(arg)
+ break
+ case 'o':
+ arg = (parseInt(arg, 10) >>> 0).toString(8)
+ break
+ case 's':
+ arg = String(arg)
+ arg = (ph.precision ? arg.substring(0, ph.precision) : arg)
+ break
+ case 't':
+ arg = String(!!arg)
+ arg = (ph.precision ? arg.substring(0, ph.precision) : arg)
+ break
+ case 'T':
+ arg = Object.prototype.toString.call(arg).slice(8, -1).toLowerCase()
+ arg = (ph.precision ? arg.substring(0, ph.precision) : arg)
+ break
+ case 'u':
+ arg = parseInt(arg, 10) >>> 0
+ break
+ case 'v':
+ arg = arg.valueOf()
+ arg = (ph.precision ? arg.substring(0, ph.precision) : arg)
+ break
+ case 'x':
+ arg = (parseInt(arg, 10) >>> 0).toString(16)
+ break
+ case 'X':
+ arg = (parseInt(arg, 10) >>> 0).toString(16).toUpperCase()
+ break
+ }
+ if (re.json.test(ph.type)) {
+ output += arg
+ }
+ else {
+ if (re.number.test(ph.type) && (!is_positive || ph.sign)) {
+ sign = is_positive ? '+' : '-'
+ arg = arg.toString().replace(re.sign, '')
+ }
+ else {
+ sign = ''
+ }
+ pad_character = ph.pad_char ? ph.pad_char === '0' ? '0' : ph.pad_char.charAt(1) : ' '
+ pad_length = ph.width - (sign + arg).length
+ pad = ph.width ? (pad_length > 0 ? pad_character.repeat(pad_length) : '') : ''
+ output += ph.align ? sign + arg + pad : (pad_character === '0' ? sign + pad + arg : pad + sign + arg)
+ }
+ }
+ }
+ return output
+ }
+
+ var sprintf_cache = Object.create(null)
+
+ function sprintf_parse(fmt) {
+ if (sprintf_cache[fmt]) {
+ return sprintf_cache[fmt]
+ }
+
+ var _fmt = fmt, match, parse_tree = [], arg_names = 0
+ while (_fmt) {
+ if ((match = re.text.exec(_fmt)) !== null) {
+ parse_tree.push(match[0])
+ }
+ else if ((match = re.modulo.exec(_fmt)) !== null) {
+ parse_tree.push('%')
+ }
+ else if ((match = re.placeholder.exec(_fmt)) !== null) {
+ if (match[2]) {
+ arg_names |= 1
+ var field_list = [], replacement_field = match[2], field_match = []
+ if ((field_match = re.key.exec(replacement_field)) !== null) {
+ field_list.push(field_match[1])
+ while ((replacement_field = replacement_field.substring(field_match[0].length)) !== '') {
+ if ((field_match = re.key_access.exec(replacement_field)) !== null) {
+ field_list.push(field_match[1])
+ }
+ else if ((field_match = re.index_access.exec(replacement_field)) !== null) {
+ field_list.push(field_match[1])
+ }
+ else {
+ throw new SyntaxError('[sprintf] failed to parse named argument key')
+ }
+ }
+ }
+ else {
+ throw new SyntaxError('[sprintf] failed to parse named argument key')
+ }
+ match[2] = field_list
+ }
+ else {
+ arg_names |= 2
+ }
+ if (arg_names === 3) {
+ throw new Error('[sprintf] mixing positional and named placeholders is not (yet) supported')
+ }
+
+ parse_tree.push(
+ {
+ placeholder: match[0],
+ param_no: match[1],
+ keys: match[2],
+ sign: match[3],
+ pad_char: match[4],
+ align: match[5],
+ width: match[6],
+ precision: match[7],
+ type: match[8]
+ }
+ )
+ }
+ else {
+ throw new SyntaxError('[sprintf] unexpected placeholder')
+ }
+ _fmt = _fmt.substring(match[0].length)
+ }
+ return sprintf_cache[fmt] = parse_tree
+ }
+
+ /**
+ * export to either browser or node.js
+ */
+ /* eslint-disable quote-props */
+ if (typeof exports !== 'undefined') {
+ exports['sprintf'] = sprintf
+ exports['vsprintf'] = vsprintf
+ }
+ if (typeof window !== 'undefined') {
+ window['sprintf'] = sprintf
+ window['vsprintf'] = vsprintf
+
+ if (typeof define === 'function' && define['amd']) {
+ define(function() {
+ return {
+ 'sprintf': sprintf,
+ 'vsprintf': vsprintf
+ }
+ })
+ }
+ }
+ /* eslint-enable quote-props */
+}(); // eslint-disable-line
diff --git a/deps/npm/node_modules/ip-address/package.json b/deps/npm/node_modules/ip-address/package.json
new file mode 100644
index 00000000000000..0543fc41a13061
--- /dev/null
+++ b/deps/npm/node_modules/ip-address/package.json
@@ -0,0 +1,87 @@
+{
+ "name": "ip-address",
+ "description": "A library for parsing IPv4 and IPv6 IP addresses in node and the browser.",
+ "keywords": [
+ "ipv6",
+ "ipv4",
+ "browser",
+ "validation"
+ ],
+ "version": "9.0.5",
+ "author": "Beau Gunderson (https://beaugunderson.com/)",
+ "license": "MIT",
+ "main": "dist/ip-address.js",
+ "types": "dist/ip-address.d.ts",
+ "scripts": {
+ "docs": "documentation build --github --output docs --format html ./ip-address.js",
+ "build": "rm -rf dist; mkdir dist; tsc",
+ "prepack": "npm run build",
+ "release": "release-it",
+ "test-ci": "nyc mocha",
+ "test": "mocha",
+ "watch": "mocha --watch"
+ },
+ "nyc": {
+ "extension": [
+ ".ts"
+ ],
+ "exclude": [
+ "**/*.d.ts",
+ ".eslintrc.js",
+ "coverage/",
+ "dist/",
+ "test/",
+ "tmp/"
+ ],
+ "reporter": [
+ "html",
+ "lcov",
+ "text"
+ ],
+ "all": true
+ },
+ "engines": {
+ "node": ">= 12"
+ },
+ "files": [
+ "src",
+ "dist"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/beaugunderson/ip-address.git"
+ },
+ "dependencies": {
+ "jsbn": "1.1.0",
+ "sprintf-js": "^1.1.3"
+ },
+ "devDependencies": {
+ "@types/chai": "^4.2.18",
+ "@types/jsbn": "^1.2.31",
+ "@types/mocha": "^10.0.1",
+ "@types/sprintf-js": "^1.1.2",
+ "@typescript-eslint/eslint-plugin": "^6.7.2",
+ "@typescript-eslint/parser": "^6.7.2",
+ "browserify": "^17.0.0",
+ "chai": "^4.3.4",
+ "codecov": "^3.8.2",
+ "documentation": "^14.0.2",
+ "eslint": "^8.50.0",
+ "eslint-config-airbnb": "^19.0.4",
+ "eslint-config-prettier": "^9.0.0",
+ "eslint-plugin-filenames": "^1.3.2",
+ "eslint-plugin-import": "^2.23.4",
+ "eslint-plugin-jsx-a11y": "^6.4.1",
+ "eslint-plugin-prettier": "^5.0.0",
+ "eslint-plugin-react": "^7.24.0",
+ "eslint-plugin-react-hooks": "^4.2.0",
+ "eslint-plugin-sort-imports-es6-autofix": "^0.6.0",
+ "mocha": "^10.2.0",
+ "nyc": "^15.1.0",
+ "prettier": "^3.0.3",
+ "release-it": "^16.2.0",
+ "source-map-support": "^0.5.19",
+ "ts-node": "^10.0.0",
+ "typescript": "^5.2.2"
+ }
+}
diff --git a/deps/npm/node_modules/ip/lib/ip.js b/deps/npm/node_modules/ip/lib/ip.js
deleted file mode 100644
index 4b2adb5addd96b..00000000000000
--- a/deps/npm/node_modules/ip/lib/ip.js
+++ /dev/null
@@ -1,422 +0,0 @@
-const ip = exports;
-const { Buffer } = require('buffer');
-const os = require('os');
-
-ip.toBuffer = function (ip, buff, offset) {
- offset = ~~offset;
-
- let result;
-
- if (this.isV4Format(ip)) {
- result = buff || Buffer.alloc(offset + 4);
- ip.split(/\./g).map((byte) => {
- result[offset++] = parseInt(byte, 10) & 0xff;
- });
- } else if (this.isV6Format(ip)) {
- const sections = ip.split(':', 8);
-
- let i;
- for (i = 0; i < sections.length; i++) {
- const isv4 = this.isV4Format(sections[i]);
- let v4Buffer;
-
- if (isv4) {
- v4Buffer = this.toBuffer(sections[i]);
- sections[i] = v4Buffer.slice(0, 2).toString('hex');
- }
-
- if (v4Buffer && ++i < 8) {
- sections.splice(i, 0, v4Buffer.slice(2, 4).toString('hex'));
- }
- }
-
- if (sections[0] === '') {
- while (sections.length < 8) sections.unshift('0');
- } else if (sections[sections.length - 1] === '') {
- while (sections.length < 8) sections.push('0');
- } else if (sections.length < 8) {
- for (i = 0; i < sections.length && sections[i] !== ''; i++);
- const argv = [i, 1];
- for (i = 9 - sections.length; i > 0; i--) {
- argv.push('0');
- }
- sections.splice(...argv);
- }
-
- result = buff || Buffer.alloc(offset + 16);
- for (i = 0; i < sections.length; i++) {
- const word = parseInt(sections[i], 16);
- result[offset++] = (word >> 8) & 0xff;
- result[offset++] = word & 0xff;
- }
- }
-
- if (!result) {
- throw Error(`Invalid ip address: ${ip}`);
- }
-
- return result;
-};
-
-ip.toString = function (buff, offset, length) {
- offset = ~~offset;
- length = length || (buff.length - offset);
-
- let result = [];
- if (length === 4) {
- // IPv4
- for (let i = 0; i < length; i++) {
- result.push(buff[offset + i]);
- }
- result = result.join('.');
- } else if (length === 16) {
- // IPv6
- for (let i = 0; i < length; i += 2) {
- result.push(buff.readUInt16BE(offset + i).toString(16));
- }
- result = result.join(':');
- result = result.replace(/(^|:)0(:0)*:0(:|$)/, '$1::$3');
- result = result.replace(/:{3,4}/, '::');
- }
-
- return result;
-};
-
-const ipv4Regex = /^(\d{1,3}\.){3,3}\d{1,3}$/;
-const ipv6Regex = /^(::)?(((\d{1,3}\.){3}(\d{1,3}){1})?([0-9a-f]){0,4}:{0,2}){1,8}(::)?$/i;
-
-ip.isV4Format = function (ip) {
- return ipv4Regex.test(ip);
-};
-
-ip.isV6Format = function (ip) {
- return ipv6Regex.test(ip);
-};
-
-function _normalizeFamily(family) {
- if (family === 4) {
- return 'ipv4';
- }
- if (family === 6) {
- return 'ipv6';
- }
- return family ? family.toLowerCase() : 'ipv4';
-}
-
-ip.fromPrefixLen = function (prefixlen, family) {
- if (prefixlen > 32) {
- family = 'ipv6';
- } else {
- family = _normalizeFamily(family);
- }
-
- let len = 4;
- if (family === 'ipv6') {
- len = 16;
- }
- const buff = Buffer.alloc(len);
-
- for (let i = 0, n = buff.length; i < n; ++i) {
- let bits = 8;
- if (prefixlen < 8) {
- bits = prefixlen;
- }
- prefixlen -= bits;
-
- buff[i] = ~(0xff >> bits) & 0xff;
- }
-
- return ip.toString(buff);
-};
-
-ip.mask = function (addr, mask) {
- addr = ip.toBuffer(addr);
- mask = ip.toBuffer(mask);
-
- const result = Buffer.alloc(Math.max(addr.length, mask.length));
-
- // Same protocol - do bitwise and
- let i;
- if (addr.length === mask.length) {
- for (i = 0; i < addr.length; i++) {
- result[i] = addr[i] & mask[i];
- }
- } else if (mask.length === 4) {
- // IPv6 address and IPv4 mask
- // (Mask low bits)
- for (i = 0; i < mask.length; i++) {
- result[i] = addr[addr.length - 4 + i] & mask[i];
- }
- } else {
- // IPv6 mask and IPv4 addr
- for (i = 0; i < result.length - 6; i++) {
- result[i] = 0;
- }
-
- // ::ffff:ipv4
- result[10] = 0xff;
- result[11] = 0xff;
- for (i = 0; i < addr.length; i++) {
- result[i + 12] = addr[i] & mask[i + 12];
- }
- i += 12;
- }
- for (; i < result.length; i++) {
- result[i] = 0;
- }
-
- return ip.toString(result);
-};
-
-ip.cidr = function (cidrString) {
- const cidrParts = cidrString.split('/');
-
- const addr = cidrParts[0];
- if (cidrParts.length !== 2) {
- throw new Error(`invalid CIDR subnet: ${addr}`);
- }
-
- const mask = ip.fromPrefixLen(parseInt(cidrParts[1], 10));
-
- return ip.mask(addr, mask);
-};
-
-ip.subnet = function (addr, mask) {
- const networkAddress = ip.toLong(ip.mask(addr, mask));
-
- // Calculate the mask's length.
- const maskBuffer = ip.toBuffer(mask);
- let maskLength = 0;
-
- for (let i = 0; i < maskBuffer.length; i++) {
- if (maskBuffer[i] === 0xff) {
- maskLength += 8;
- } else {
- let octet = maskBuffer[i] & 0xff;
- while (octet) {
- octet = (octet << 1) & 0xff;
- maskLength++;
- }
- }
- }
-
- const numberOfAddresses = 2 ** (32 - maskLength);
-
- return {
- networkAddress: ip.fromLong(networkAddress),
- firstAddress: numberOfAddresses <= 2
- ? ip.fromLong(networkAddress)
- : ip.fromLong(networkAddress + 1),
- lastAddress: numberOfAddresses <= 2
- ? ip.fromLong(networkAddress + numberOfAddresses - 1)
- : ip.fromLong(networkAddress + numberOfAddresses - 2),
- broadcastAddress: ip.fromLong(networkAddress + numberOfAddresses - 1),
- subnetMask: mask,
- subnetMaskLength: maskLength,
- numHosts: numberOfAddresses <= 2
- ? numberOfAddresses : numberOfAddresses - 2,
- length: numberOfAddresses,
- contains(other) {
- return networkAddress === ip.toLong(ip.mask(other, mask));
- },
- };
-};
-
-ip.cidrSubnet = function (cidrString) {
- const cidrParts = cidrString.split('/');
-
- const addr = cidrParts[0];
- if (cidrParts.length !== 2) {
- throw new Error(`invalid CIDR subnet: ${addr}`);
- }
-
- const mask = ip.fromPrefixLen(parseInt(cidrParts[1], 10));
-
- return ip.subnet(addr, mask);
-};
-
-ip.not = function (addr) {
- const buff = ip.toBuffer(addr);
- for (let i = 0; i < buff.length; i++) {
- buff[i] = 0xff ^ buff[i];
- }
- return ip.toString(buff);
-};
-
-ip.or = function (a, b) {
- a = ip.toBuffer(a);
- b = ip.toBuffer(b);
-
- // same protocol
- if (a.length === b.length) {
- for (let i = 0; i < a.length; ++i) {
- a[i] |= b[i];
- }
- return ip.toString(a);
-
- // mixed protocols
- }
- let buff = a;
- let other = b;
- if (b.length > a.length) {
- buff = b;
- other = a;
- }
-
- const offset = buff.length - other.length;
- for (let i = offset; i < buff.length; ++i) {
- buff[i] |= other[i - offset];
- }
-
- return ip.toString(buff);
-};
-
-ip.isEqual = function (a, b) {
- a = ip.toBuffer(a);
- b = ip.toBuffer(b);
-
- // Same protocol
- if (a.length === b.length) {
- for (let i = 0; i < a.length; i++) {
- if (a[i] !== b[i]) return false;
- }
- return true;
- }
-
- // Swap
- if (b.length === 4) {
- const t = b;
- b = a;
- a = t;
- }
-
- // a - IPv4, b - IPv6
- for (let i = 0; i < 10; i++) {
- if (b[i] !== 0) return false;
- }
-
- const word = b.readUInt16BE(10);
- if (word !== 0 && word !== 0xffff) return false;
-
- for (let i = 0; i < 4; i++) {
- if (a[i] !== b[i + 12]) return false;
- }
-
- return true;
-};
-
-ip.isPrivate = function (addr) {
- return /^(::f{4}:)?10\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/i
- .test(addr)
- || /^(::f{4}:)?192\.168\.([0-9]{1,3})\.([0-9]{1,3})$/i.test(addr)
- || /^(::f{4}:)?172\.(1[6-9]|2\d|30|31)\.([0-9]{1,3})\.([0-9]{1,3})$/i
- .test(addr)
- || /^(::f{4}:)?127\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/i.test(addr)
- || /^(::f{4}:)?169\.254\.([0-9]{1,3})\.([0-9]{1,3})$/i.test(addr)
- || /^f[cd][0-9a-f]{2}:/i.test(addr)
- || /^fe80:/i.test(addr)
- || /^::1$/.test(addr)
- || /^::$/.test(addr);
-};
-
-ip.isPublic = function (addr) {
- return !ip.isPrivate(addr);
-};
-
-ip.isLoopback = function (addr) {
- return /^(::f{4}:)?127\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})/
- .test(addr)
- || /^fe80::1$/.test(addr)
- || /^::1$/.test(addr)
- || /^::$/.test(addr);
-};
-
-ip.loopback = function (family) {
- //
- // Default to `ipv4`
- //
- family = _normalizeFamily(family);
-
- if (family !== 'ipv4' && family !== 'ipv6') {
- throw new Error('family must be ipv4 or ipv6');
- }
-
- return family === 'ipv4' ? '127.0.0.1' : 'fe80::1';
-};
-
-//
-// ### function address (name, family)
-// #### @name {string|'public'|'private'} **Optional** Name or security
-// of the network interface.
-// #### @family {ipv4|ipv6} **Optional** IP family of the address (defaults
-// to ipv4).
-//
-// Returns the address for the network interface on the current system with
-// the specified `name`:
-// * String: First `family` address of the interface.
-// If not found see `undefined`.
-// * 'public': the first public ip address of family.
-// * 'private': the first private ip address of family.
-// * undefined: First address with `ipv4` or loopback address `127.0.0.1`.
-//
-ip.address = function (name, family) {
- const interfaces = os.networkInterfaces();
-
- //
- // Default to `ipv4`
- //
- family = _normalizeFamily(family);
-
- //
- // If a specific network interface has been named,
- // return the address.
- //
- if (name && name !== 'private' && name !== 'public') {
- const res = interfaces[name].filter((details) => {
- const itemFamily = _normalizeFamily(details.family);
- return itemFamily === family;
- });
- if (res.length === 0) {
- return undefined;
- }
- return res[0].address;
- }
-
- const all = Object.keys(interfaces).map((nic) => {
- //
- // Note: name will only be `public` or `private`
- // when this is called.
- //
- const addresses = interfaces[nic].filter((details) => {
- details.family = _normalizeFamily(details.family);
- if (details.family !== family || ip.isLoopback(details.address)) {
- return false;
- } if (!name) {
- return true;
- }
-
- return name === 'public' ? ip.isPrivate(details.address)
- : ip.isPublic(details.address);
- });
-
- return addresses.length ? addresses[0].address : undefined;
- }).filter(Boolean);
-
- return !all.length ? ip.loopback(family) : all[0];
-};
-
-ip.toLong = function (ip) {
- let ipl = 0;
- ip.split('.').forEach((octet) => {
- ipl <<= 8;
- ipl += parseInt(octet);
- });
- return (ipl >>> 0);
-};
-
-ip.fromLong = function (ipl) {
- return (`${ipl >>> 24}.${
- ipl >> 16 & 255}.${
- ipl >> 8 & 255}.${
- ipl & 255}`);
-};
diff --git a/deps/npm/node_modules/ip/package.json b/deps/npm/node_modules/ip/package.json
deleted file mode 100644
index f0d95e9b789a6d..00000000000000
--- a/deps/npm/node_modules/ip/package.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
- "name": "ip",
- "version": "2.0.0",
- "author": "Fedor Indutny ",
- "homepage": "https://github.com/indutny/node-ip",
- "repository": {
- "type": "git",
- "url": "http://github.com/indutny/node-ip.git"
- },
- "files": [
- "lib",
- "README.md"
- ],
- "main": "lib/ip",
- "devDependencies": {
- "eslint": "^8.15.0",
- "mocha": "^10.0.0"
- },
- "scripts": {
- "lint": "eslint lib/*.js test/*.js",
- "test": "npm run lint && mocha --reporter spec test/*-test.js",
- "fix": "npm run lint -- --fix"
- },
- "license": "MIT"
-}
diff --git a/deps/npm/node_modules/jsbn/LICENSE b/deps/npm/node_modules/jsbn/LICENSE
new file mode 100644
index 00000000000000..c769b38beabae1
--- /dev/null
+++ b/deps/npm/node_modules/jsbn/LICENSE
@@ -0,0 +1,40 @@
+Licensing
+---------
+
+This software is covered under the following copyright:
+
+/*
+ * Copyright (c) 2003-2005 Tom Wu
+ * 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" AND WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
+ * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * IN NO EVENT SHALL TOM WU BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
+ * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER
+ * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF
+ * THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT
+ * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * In addition, the following condition applies:
+ *
+ * All redistributions must retain an intact copy of this copyright notice
+ * and disclaimer.
+ */
+
+Address all questions regarding this license to:
+
+ Tom Wu
+ tjw@cs.Stanford.EDU
diff --git a/deps/npm/node_modules/jsbn/example.html b/deps/npm/node_modules/jsbn/example.html
new file mode 100644
index 00000000000000..1c0489b1376352
--- /dev/null
+++ b/deps/npm/node_modules/jsbn/example.html
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/deps/npm/node_modules/jsbn/example.js b/deps/npm/node_modules/jsbn/example.js
new file mode 100644
index 00000000000000..85979909d7b1d8
--- /dev/null
+++ b/deps/npm/node_modules/jsbn/example.js
@@ -0,0 +1,5 @@
+(function () {
+ var BigInteger = jsbn.BigInteger;
+ var a = new BigInteger('91823918239182398123');
+ console.log(a.bitLength());
+}());
diff --git a/deps/npm/node_modules/jsbn/index.js b/deps/npm/node_modules/jsbn/index.js
new file mode 100644
index 00000000000000..e9eb697b07a891
--- /dev/null
+++ b/deps/npm/node_modules/jsbn/index.js
@@ -0,0 +1,1361 @@
+(function(){
+
+ // Copyright (c) 2005 Tom Wu
+ // All Rights Reserved.
+ // See "LICENSE" for details.
+
+ // Basic JavaScript BN library - subset useful for RSA encryption.
+
+ // Bits per digit
+ var dbits;
+
+ // JavaScript engine analysis
+ var canary = 0xdeadbeefcafe;
+ var j_lm = ((canary&0xffffff)==0xefcafe);
+
+ // (public) Constructor
+ function BigInteger(a,b,c) {
+ if(a != null)
+ if("number" == typeof a) this.fromNumber(a,b,c);
+ else if(b == null && "string" != typeof a) this.fromString(a,256);
+ else this.fromString(a,b);
+ }
+
+ // return new, unset BigInteger
+ function nbi() { return new BigInteger(null); }
+
+ // am: Compute w_j += (x*this_i), propagate carries,
+ // c is initial carry, returns final carry.
+ // c < 3*dvalue, x < 2*dvalue, this_i < dvalue
+ // We need to select the fastest one that works in this environment.
+
+ // am1: use a single mult and divide to get the high bits,
+ // max digit bits should be 26 because
+ // max internal value = 2*dvalue^2-2*dvalue (< 2^53)
+ function am1(i,x,w,j,c,n) {
+ while(--n >= 0) {
+ var v = x*this[i++]+w[j]+c;
+ c = Math.floor(v/0x4000000);
+ w[j++] = v&0x3ffffff;
+ }
+ return c;
+ }
+ // am2 avoids a big mult-and-extract completely.
+ // Max digit bits should be <= 30 because we do bitwise ops
+ // on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
+ function am2(i,x,w,j,c,n) {
+ var xl = x&0x7fff, xh = x>>15;
+ while(--n >= 0) {
+ var l = this[i]&0x7fff;
+ var h = this[i++]>>15;
+ var m = xh*l+h*xl;
+ l = xl*l+((m&0x7fff)<<15)+w[j]+(c&0x3fffffff);
+ c = (l>>>30)+(m>>>15)+xh*h+(c>>>30);
+ w[j++] = l&0x3fffffff;
+ }
+ return c;
+ }
+ // Alternately, set max digit bits to 28 since some
+ // browsers slow down when dealing with 32-bit numbers.
+ function am3(i,x,w,j,c,n) {
+ var xl = x&0x3fff, xh = x>>14;
+ while(--n >= 0) {
+ var l = this[i]&0x3fff;
+ var h = this[i++]>>14;
+ var m = xh*l+h*xl;
+ l = xl*l+((m&0x3fff)<<14)+w[j]+c;
+ c = (l>>28)+(m>>14)+xh*h;
+ w[j++] = l&0xfffffff;
+ }
+ return c;
+ }
+ var inBrowser = typeof navigator !== "undefined";
+ if(inBrowser && j_lm && (navigator.appName == "Microsoft Internet Explorer")) {
+ BigInteger.prototype.am = am2;
+ dbits = 30;
+ }
+ else if(inBrowser && j_lm && (navigator.appName != "Netscape")) {
+ BigInteger.prototype.am = am1;
+ dbits = 26;
+ }
+ else { // Mozilla/Netscape seems to prefer am3
+ BigInteger.prototype.am = am3;
+ dbits = 28;
+ }
+
+ BigInteger.prototype.DB = dbits;
+ BigInteger.prototype.DM = ((1<= 0; --i) r[i] = this[i];
+ r.t = this.t;
+ r.s = this.s;
+ }
+
+ // (protected) set from integer value x, -DV <= x < DV
+ function bnpFromInt(x) {
+ this.t = 1;
+ this.s = (x<0)?-1:0;
+ if(x > 0) this[0] = x;
+ else if(x < -1) this[0] = x+this.DV;
+ else this.t = 0;
+ }
+
+ // return bigint initialized to value
+ function nbv(i) { var r = nbi(); r.fromInt(i); return r; }
+
+ // (protected) set from string and radix
+ function bnpFromString(s,b) {
+ var k;
+ if(b == 16) k = 4;
+ else if(b == 8) k = 3;
+ else if(b == 256) k = 8; // byte array
+ else if(b == 2) k = 1;
+ else if(b == 32) k = 5;
+ else if(b == 4) k = 2;
+ else { this.fromRadix(s,b); return; }
+ this.t = 0;
+ this.s = 0;
+ var i = s.length, mi = false, sh = 0;
+ while(--i >= 0) {
+ var x = (k==8)?s[i]&0xff:intAt(s,i);
+ if(x < 0) {
+ if(s.charAt(i) == "-") mi = true;
+ continue;
+ }
+ mi = false;
+ if(sh == 0)
+ this[this.t++] = x;
+ else if(sh+k > this.DB) {
+ this[this.t-1] |= (x&((1<<(this.DB-sh))-1))<>(this.DB-sh));
+ }
+ else
+ this[this.t-1] |= x<= this.DB) sh -= this.DB;
+ }
+ if(k == 8 && (s[0]&0x80) != 0) {
+ this.s = -1;
+ if(sh > 0) this[this.t-1] |= ((1<<(this.DB-sh))-1)< 0 && this[this.t-1] == c) --this.t;
+ }
+
+ // (public) return string representation in given radix
+ function bnToString(b) {
+ if(this.s < 0) return "-"+this.negate().toString(b);
+ var k;
+ if(b == 16) k = 4;
+ else if(b == 8) k = 3;
+ else if(b == 2) k = 1;
+ else if(b == 32) k = 5;
+ else if(b == 4) k = 2;
+ else return this.toRadix(b);
+ var km = (1< 0) {
+ if(p < this.DB && (d = this[i]>>p) > 0) { m = true; r = int2char(d); }
+ while(i >= 0) {
+ if(p < k) {
+ d = (this[i]&((1<>(p+=this.DB-k);
+ }
+ else {
+ d = (this[i]>>(p-=k))&km;
+ if(p <= 0) { p += this.DB; --i; }
+ }
+ if(d > 0) m = true;
+ if(m) r += int2char(d);
+ }
+ }
+ return m?r:"0";
+ }
+
+ // (public) -this
+ function bnNegate() { var r = nbi(); BigInteger.ZERO.subTo(this,r); return r; }
+
+ // (public) |this|
+ function bnAbs() { return (this.s<0)?this.negate():this; }
+
+ // (public) return + if this > a, - if this < a, 0 if equal
+ function bnCompareTo(a) {
+ var r = this.s-a.s;
+ if(r != 0) return r;
+ var i = this.t;
+ r = i-a.t;
+ if(r != 0) return (this.s<0)?-r:r;
+ while(--i >= 0) if((r=this[i]-a[i]) != 0) return r;
+ return 0;
+ }
+
+ // returns bit length of the integer x
+ function nbits(x) {
+ var r = 1, t;
+ if((t=x>>>16) != 0) { x = t; r += 16; }
+ if((t=x>>8) != 0) { x = t; r += 8; }
+ if((t=x>>4) != 0) { x = t; r += 4; }
+ if((t=x>>2) != 0) { x = t; r += 2; }
+ if((t=x>>1) != 0) { x = t; r += 1; }
+ return r;
+ }
+
+ // (public) return the number of bits in "this"
+ function bnBitLength() {
+ if(this.t <= 0) return 0;
+ return this.DB*(this.t-1)+nbits(this[this.t-1]^(this.s&this.DM));
+ }
+
+ // (protected) r = this << n*DB
+ function bnpDLShiftTo(n,r) {
+ var i;
+ for(i = this.t-1; i >= 0; --i) r[i+n] = this[i];
+ for(i = n-1; i >= 0; --i) r[i] = 0;
+ r.t = this.t+n;
+ r.s = this.s;
+ }
+
+ // (protected) r = this >> n*DB
+ function bnpDRShiftTo(n,r) {
+ for(var i = n; i < this.t; ++i) r[i-n] = this[i];
+ r.t = Math.max(this.t-n,0);
+ r.s = this.s;
+ }
+
+ // (protected) r = this << n
+ function bnpLShiftTo(n,r) {
+ var bs = n%this.DB;
+ var cbs = this.DB-bs;
+ var bm = (1<= 0; --i) {
+ r[i+ds+1] = (this[i]>>cbs)|c;
+ c = (this[i]&bm)<= 0; --i) r[i] = 0;
+ r[ds] = c;
+ r.t = this.t+ds+1;
+ r.s = this.s;
+ r.clamp();
+ }
+
+ // (protected) r = this >> n
+ function bnpRShiftTo(n,r) {
+ r.s = this.s;
+ var ds = Math.floor(n/this.DB);
+ if(ds >= this.t) { r.t = 0; return; }
+ var bs = n%this.DB;
+ var cbs = this.DB-bs;
+ var bm = (1<>bs;
+ for(var i = ds+1; i < this.t; ++i) {
+ r[i-ds-1] |= (this[i]&bm)<>bs;
+ }
+ if(bs > 0) r[this.t-ds-1] |= (this.s&bm)<>= this.DB;
+ }
+ if(a.t < this.t) {
+ c -= a.s;
+ while(i < this.t) {
+ c += this[i];
+ r[i++] = c&this.DM;
+ c >>= this.DB;
+ }
+ c += this.s;
+ }
+ else {
+ c += this.s;
+ while(i < a.t) {
+ c -= a[i];
+ r[i++] = c&this.DM;
+ c >>= this.DB;
+ }
+ c -= a.s;
+ }
+ r.s = (c<0)?-1:0;
+ if(c < -1) r[i++] = this.DV+c;
+ else if(c > 0) r[i++] = c;
+ r.t = i;
+ r.clamp();
+ }
+
+ // (protected) r = this * a, r != this,a (HAC 14.12)
+ // "this" should be the larger one if appropriate.
+ function bnpMultiplyTo(a,r) {
+ var x = this.abs(), y = a.abs();
+ var i = x.t;
+ r.t = i+y.t;
+ while(--i >= 0) r[i] = 0;
+ for(i = 0; i < y.t; ++i) r[i+x.t] = x.am(0,y[i],r,i,0,x.t);
+ r.s = 0;
+ r.clamp();
+ if(this.s != a.s) BigInteger.ZERO.subTo(r,r);
+ }
+
+ // (protected) r = this^2, r != this (HAC 14.16)
+ function bnpSquareTo(r) {
+ var x = this.abs();
+ var i = r.t = 2*x.t;
+ while(--i >= 0) r[i] = 0;
+ for(i = 0; i < x.t-1; ++i) {
+ var c = x.am(i,x[i],r,2*i,0,1);
+ if((r[i+x.t]+=x.am(i+1,2*x[i],r,2*i+1,c,x.t-i-1)) >= x.DV) {
+ r[i+x.t] -= x.DV;
+ r[i+x.t+1] = 1;
+ }
+ }
+ if(r.t > 0) r[r.t-1] += x.am(i,x[i],r,2*i,0,1);
+ r.s = 0;
+ r.clamp();
+ }
+
+ // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
+ // r != q, this != m. q or r may be null.
+ function bnpDivRemTo(m,q,r) {
+ var pm = m.abs();
+ if(pm.t <= 0) return;
+ var pt = this.abs();
+ if(pt.t < pm.t) {
+ if(q != null) q.fromInt(0);
+ if(r != null) this.copyTo(r);
+ return;
+ }
+ if(r == null) r = nbi();
+ var y = nbi(), ts = this.s, ms = m.s;
+ var nsh = this.DB-nbits(pm[pm.t-1]); // normalize modulus
+ if(nsh > 0) { pm.lShiftTo(nsh,y); pt.lShiftTo(nsh,r); }
+ else { pm.copyTo(y); pt.copyTo(r); }
+ var ys = y.t;
+ var y0 = y[ys-1];
+ if(y0 == 0) return;
+ var yt = y0*(1<1)?y[ys-2]>>this.F2:0);
+ var d1 = this.FV/yt, d2 = (1<= 0) {
+ r[r.t++] = 1;
+ r.subTo(t,r);
+ }
+ BigInteger.ONE.dlShiftTo(ys,t);
+ t.subTo(y,y); // "negative" y so we can replace sub with am later
+ while(y.t < ys) y[y.t++] = 0;
+ while(--j >= 0) {
+ // Estimate quotient digit
+ var qd = (r[--i]==y0)?this.DM:Math.floor(r[i]*d1+(r[i-1]+e)*d2);
+ if((r[i]+=y.am(0,qd,r,j,0,ys)) < qd) { // Try it out
+ y.dlShiftTo(j,t);
+ r.subTo(t,r);
+ while(r[i] < --qd) r.subTo(t,r);
+ }
+ }
+ if(q != null) {
+ r.drShiftTo(ys,q);
+ if(ts != ms) BigInteger.ZERO.subTo(q,q);
+ }
+ r.t = ys;
+ r.clamp();
+ if(nsh > 0) r.rShiftTo(nsh,r); // Denormalize remainder
+ if(ts < 0) BigInteger.ZERO.subTo(r,r);
+ }
+
+ // (public) this mod a
+ function bnMod(a) {
+ var r = nbi();
+ this.abs().divRemTo(a,null,r);
+ if(this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r,r);
+ return r;
+ }
+
+ // Modular reduction using "classic" algorithm
+ function Classic(m) { this.m = m; }
+ function cConvert(x) {
+ if(x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m);
+ else return x;
+ }
+ function cRevert(x) { return x; }
+ function cReduce(x) { x.divRemTo(this.m,null,x); }
+ function cMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }
+ function cSqrTo(x,r) { x.squareTo(r); this.reduce(r); }
+
+ Classic.prototype.convert = cConvert;
+ Classic.prototype.revert = cRevert;
+ Classic.prototype.reduce = cReduce;
+ Classic.prototype.mulTo = cMulTo;
+ Classic.prototype.sqrTo = cSqrTo;
+
+ // (protected) return "-1/this % 2^DB"; useful for Mont. reduction
+ // justification:
+ // xy == 1 (mod m)
+ // xy = 1+km
+ // xy(2-xy) = (1+km)(1-km)
+ // x[y(2-xy)] = 1-k^2m^2
+ // x[y(2-xy)] == 1 (mod m^2)
+ // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
+ // should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
+ // JS multiply "overflows" differently from C/C++, so care is needed here.
+ function bnpInvDigit() {
+ if(this.t < 1) return 0;
+ var x = this[0];
+ if((x&1) == 0) return 0;
+ var y = x&3; // y == 1/x mod 2^2
+ y = (y*(2-(x&0xf)*y))&0xf; // y == 1/x mod 2^4
+ y = (y*(2-(x&0xff)*y))&0xff; // y == 1/x mod 2^8
+ y = (y*(2-(((x&0xffff)*y)&0xffff)))&0xffff; // y == 1/x mod 2^16
+ // last step - calculate inverse mod DV directly;
+ // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
+ y = (y*(2-x*y%this.DV))%this.DV; // y == 1/x mod 2^dbits
+ // we really want the negative inverse, and -DV < y < DV
+ return (y>0)?this.DV-y:-y;
+ }
+
+ // Montgomery reduction
+ function Montgomery(m) {
+ this.m = m;
+ this.mp = m.invDigit();
+ this.mpl = this.mp&0x7fff;
+ this.mph = this.mp>>15;
+ this.um = (1<<(m.DB-15))-1;
+ this.mt2 = 2*m.t;
+ }
+
+ // xR mod m
+ function montConvert(x) {
+ var r = nbi();
+ x.abs().dlShiftTo(this.m.t,r);
+ r.divRemTo(this.m,null,r);
+ if(x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r,r);
+ return r;
+ }
+
+ // x/R mod m
+ function montRevert(x) {
+ var r = nbi();
+ x.copyTo(r);
+ this.reduce(r);
+ return r;
+ }
+
+ // x = x/R mod m (HAC 14.32)
+ function montReduce(x) {
+ while(x.t <= this.mt2) // pad x so am has enough room later
+ x[x.t++] = 0;
+ for(var i = 0; i < this.m.t; ++i) {
+ // faster way of calculating u0 = x[i]*mp mod DV
+ var j = x[i]&0x7fff;
+ var u0 = (j*this.mpl+(((j*this.mph+(x[i]>>15)*this.mpl)&this.um)<<15))&x.DM;
+ // use am to combine the multiply-shift-add into one call
+ j = i+this.m.t;
+ x[j] += this.m.am(0,u0,x,i,0,this.m.t);
+ // propagate carry
+ while(x[j] >= x.DV) { x[j] -= x.DV; x[++j]++; }
+ }
+ x.clamp();
+ x.drShiftTo(this.m.t,x);
+ if(x.compareTo(this.m) >= 0) x.subTo(this.m,x);
+ }
+
+ // r = "x^2/R mod m"; x != r
+ function montSqrTo(x,r) { x.squareTo(r); this.reduce(r); }
+
+ // r = "xy/R mod m"; x,y != r
+ function montMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }
+
+ Montgomery.prototype.convert = montConvert;
+ Montgomery.prototype.revert = montRevert;
+ Montgomery.prototype.reduce = montReduce;
+ Montgomery.prototype.mulTo = montMulTo;
+ Montgomery.prototype.sqrTo = montSqrTo;
+
+ // (protected) true iff this is even
+ function bnpIsEven() { return ((this.t>0)?(this[0]&1):this.s) == 0; }
+
+ // (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
+ function bnpExp(e,z) {
+ if(e > 0xffffffff || e < 1) return BigInteger.ONE;
+ var r = nbi(), r2 = nbi(), g = z.convert(this), i = nbits(e)-1;
+ g.copyTo(r);
+ while(--i >= 0) {
+ z.sqrTo(r,r2);
+ if((e&(1< 0) z.mulTo(r2,g,r);
+ else { var t = r; r = r2; r2 = t; }
+ }
+ return z.revert(r);
+ }
+
+ // (public) this^e % m, 0 <= e < 2^32
+ function bnModPowInt(e,m) {
+ var z;
+ if(e < 256 || m.isEven()) z = new Classic(m); else z = new Montgomery(m);
+ return this.exp(e,z);
+ }
+
+ // protected
+ BigInteger.prototype.copyTo = bnpCopyTo;
+ BigInteger.prototype.fromInt = bnpFromInt;
+ BigInteger.prototype.fromString = bnpFromString;
+ BigInteger.prototype.clamp = bnpClamp;
+ BigInteger.prototype.dlShiftTo = bnpDLShiftTo;
+ BigInteger.prototype.drShiftTo = bnpDRShiftTo;
+ BigInteger.prototype.lShiftTo = bnpLShiftTo;
+ BigInteger.prototype.rShiftTo = bnpRShiftTo;
+ BigInteger.prototype.subTo = bnpSubTo;
+ BigInteger.prototype.multiplyTo = bnpMultiplyTo;
+ BigInteger.prototype.squareTo = bnpSquareTo;
+ BigInteger.prototype.divRemTo = bnpDivRemTo;
+ BigInteger.prototype.invDigit = bnpInvDigit;
+ BigInteger.prototype.isEven = bnpIsEven;
+ BigInteger.prototype.exp = bnpExp;
+
+ // public
+ BigInteger.prototype.toString = bnToString;
+ BigInteger.prototype.negate = bnNegate;
+ BigInteger.prototype.abs = bnAbs;
+ BigInteger.prototype.compareTo = bnCompareTo;
+ BigInteger.prototype.bitLength = bnBitLength;
+ BigInteger.prototype.mod = bnMod;
+ BigInteger.prototype.modPowInt = bnModPowInt;
+
+ // "constants"
+ BigInteger.ZERO = nbv(0);
+ BigInteger.ONE = nbv(1);
+
+ // Copyright (c) 2005-2009 Tom Wu
+ // All Rights Reserved.
+ // See "LICENSE" for details.
+
+ // Extended JavaScript BN functions, required for RSA private ops.
+
+ // Version 1.1: new BigInteger("0", 10) returns "proper" zero
+ // Version 1.2: square() API, isProbablePrime fix
+
+ // (public)
+ function bnClone() { var r = nbi(); this.copyTo(r); return r; }
+
+ // (public) return value as integer
+ function bnIntValue() {
+ if(this.s < 0) {
+ if(this.t == 1) return this[0]-this.DV;
+ else if(this.t == 0) return -1;
+ }
+ else if(this.t == 1) return this[0];
+ else if(this.t == 0) return 0;
+ // assumes 16 < DB < 32
+ return ((this[1]&((1<<(32-this.DB))-1))<>24; }
+
+ // (public) return value as short (assumes DB>=16)
+ function bnShortValue() { return (this.t==0)?this.s:(this[0]<<16)>>16; }
+
+ // (protected) return x s.t. r^x < DV
+ function bnpChunkSize(r) { return Math.floor(Math.LN2*this.DB/Math.log(r)); }
+
+ // (public) 0 if this == 0, 1 if this > 0
+ function bnSigNum() {
+ if(this.s < 0) return -1;
+ else if(this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0;
+ else return 1;
+ }
+
+ // (protected) convert to radix string
+ function bnpToRadix(b) {
+ if(b == null) b = 10;
+ if(this.signum() == 0 || b < 2 || b > 36) return "0";
+ var cs = this.chunkSize(b);
+ var a = Math.pow(b,cs);
+ var d = nbv(a), y = nbi(), z = nbi(), r = "";
+ this.divRemTo(d,y,z);
+ while(y.signum() > 0) {
+ r = (a+z.intValue()).toString(b).substr(1) + r;
+ y.divRemTo(d,y,z);
+ }
+ return z.intValue().toString(b) + r;
+ }
+
+ // (protected) convert from radix string
+ function bnpFromRadix(s,b) {
+ this.fromInt(0);
+ if(b == null) b = 10;
+ var cs = this.chunkSize(b);
+ var d = Math.pow(b,cs), mi = false, j = 0, w = 0;
+ for(var i = 0; i < s.length; ++i) {
+ var x = intAt(s,i);
+ if(x < 0) {
+ if(s.charAt(i) == "-" && this.signum() == 0) mi = true;
+ continue;
+ }
+ w = b*w+x;
+ if(++j >= cs) {
+ this.dMultiply(d);
+ this.dAddOffset(w,0);
+ j = 0;
+ w = 0;
+ }
+ }
+ if(j > 0) {
+ this.dMultiply(Math.pow(b,j));
+ this.dAddOffset(w,0);
+ }
+ if(mi) BigInteger.ZERO.subTo(this,this);
+ }
+
+ // (protected) alternate constructor
+ function bnpFromNumber(a,b,c) {
+ if("number" == typeof b) {
+ // new BigInteger(int,int,RNG)
+ if(a < 2) this.fromInt(1);
+ else {
+ this.fromNumber(a,c);
+ if(!this.testBit(a-1)) // force MSB set
+ this.bitwiseTo(BigInteger.ONE.shiftLeft(a-1),op_or,this);
+ if(this.isEven()) this.dAddOffset(1,0); // force odd
+ while(!this.isProbablePrime(b)) {
+ this.dAddOffset(2,0);
+ if(this.bitLength() > a) this.subTo(BigInteger.ONE.shiftLeft(a-1),this);
+ }
+ }
+ }
+ else {
+ // new BigInteger(int,RNG)
+ var x = new Array(), t = a&7;
+ x.length = (a>>3)+1;
+ b.nextBytes(x);
+ if(t > 0) x[0] &= ((1< 0) {
+ if(p < this.DB && (d = this[i]>>p) != (this.s&this.DM)>>p)
+ r[k++] = d|(this.s<<(this.DB-p));
+ while(i >= 0) {
+ if(p < 8) {
+ d = (this[i]&((1<>(p+=this.DB-8);
+ }
+ else {
+ d = (this[i]>>(p-=8))&0xff;
+ if(p <= 0) { p += this.DB; --i; }
+ }
+ if((d&0x80) != 0) d |= -256;
+ if(k == 0 && (this.s&0x80) != (d&0x80)) ++k;
+ if(k > 0 || d != this.s) r[k++] = d;
+ }
+ }
+ return r;
+ }
+
+ function bnEquals(a) { return(this.compareTo(a)==0); }
+ function bnMin(a) { return(this.compareTo(a)<0)?this:a; }
+ function bnMax(a) { return(this.compareTo(a)>0)?this:a; }
+
+ // (protected) r = this op a (bitwise)
+ function bnpBitwiseTo(a,op,r) {
+ var i, f, m = Math.min(a.t,this.t);
+ for(i = 0; i < m; ++i) r[i] = op(this[i],a[i]);
+ if(a.t < this.t) {
+ f = a.s&this.DM;
+ for(i = m; i < this.t; ++i) r[i] = op(this[i],f);
+ r.t = this.t;
+ }
+ else {
+ f = this.s&this.DM;
+ for(i = m; i < a.t; ++i) r[i] = op(f,a[i]);
+ r.t = a.t;
+ }
+ r.s = op(this.s,a.s);
+ r.clamp();
+ }
+
+ // (public) this & a
+ function op_and(x,y) { return x&y; }
+ function bnAnd(a) { var r = nbi(); this.bitwiseTo(a,op_and,r); return r; }
+
+ // (public) this | a
+ function op_or(x,y) { return x|y; }
+ function bnOr(a) { var r = nbi(); this.bitwiseTo(a,op_or,r); return r; }
+
+ // (public) this ^ a
+ function op_xor(x,y) { return x^y; }
+ function bnXor(a) { var r = nbi(); this.bitwiseTo(a,op_xor,r); return r; }
+
+ // (public) this & ~a
+ function op_andnot(x,y) { return x&~y; }
+ function bnAndNot(a) { var r = nbi(); this.bitwiseTo(a,op_andnot,r); return r; }
+
+ // (public) ~this
+ function bnNot() {
+ var r = nbi();
+ for(var i = 0; i < this.t; ++i) r[i] = this.DM&~this[i];
+ r.t = this.t;
+ r.s = ~this.s;
+ return r;
+ }
+
+ // (public) this << n
+ function bnShiftLeft(n) {
+ var r = nbi();
+ if(n < 0) this.rShiftTo(-n,r); else this.lShiftTo(n,r);
+ return r;
+ }
+
+ // (public) this >> n
+ function bnShiftRight(n) {
+ var r = nbi();
+ if(n < 0) this.lShiftTo(-n,r); else this.rShiftTo(n,r);
+ return r;
+ }
+
+ // return index of lowest 1-bit in x, x < 2^31
+ function lbit(x) {
+ if(x == 0) return -1;
+ var r = 0;
+ if((x&0xffff) == 0) { x >>= 16; r += 16; }
+ if((x&0xff) == 0) { x >>= 8; r += 8; }
+ if((x&0xf) == 0) { x >>= 4; r += 4; }
+ if((x&3) == 0) { x >>= 2; r += 2; }
+ if((x&1) == 0) ++r;
+ return r;
+ }
+
+ // (public) returns index of lowest 1-bit (or -1 if none)
+ function bnGetLowestSetBit() {
+ for(var i = 0; i < this.t; ++i)
+ if(this[i] != 0) return i*this.DB+lbit(this[i]);
+ if(this.s < 0) return this.t*this.DB;
+ return -1;
+ }
+
+ // return number of 1 bits in x
+ function cbit(x) {
+ var r = 0;
+ while(x != 0) { x &= x-1; ++r; }
+ return r;
+ }
+
+ // (public) return number of set bits
+ function bnBitCount() {
+ var r = 0, x = this.s&this.DM;
+ for(var i = 0; i < this.t; ++i) r += cbit(this[i]^x);
+ return r;
+ }
+
+ // (public) true iff nth bit is set
+ function bnTestBit(n) {
+ var j = Math.floor(n/this.DB);
+ if(j >= this.t) return(this.s!=0);
+ return((this[j]&(1<<(n%this.DB)))!=0);
+ }
+
+ // (protected) this op (1<>= this.DB;
+ }
+ if(a.t < this.t) {
+ c += a.s;
+ while(i < this.t) {
+ c += this[i];
+ r[i++] = c&this.DM;
+ c >>= this.DB;
+ }
+ c += this.s;
+ }
+ else {
+ c += this.s;
+ while(i < a.t) {
+ c += a[i];
+ r[i++] = c&this.DM;
+ c >>= this.DB;
+ }
+ c += a.s;
+ }
+ r.s = (c<0)?-1:0;
+ if(c > 0) r[i++] = c;
+ else if(c < -1) r[i++] = this.DV+c;
+ r.t = i;
+ r.clamp();
+ }
+
+ // (public) this + a
+ function bnAdd(a) { var r = nbi(); this.addTo(a,r); return r; }
+
+ // (public) this - a
+ function bnSubtract(a) { var r = nbi(); this.subTo(a,r); return r; }
+
+ // (public) this * a
+ function bnMultiply(a) { var r = nbi(); this.multiplyTo(a,r); return r; }
+
+ // (public) this^2
+ function bnSquare() { var r = nbi(); this.squareTo(r); return r; }
+
+ // (public) this / a
+ function bnDivide(a) { var r = nbi(); this.divRemTo(a,r,null); return r; }
+
+ // (public) this % a
+ function bnRemainder(a) { var r = nbi(); this.divRemTo(a,null,r); return r; }
+
+ // (public) [this/a,this%a]
+ function bnDivideAndRemainder(a) {
+ var q = nbi(), r = nbi();
+ this.divRemTo(a,q,r);
+ return new Array(q,r);
+ }
+
+ // (protected) this *= n, this >= 0, 1 < n < DV
+ function bnpDMultiply(n) {
+ this[this.t] = this.am(0,n-1,this,0,0,this.t);
+ ++this.t;
+ this.clamp();
+ }
+
+ // (protected) this += n << w words, this >= 0
+ function bnpDAddOffset(n,w) {
+ if(n == 0) return;
+ while(this.t <= w) this[this.t++] = 0;
+ this[w] += n;
+ while(this[w] >= this.DV) {
+ this[w] -= this.DV;
+ if(++w >= this.t) this[this.t++] = 0;
+ ++this[w];
+ }
+ }
+
+ // A "null" reducer
+ function NullExp() {}
+ function nNop(x) { return x; }
+ function nMulTo(x,y,r) { x.multiplyTo(y,r); }
+ function nSqrTo(x,r) { x.squareTo(r); }
+
+ NullExp.prototype.convert = nNop;
+ NullExp.prototype.revert = nNop;
+ NullExp.prototype.mulTo = nMulTo;
+ NullExp.prototype.sqrTo = nSqrTo;
+
+ // (public) this^e
+ function bnPow(e) { return this.exp(e,new NullExp()); }
+
+ // (protected) r = lower n words of "this * a", a.t <= n
+ // "this" should be the larger one if appropriate.
+ function bnpMultiplyLowerTo(a,n,r) {
+ var i = Math.min(this.t+a.t,n);
+ r.s = 0; // assumes a,this >= 0
+ r.t = i;
+ while(i > 0) r[--i] = 0;
+ var j;
+ for(j = r.t-this.t; i < j; ++i) r[i+this.t] = this.am(0,a[i],r,i,0,this.t);
+ for(j = Math.min(a.t,n); i < j; ++i) this.am(0,a[i],r,i,0,n-i);
+ r.clamp();
+ }
+
+ // (protected) r = "this * a" without lower n words, n > 0
+ // "this" should be the larger one if appropriate.
+ function bnpMultiplyUpperTo(a,n,r) {
+ --n;
+ var i = r.t = this.t+a.t-n;
+ r.s = 0; // assumes a,this >= 0
+ while(--i >= 0) r[i] = 0;
+ for(i = Math.max(n-this.t,0); i < a.t; ++i)
+ r[this.t+i-n] = this.am(n-i,a[i],r,0,0,this.t+i-n);
+ r.clamp();
+ r.drShiftTo(1,r);
+ }
+
+ // Barrett modular reduction
+ function Barrett(m) {
+ // setup Barrett
+ this.r2 = nbi();
+ this.q3 = nbi();
+ BigInteger.ONE.dlShiftTo(2*m.t,this.r2);
+ this.mu = this.r2.divide(m);
+ this.m = m;
+ }
+
+ function barrettConvert(x) {
+ if(x.s < 0 || x.t > 2*this.m.t) return x.mod(this.m);
+ else if(x.compareTo(this.m) < 0) return x;
+ else { var r = nbi(); x.copyTo(r); this.reduce(r); return r; }
+ }
+
+ function barrettRevert(x) { return x; }
+
+ // x = x mod m (HAC 14.42)
+ function barrettReduce(x) {
+ x.drShiftTo(this.m.t-1,this.r2);
+ if(x.t > this.m.t+1) { x.t = this.m.t+1; x.clamp(); }
+ this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3);
+ this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);
+ while(x.compareTo(this.r2) < 0) x.dAddOffset(1,this.m.t+1);
+ x.subTo(this.r2,x);
+ while(x.compareTo(this.m) >= 0) x.subTo(this.m,x);
+ }
+
+ // r = x^2 mod m; x != r
+ function barrettSqrTo(x,r) { x.squareTo(r); this.reduce(r); }
+
+ // r = x*y mod m; x,y != r
+ function barrettMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }
+
+ Barrett.prototype.convert = barrettConvert;
+ Barrett.prototype.revert = barrettRevert;
+ Barrett.prototype.reduce = barrettReduce;
+ Barrett.prototype.mulTo = barrettMulTo;
+ Barrett.prototype.sqrTo = barrettSqrTo;
+
+ // (public) this^e % m (HAC 14.85)
+ function bnModPow(e,m) {
+ var i = e.bitLength(), k, r = nbv(1), z;
+ if(i <= 0) return r;
+ else if(i < 18) k = 1;
+ else if(i < 48) k = 3;
+ else if(i < 144) k = 4;
+ else if(i < 768) k = 5;
+ else k = 6;
+ if(i < 8)
+ z = new Classic(m);
+ else if(m.isEven())
+ z = new Barrett(m);
+ else
+ z = new Montgomery(m);
+
+ // precomputation
+ var g = new Array(), n = 3, k1 = k-1, km = (1< 1) {
+ var g2 = nbi();
+ z.sqrTo(g[1],g2);
+ while(n <= km) {
+ g[n] = nbi();
+ z.mulTo(g2,g[n-2],g[n]);
+ n += 2;
+ }
+ }
+
+ var j = e.t-1, w, is1 = true, r2 = nbi(), t;
+ i = nbits(e[j])-1;
+ while(j >= 0) {
+ if(i >= k1) w = (e[j]>>(i-k1))&km;
+ else {
+ w = (e[j]&((1<<(i+1))-1))<<(k1-i);
+ if(j > 0) w |= e[j-1]>>(this.DB+i-k1);
+ }
+
+ n = k;
+ while((w&1) == 0) { w >>= 1; --n; }
+ if((i -= n) < 0) { i += this.DB; --j; }
+ if(is1) { // ret == 1, don't bother squaring or multiplying it
+ g[w].copyTo(r);
+ is1 = false;
+ }
+ else {
+ while(n > 1) { z.sqrTo(r,r2); z.sqrTo(r2,r); n -= 2; }
+ if(n > 0) z.sqrTo(r,r2); else { t = r; r = r2; r2 = t; }
+ z.mulTo(r2,g[w],r);
+ }
+
+ while(j >= 0 && (e[j]&(1< 0) {
+ x.rShiftTo(g,x);
+ y.rShiftTo(g,y);
+ }
+ while(x.signum() > 0) {
+ if((i = x.getLowestSetBit()) > 0) x.rShiftTo(i,x);
+ if((i = y.getLowestSetBit()) > 0) y.rShiftTo(i,y);
+ if(x.compareTo(y) >= 0) {
+ x.subTo(y,x);
+ x.rShiftTo(1,x);
+ }
+ else {
+ y.subTo(x,y);
+ y.rShiftTo(1,y);
+ }
+ }
+ if(g > 0) y.lShiftTo(g,y);
+ return y;
+ }
+
+ // (protected) this % n, n < 2^26
+ function bnpModInt(n) {
+ if(n <= 0) return 0;
+ var d = this.DV%n, r = (this.s<0)?n-1:0;
+ if(this.t > 0)
+ if(d == 0) r = this[0]%n;
+ else for(var i = this.t-1; i >= 0; --i) r = (d*r+this[i])%n;
+ return r;
+ }
+
+ // (public) 1/this % m (HAC 14.61)
+ function bnModInverse(m) {
+ var ac = m.isEven();
+ if((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO;
+ var u = m.clone(), v = this.clone();
+ var a = nbv(1), b = nbv(0), c = nbv(0), d = nbv(1);
+ while(u.signum() != 0) {
+ while(u.isEven()) {
+ u.rShiftTo(1,u);
+ if(ac) {
+ if(!a.isEven() || !b.isEven()) { a.addTo(this,a); b.subTo(m,b); }
+ a.rShiftTo(1,a);
+ }
+ else if(!b.isEven()) b.subTo(m,b);
+ b.rShiftTo(1,b);
+ }
+ while(v.isEven()) {
+ v.rShiftTo(1,v);
+ if(ac) {
+ if(!c.isEven() || !d.isEven()) { c.addTo(this,c); d.subTo(m,d); }
+ c.rShiftTo(1,c);
+ }
+ else if(!d.isEven()) d.subTo(m,d);
+ d.rShiftTo(1,d);
+ }
+ if(u.compareTo(v) >= 0) {
+ u.subTo(v,u);
+ if(ac) a.subTo(c,a);
+ b.subTo(d,b);
+ }
+ else {
+ v.subTo(u,v);
+ if(ac) c.subTo(a,c);
+ d.subTo(b,d);
+ }
+ }
+ if(v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO;
+ if(d.compareTo(m) >= 0) return d.subtract(m);
+ if(d.signum() < 0) d.addTo(m,d); else return d;
+ if(d.signum() < 0) return d.add(m); else return d;
+ }
+
+ var lowprimes = [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997];
+ var lplim = (1<<26)/lowprimes[lowprimes.length-1];
+
+ // (public) test primality with certainty >= 1-.5^t
+ function bnIsProbablePrime(t) {
+ var i, x = this.abs();
+ if(x.t == 1 && x[0] <= lowprimes[lowprimes.length-1]) {
+ for(i = 0; i < lowprimes.length; ++i)
+ if(x[0] == lowprimes[i]) return true;
+ return false;
+ }
+ if(x.isEven()) return false;
+ i = 1;
+ while(i < lowprimes.length) {
+ var m = lowprimes[i], j = i+1;
+ while(j < lowprimes.length && m < lplim) m *= lowprimes[j++];
+ m = x.modInt(m);
+ while(i < j) if(m%lowprimes[i++] == 0) return false;
+ }
+ return x.millerRabin(t);
+ }
+
+ // (protected) true if probably prime (HAC 4.24, Miller-Rabin)
+ function bnpMillerRabin(t) {
+ var n1 = this.subtract(BigInteger.ONE);
+ var k = n1.getLowestSetBit();
+ if(k <= 0) return false;
+ var r = n1.shiftRight(k);
+ t = (t+1)>>1;
+ if(t > lowprimes.length) t = lowprimes.length;
+ var a = nbi();
+ for(var i = 0; i < t; ++i) {
+ //Pick bases at random, instead of starting at 2
+ a.fromInt(lowprimes[Math.floor(Math.random()*lowprimes.length)]);
+ var y = a.modPow(r,this);
+ if(y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
+ var j = 1;
+ while(j++ < k && y.compareTo(n1) != 0) {
+ y = y.modPowInt(2,this);
+ if(y.compareTo(BigInteger.ONE) == 0) return false;
+ }
+ if(y.compareTo(n1) != 0) return false;
+ }
+ }
+ return true;
+ }
+
+ // protected
+ BigInteger.prototype.chunkSize = bnpChunkSize;
+ BigInteger.prototype.toRadix = bnpToRadix;
+ BigInteger.prototype.fromRadix = bnpFromRadix;
+ BigInteger.prototype.fromNumber = bnpFromNumber;
+ BigInteger.prototype.bitwiseTo = bnpBitwiseTo;
+ BigInteger.prototype.changeBit = bnpChangeBit;
+ BigInteger.prototype.addTo = bnpAddTo;
+ BigInteger.prototype.dMultiply = bnpDMultiply;
+ BigInteger.prototype.dAddOffset = bnpDAddOffset;
+ BigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo;
+ BigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo;
+ BigInteger.prototype.modInt = bnpModInt;
+ BigInteger.prototype.millerRabin = bnpMillerRabin;
+
+ // public
+ BigInteger.prototype.clone = bnClone;
+ BigInteger.prototype.intValue = bnIntValue;
+ BigInteger.prototype.byteValue = bnByteValue;
+ BigInteger.prototype.shortValue = bnShortValue;
+ BigInteger.prototype.signum = bnSigNum;
+ BigInteger.prototype.toByteArray = bnToByteArray;
+ BigInteger.prototype.equals = bnEquals;
+ BigInteger.prototype.min = bnMin;
+ BigInteger.prototype.max = bnMax;
+ BigInteger.prototype.and = bnAnd;
+ BigInteger.prototype.or = bnOr;
+ BigInteger.prototype.xor = bnXor;
+ BigInteger.prototype.andNot = bnAndNot;
+ BigInteger.prototype.not = bnNot;
+ BigInteger.prototype.shiftLeft = bnShiftLeft;
+ BigInteger.prototype.shiftRight = bnShiftRight;
+ BigInteger.prototype.getLowestSetBit = bnGetLowestSetBit;
+ BigInteger.prototype.bitCount = bnBitCount;
+ BigInteger.prototype.testBit = bnTestBit;
+ BigInteger.prototype.setBit = bnSetBit;
+ BigInteger.prototype.clearBit = bnClearBit;
+ BigInteger.prototype.flipBit = bnFlipBit;
+ BigInteger.prototype.add = bnAdd;
+ BigInteger.prototype.subtract = bnSubtract;
+ BigInteger.prototype.multiply = bnMultiply;
+ BigInteger.prototype.divide = bnDivide;
+ BigInteger.prototype.remainder = bnRemainder;
+ BigInteger.prototype.divideAndRemainder = bnDivideAndRemainder;
+ BigInteger.prototype.modPow = bnModPow;
+ BigInteger.prototype.modInverse = bnModInverse;
+ BigInteger.prototype.pow = bnPow;
+ BigInteger.prototype.gcd = bnGCD;
+ BigInteger.prototype.isProbablePrime = bnIsProbablePrime;
+
+ // JSBN-specific extension
+ BigInteger.prototype.square = bnSquare;
+
+ // Expose the Barrett function
+ BigInteger.prototype.Barrett = Barrett
+
+ // BigInteger interfaces not implemented in jsbn:
+
+ // BigInteger(int signum, byte[] magnitude)
+ // double doubleValue()
+ // float floatValue()
+ // int hashCode()
+ // long longValue()
+ // static BigInteger valueOf(long val)
+
+ // Random number generator - requires a PRNG backend, e.g. prng4.js
+
+ // For best results, put code like
+ //
+ // in your main HTML document.
+
+ var rng_state;
+ var rng_pool;
+ var rng_pptr;
+
+ // Mix in a 32-bit integer into the pool
+ function rng_seed_int(x) {
+ rng_pool[rng_pptr++] ^= x & 255;
+ rng_pool[rng_pptr++] ^= (x >> 8) & 255;
+ rng_pool[rng_pptr++] ^= (x >> 16) & 255;
+ rng_pool[rng_pptr++] ^= (x >> 24) & 255;
+ if(rng_pptr >= rng_psize) rng_pptr -= rng_psize;
+ }
+
+ // Mix in the current time (w/milliseconds) into the pool
+ function rng_seed_time() {
+ rng_seed_int(new Date().getTime());
+ }
+
+ // Initialize the pool with junk if needed.
+ if(rng_pool == null) {
+ rng_pool = new Array();
+ rng_pptr = 0;
+ var t;
+ if(typeof window !== "undefined" && window.crypto) {
+ if (window.crypto.getRandomValues) {
+ // Use webcrypto if available
+ var ua = new Uint8Array(32);
+ window.crypto.getRandomValues(ua);
+ for(t = 0; t < 32; ++t)
+ rng_pool[rng_pptr++] = ua[t];
+ }
+ else if(navigator.appName == "Netscape" && navigator.appVersion < "5") {
+ // Extract entropy (256 bits) from NS4 RNG if available
+ var z = window.crypto.random(32);
+ for(t = 0; t < z.length; ++t)
+ rng_pool[rng_pptr++] = z.charCodeAt(t) & 255;
+ }
+ }
+ while(rng_pptr < rng_psize) { // extract some randomness from Math.random()
+ t = Math.floor(65536 * Math.random());
+ rng_pool[rng_pptr++] = t >>> 8;
+ rng_pool[rng_pptr++] = t & 255;
+ }
+ rng_pptr = 0;
+ rng_seed_time();
+ //rng_seed_int(window.screenX);
+ //rng_seed_int(window.screenY);
+ }
+
+ function rng_get_byte() {
+ if(rng_state == null) {
+ rng_seed_time();
+ rng_state = prng_newstate();
+ rng_state.init(rng_pool);
+ for(rng_pptr = 0; rng_pptr < rng_pool.length; ++rng_pptr)
+ rng_pool[rng_pptr] = 0;
+ rng_pptr = 0;
+ //rng_pool = null;
+ }
+ // TODO: allow reseeding after first request
+ return rng_state.next();
+ }
+
+ function rng_get_bytes(ba) {
+ var i;
+ for(i = 0; i < ba.length; ++i) ba[i] = rng_get_byte();
+ }
+
+ function SecureRandom() {}
+
+ SecureRandom.prototype.nextBytes = rng_get_bytes;
+
+ // prng4.js - uses Arcfour as a PRNG
+
+ function Arcfour() {
+ this.i = 0;
+ this.j = 0;
+ this.S = new Array();
+ }
+
+ // Initialize arcfour context from key, an array of ints, each from [0..255]
+ function ARC4init(key) {
+ var i, j, t;
+ for(i = 0; i < 256; ++i)
+ this.S[i] = i;
+ j = 0;
+ for(i = 0; i < 256; ++i) {
+ j = (j + this.S[i] + key[i % key.length]) & 255;
+ t = this.S[i];
+ this.S[i] = this.S[j];
+ this.S[j] = t;
+ }
+ this.i = 0;
+ this.j = 0;
+ }
+
+ function ARC4next() {
+ var t;
+ this.i = (this.i + 1) & 255;
+ this.j = (this.j + this.S[this.i]) & 255;
+ t = this.S[this.i];
+ this.S[this.i] = this.S[this.j];
+ this.S[this.j] = t;
+ return this.S[(t + this.S[this.i]) & 255];
+ }
+
+ Arcfour.prototype.init = ARC4init;
+ Arcfour.prototype.next = ARC4next;
+
+ // Plug in your RNG constructor here
+ function prng_newstate() {
+ return new Arcfour();
+ }
+
+ // Pool size must be a multiple of 4 and greater than 32.
+ // An array of bytes the size of the pool will be passed to init()
+ var rng_psize = 256;
+
+ if (typeof exports !== 'undefined') {
+ exports = module.exports = {
+ default: BigInteger,
+ BigInteger: BigInteger,
+ SecureRandom: SecureRandom,
+ };
+ } else {
+ this.jsbn = {
+ BigInteger: BigInteger,
+ SecureRandom: SecureRandom
+ };
+ }
+
+}).call(this);
diff --git a/deps/npm/node_modules/jsbn/package.json b/deps/npm/node_modules/jsbn/package.json
new file mode 100644
index 00000000000000..97b137c2e2db9b
--- /dev/null
+++ b/deps/npm/node_modules/jsbn/package.json
@@ -0,0 +1,21 @@
+{
+ "name": "jsbn",
+ "version": "1.1.0",
+ "description": "The jsbn library is a fast, portable implementation of large-number math in pure JavaScript, enabling public-key crypto and other applications on desktop and mobile browsers.",
+ "main": "index.js",
+ "scripts": {
+ "test": "mocha test.js"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/andyperlitch/jsbn.git"
+ },
+ "keywords": [
+ "biginteger",
+ "bignumber",
+ "big",
+ "integer"
+ ],
+ "author": "Tom Wu",
+ "license": "MIT"
+}
diff --git a/deps/npm/node_modules/jsbn/test/es6-import.js b/deps/npm/node_modules/jsbn/test/es6-import.js
new file mode 100644
index 00000000000000..668cbdfdc5bef3
--- /dev/null
+++ b/deps/npm/node_modules/jsbn/test/es6-import.js
@@ -0,0 +1,3 @@
+import {BigInteger} from '../';
+
+console.log(typeof BigInteger)
diff --git a/deps/npm/node_modules/libnpmdiff/package.json b/deps/npm/node_modules/libnpmdiff/package.json
index 99f92bd242c219..b130b128cf7372 100644
--- a/deps/npm/node_modules/libnpmdiff/package.json
+++ b/deps/npm/node_modules/libnpmdiff/package.json
@@ -1,6 +1,6 @@
{
"name": "libnpmdiff",
- "version": "6.0.5",
+ "version": "6.0.7",
"description": "The registry diff",
"repository": {
"type": "git",
diff --git a/deps/npm/node_modules/libnpmexec/package.json b/deps/npm/node_modules/libnpmexec/package.json
index bef7d0eda9820a..2b4fb559ba4a2e 100644
--- a/deps/npm/node_modules/libnpmexec/package.json
+++ b/deps/npm/node_modules/libnpmexec/package.json
@@ -1,6 +1,6 @@
{
"name": "libnpmexec",
- "version": "7.0.6",
+ "version": "7.0.8",
"files": [
"bin/",
"lib/"
diff --git a/deps/npm/node_modules/libnpmfund/package.json b/deps/npm/node_modules/libnpmfund/package.json
index 4a8bcb034c1bda..66889c1fa6d5b5 100644
--- a/deps/npm/node_modules/libnpmfund/package.json
+++ b/deps/npm/node_modules/libnpmfund/package.json
@@ -1,6 +1,6 @@
{
"name": "libnpmfund",
- "version": "5.0.3",
+ "version": "5.0.5",
"main": "lib/index.js",
"files": [
"bin/",
diff --git a/deps/npm/node_modules/libnpmpack/package.json b/deps/npm/node_modules/libnpmpack/package.json
index 89986434a1cb2e..1d504fca4ec9b6 100644
--- a/deps/npm/node_modules/libnpmpack/package.json
+++ b/deps/npm/node_modules/libnpmpack/package.json
@@ -1,6 +1,6 @@
{
"name": "libnpmpack",
- "version": "6.0.5",
+ "version": "6.0.7",
"description": "Programmatic API for the bits behind npm pack",
"author": "GitHub Inc.",
"main": "lib/index.js",
diff --git a/deps/npm/node_modules/libnpmpublish/package.json b/deps/npm/node_modules/libnpmpublish/package.json
index ce2982450249c2..67f63816d90d59 100644
--- a/deps/npm/node_modules/libnpmpublish/package.json
+++ b/deps/npm/node_modules/libnpmpublish/package.json
@@ -1,6 +1,6 @@
{
"name": "libnpmpublish",
- "version": "9.0.3",
+ "version": "9.0.4",
"description": "Programmatic API for the bits behind npm publish and unpublish",
"author": "GitHub Inc.",
"main": "lib/index.js",
@@ -44,7 +44,7 @@
"npm-registry-fetch": "^16.0.0",
"proc-log": "^3.0.0",
"semver": "^7.3.7",
- "sigstore": "^2.1.0",
+ "sigstore": "^2.2.0",
"ssri": "^10.0.5"
},
"engines": {
diff --git a/deps/npm/node_modules/lru-cache/dist/commonjs/index.js b/deps/npm/node_modules/lru-cache/dist/commonjs/index.js
index 3e8efcdde5e76b..e1ef9dbf7b80a4 100644
--- a/deps/npm/node_modules/lru-cache/dist/commonjs/index.js
+++ b/deps/npm/node_modules/lru-cache/dist/commonjs/index.js
@@ -673,6 +673,11 @@ class LRUCache {
[Symbol.iterator]() {
return this.entries();
}
+ /**
+ * A String value that is used in the creation of the default string description of an object.
+ * Called by the built-in method Object.prototype.toString.
+ */
+ [Symbol.toStringTag] = 'LRUCache';
/**
* Find a value for which the supplied fn method returns a truthy value,
* similar to Array.find(). fn is called as fn(value, key, cache).
diff --git a/deps/npm/node_modules/lru-cache/dist/esm/index.js b/deps/npm/node_modules/lru-cache/dist/esm/index.js
index 3f8c178a3af524..bf8f7e816babe2 100644
--- a/deps/npm/node_modules/lru-cache/dist/esm/index.js
+++ b/deps/npm/node_modules/lru-cache/dist/esm/index.js
@@ -670,6 +670,11 @@ export class LRUCache {
[Symbol.iterator]() {
return this.entries();
}
+ /**
+ * A String value that is used in the creation of the default string description of an object.
+ * Called by the built-in method Object.prototype.toString.
+ */
+ [Symbol.toStringTag] = 'LRUCache';
/**
* Find a value for which the supplied fn method returns a truthy value,
* similar to Array.find(). fn is called as fn(value, key, cache).
diff --git a/deps/npm/node_modules/lru-cache/package.json b/deps/npm/node_modules/lru-cache/package.json
index 3702e6ef425bca..348e2118a7c25c 100644
--- a/deps/npm/node_modules/lru-cache/package.json
+++ b/deps/npm/node_modules/lru-cache/package.json
@@ -1,7 +1,7 @@
{
"name": "lru-cache",
"description": "A cache object that deletes the least-recently-used items.",
- "version": "10.1.0",
+ "version": "10.2.0",
"author": "Isaac Z. Schlueter ",
"keywords": [
"mru",
diff --git a/deps/npm/node_modules/pacote/lib/registry.js b/deps/npm/node_modules/pacote/lib/registry.js
index 0e83edf17519a8..de25a11af46672 100644
--- a/deps/npm/node_modules/pacote/lib/registry.js
+++ b/deps/npm/node_modules/pacote/lib/registry.js
@@ -321,6 +321,7 @@ class RegistryFetcher extends Fetcher {
// specify a public key from the keys endpoint: `registry-host.tld/-/npm/v1/keys`
const options = {
tufCachePath: this.tufCache,
+ tufForceCache: true,
keySelector: publicKey ? () => publicKey.pemkey : undefined,
}
await sigstore.verify(bundle, options)
diff --git a/deps/npm/node_modules/pacote/package.json b/deps/npm/node_modules/pacote/package.json
index 88d479d182f5dc..8fc0bb707f1e52 100644
--- a/deps/npm/node_modules/pacote/package.json
+++ b/deps/npm/node_modules/pacote/package.json
@@ -1,6 +1,6 @@
{
"name": "pacote",
- "version": "17.0.5",
+ "version": "17.0.6",
"description": "JavaScript package downloader",
"author": "GitHub Inc.",
"bin": {
@@ -11,7 +11,7 @@
"scripts": {
"test": "tap",
"snap": "tap",
- "lint": "eslint \"**/*.js\"",
+ "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
"postlint": "template-oss-check",
"lintfix": "npm run lint -- --fix",
"posttest": "npm run lint",
@@ -27,7 +27,7 @@
"devDependencies": {
"@npmcli/arborist": "^7.1.0",
"@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.19.0",
+ "@npmcli/template-oss": "4.21.3",
"hosted-git-info": "^7.0.0",
"mutate-fs": "^2.1.1",
"nock": "^13.2.4",
@@ -59,7 +59,7 @@
"promise-retry": "^2.0.1",
"read-package-json": "^7.0.0",
"read-package-json-fast": "^3.0.0",
- "sigstore": "^2.0.0",
+ "sigstore": "^2.2.0",
"ssri": "^10.0.0",
"tar": "^6.1.11"
},
@@ -72,7 +72,7 @@
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.19.0",
+ "version": "4.21.3",
"windowsCI": false,
"publish": "true"
}
diff --git a/deps/npm/node_modules/promise-call-limit/dist/commonjs/index.js b/deps/npm/node_modules/promise-call-limit/dist/commonjs/index.js
new file mode 100644
index 00000000000000..6ce5cfcef9559e
--- /dev/null
+++ b/deps/npm/node_modules/promise-call-limit/dist/commonjs/index.js
@@ -0,0 +1,87 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.callLimit = void 0;
+const os = __importStar(require("node:os"));
+// availableParallelism available only since node v19, for older versions use
+// cpus() cpus() can return an empty list if /proc is not mounted, use 1 in
+// this case
+/* c8 ignore start */
+const defLimit = 'availableParallelism' in os
+ ? Math.max(1, os.availableParallelism() - 1)
+ : Math.max(1, os.cpus().length - 1);
+const callLimit = (queue, { limit = defLimit, rejectLate } = {}) => new Promise((res, rej) => {
+ let active = 0;
+ let current = 0;
+ const results = [];
+ // Whether or not we rejected, distinct from the rejection just in case the rejection itself is falsey
+ let rejected = false;
+ let rejection;
+ const reject = (er) => {
+ if (rejected)
+ return;
+ rejected = true;
+ rejection ??= er;
+ if (!rejectLate)
+ rej(rejection);
+ };
+ let resolved = false;
+ const resolve = () => {
+ if (resolved || active > 0)
+ return;
+ resolved = true;
+ res(results);
+ };
+ const run = () => {
+ const c = current++;
+ if (c >= queue.length)
+ return rejected ? reject() : resolve();
+ active++;
+ const step = queue[c];
+ /* c8 ignore start */
+ if (!step)
+ throw new Error('walked off queue');
+ /* c8 ignore stop */
+ results[c] = step()
+ .then(result => {
+ active--;
+ results[c] = result;
+ return result;
+ }, er => {
+ active--;
+ reject(er);
+ })
+ .then(result => {
+ if (rejected && active === 0)
+ return rej(rejection);
+ run();
+ return result;
+ });
+ };
+ for (let i = 0; i < limit; i++)
+ run();
+});
+exports.callLimit = callLimit;
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/promise-call-limit/dist/commonjs/package.json b/deps/npm/node_modules/promise-call-limit/dist/commonjs/package.json
new file mode 100644
index 00000000000000..5bbefffbabee39
--- /dev/null
+++ b/deps/npm/node_modules/promise-call-limit/dist/commonjs/package.json
@@ -0,0 +1,3 @@
+{
+ "type": "commonjs"
+}
diff --git a/deps/npm/node_modules/promise-call-limit/dist/esm/index.js b/deps/npm/node_modules/promise-call-limit/dist/esm/index.js
new file mode 100644
index 00000000000000..030099929b3483
--- /dev/null
+++ b/deps/npm/node_modules/promise-call-limit/dist/esm/index.js
@@ -0,0 +1,60 @@
+import * as os from 'node:os';
+// availableParallelism available only since node v19, for older versions use
+// cpus() cpus() can return an empty list if /proc is not mounted, use 1 in
+// this case
+/* c8 ignore start */
+const defLimit = 'availableParallelism' in os
+ ? Math.max(1, os.availableParallelism() - 1)
+ : Math.max(1, os.cpus().length - 1);
+export const callLimit = (queue, { limit = defLimit, rejectLate } = {}) => new Promise((res, rej) => {
+ let active = 0;
+ let current = 0;
+ const results = [];
+ // Whether or not we rejected, distinct from the rejection just in case the rejection itself is falsey
+ let rejected = false;
+ let rejection;
+ const reject = (er) => {
+ if (rejected)
+ return;
+ rejected = true;
+ rejection ??= er;
+ if (!rejectLate)
+ rej(rejection);
+ };
+ let resolved = false;
+ const resolve = () => {
+ if (resolved || active > 0)
+ return;
+ resolved = true;
+ res(results);
+ };
+ const run = () => {
+ const c = current++;
+ if (c >= queue.length)
+ return rejected ? reject() : resolve();
+ active++;
+ const step = queue[c];
+ /* c8 ignore start */
+ if (!step)
+ throw new Error('walked off queue');
+ /* c8 ignore stop */
+ results[c] = step()
+ .then(result => {
+ active--;
+ results[c] = result;
+ return result;
+ }, er => {
+ active--;
+ reject(er);
+ })
+ .then(result => {
+ if (rejected && active === 0)
+ return rej(rejection);
+ run();
+ return result;
+ });
+ };
+ for (let i = 0; i < limit; i++)
+ run();
+});
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/promise-call-limit/dist/esm/package.json b/deps/npm/node_modules/promise-call-limit/dist/esm/package.json
new file mode 100644
index 00000000000000..3dbc1ca591c055
--- /dev/null
+++ b/deps/npm/node_modules/promise-call-limit/dist/esm/package.json
@@ -0,0 +1,3 @@
+{
+ "type": "module"
+}
diff --git a/deps/npm/node_modules/promise-call-limit/index.js b/deps/npm/node_modules/promise-call-limit/index.js
deleted file mode 100644
index 85ba319ea54d22..00000000000000
--- a/deps/npm/node_modules/promise-call-limit/index.js
+++ /dev/null
@@ -1,52 +0,0 @@
-const os = require('os')
-// availableParallelism available only since node v19, for older versions use
-// cpus() cpus() can return an empty list if /proc is not mounted, use 1 in
-// this case
-
-/* istanbul ignore next - version-specific workaround */
-const defLimit = 'availableParallelism' in os
- ? os.availableParallelism()
- : Math.max(1, os.cpus().length)
-
-const callLimit = (queue, limit = defLimit) => new Promise((res, rej) => {
- let active = 0
- let current = 0
- const results = []
-
- let rejected = false
- const reject = er => {
- if (rejected)
- return
- rejected = true
- rej(er)
- }
-
- let resolved = false
- const resolve = () => {
- if (resolved || active > 0)
- return
- resolved = true
- res(results)
- }
-
- const run = () => {
- const c = current++
- if (c >= queue.length) {
- return resolve()
- }
-
- active ++
- results[c] = queue[c]().then(result => {
- active --
- results[c] = result
- run()
- return result
- }, reject)
- }
-
- for (let i = 0; i < limit; i++) {
- run()
- }
-})
-
-module.exports = callLimit
diff --git a/deps/npm/node_modules/promise-call-limit/package.json b/deps/npm/node_modules/promise-call-limit/package.json
index 412c6db1777150..a3aa548d6538ac 100644
--- a/deps/npm/node_modules/promise-call-limit/package.json
+++ b/deps/npm/node_modules/promise-call-limit/package.json
@@ -1,8 +1,8 @@
{
"name": "promise-call-limit",
- "version": "1.0.2",
+ "version": "3.0.1",
"files": [
- "index.js"
+ "dist"
],
"description": "Call an array of promise-returning functions, restricting concurrency to a specified limit.",
"repository": {
@@ -12,18 +12,55 @@
"author": "Isaac Z. Schlueter (https://izs.me)",
"license": "ISC",
"scripts": {
+ "prepare": "tshy",
+ "pretest": "npm run prepare",
+ "snap": "tap",
"test": "tap",
"preversion": "npm test",
"postversion": "npm publish",
"prepublishOnly": "git push origin --follow-tags"
},
- "tap": {
- "check-coverage": true
- },
"devDependencies": {
- "tap": "^16.0.0"
+ "prettier": "^3.2.1",
+ "tap": "^18.6.1",
+ "tshy": "^1.8.2",
+ "format": "prettier --write . --loglevel warn --ignore-path ../../.prettierignore --cache",
+ "typedoc": "typedoc"
+ },
+ "prettier": {
+ "semi": false,
+ "printWidth": 70,
+ "tabWidth": 2,
+ "useTabs": false,
+ "singleQuote": true,
+ "jsxSingleQuote": false,
+ "bracketSameLine": true,
+ "arrowParens": "avoid",
+ "endOfLine": "lf"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
- }
+ },
+ "tshy": {
+ "exports": {
+ "./package.json": "./package.json",
+ ".": "./src/index.ts"
+ }
+ },
+ "exports": {
+ "./package.json": "./package.json",
+ ".": {
+ "import": {
+ "types": "./dist/esm/index.d.ts",
+ "default": "./dist/esm/index.js"
+ },
+ "require": {
+ "types": "./dist/commonjs/index.d.ts",
+ "default": "./dist/commonjs/index.js"
+ }
+ }
+ },
+ "main": "./dist/commonjs/index.js",
+ "types": "./dist/commonjs/index.d.ts",
+ "type": "module"
}
diff --git a/deps/npm/node_modules/semver/README.md b/deps/npm/node_modules/semver/README.md
index 043bdaed6b5fc3..d0daebe2e280af 100644
--- a/deps/npm/node_modules/semver/README.md
+++ b/deps/npm/node_modules/semver/README.md
@@ -529,6 +529,10 @@ tuple. For example, `1.2.3.4` will return `2.3.4` in rtl mode, not
`4.0.0`. `1.2.3/4` will return `4.0.0`, because the `4` is not a part of
any other overlapping SemVer tuple.
+If the `options.includePrerelease` flag is set, then the `coerce` result will contain
+prerelease and build parts of a version. For example, `1.2.3.4-rc.1+rev.2`
+will preserve prerelease `rc.1` and build `rev.2` in the result.
+
### Clean
* `clean(version)`: Clean a string to be a valid semver if possible
@@ -543,7 +547,7 @@ ex.
* `s.clean(' = v 2.1.5-foo')`: `null`
* `s.clean(' = v 2.1.5-foo', { loose: true })`: `'2.1.5-foo'`
* `s.clean('=v2.1.5')`: `'2.1.5'`
-* `s.clean(' =v2.1.5')`: `2.1.5`
+* `s.clean(' =v2.1.5')`: `'2.1.5'`
* `s.clean(' 2.1.5 ')`: `'2.1.5'`
* `s.clean('~1.0.0')`: `null`
diff --git a/deps/npm/node_modules/semver/functions/coerce.js b/deps/npm/node_modules/semver/functions/coerce.js
index febbff9c273ce5..b378dcea4e5a74 100644
--- a/deps/npm/node_modules/semver/functions/coerce.js
+++ b/deps/npm/node_modules/semver/functions/coerce.js
@@ -19,34 +19,42 @@ const coerce = (version, options) => {
let match = null
if (!options.rtl) {
- match = version.match(re[t.COERCE])
+ match = version.match(options.includePrerelease ? re[t.COERCEFULL] : re[t.COERCE])
} else {
// Find the right-most coercible string that does not share
// a terminus with a more left-ward coercible string.
// Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'
+ // With includePrerelease option set, '1.2.3.4-rc' wants to coerce '2.3.4-rc', not '2.3.4'
//
// Walk through the string checking with a /g regexp
// Manually set the index so as to pick up overlapping matches.
// Stop when we get a match that ends at the string end, since no
// coercible string can be more right-ward without the same terminus.
+ const coerceRtlRegex = options.includePrerelease ? re[t.COERCERTLFULL] : re[t.COERCERTL]
let next
- while ((next = re[t.COERCERTL].exec(version)) &&
+ while ((next = coerceRtlRegex.exec(version)) &&
(!match || match.index + match[0].length !== version.length)
) {
if (!match ||
next.index + next[0].length !== match.index + match[0].length) {
match = next
}
- re[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length
+ coerceRtlRegex.lastIndex = next.index + next[1].length + next[2].length
}
// leave it in a clean state
- re[t.COERCERTL].lastIndex = -1
+ coerceRtlRegex.lastIndex = -1
}
if (match === null) {
return null
}
- return parse(`${match[2]}.${match[3] || '0'}.${match[4] || '0'}`, options)
+ const major = match[2]
+ const minor = match[3] || '0'
+ const patch = match[4] || '0'
+ const prerelease = options.includePrerelease && match[5] ? `-${match[5]}` : ''
+ const build = options.includePrerelease && match[6] ? `+${match[6]}` : ''
+
+ return parse(`${major}.${minor}.${patch}${prerelease}${build}`, options)
}
module.exports = coerce
diff --git a/deps/npm/node_modules/semver/internal/re.js b/deps/npm/node_modules/semver/internal/re.js
index 21150b3ec53b7d..fd8920e7baa717 100644
--- a/deps/npm/node_modules/semver/internal/re.js
+++ b/deps/npm/node_modules/semver/internal/re.js
@@ -154,12 +154,17 @@ createToken('XRANGELOOSE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAINLOOSE]}$`)
// Coercion.
// Extract anything that could conceivably be a part of a valid semver
-createToken('COERCE', `${'(^|[^\\d])' +
+createToken('COERCEPLAIN', `${'(^|[^\\d])' +
'(\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` +
`(?:\\.(\\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)
// Tilde ranges.
// Meaning is "reasonably at or greater than"
diff --git a/deps/npm/node_modules/semver/package.json b/deps/npm/node_modules/semver/package.json
index c145eca2f6d125..f00c6bddaebd92 100644
--- a/deps/npm/node_modules/semver/package.json
+++ b/deps/npm/node_modules/semver/package.json
@@ -1,12 +1,12 @@
{
"name": "semver",
- "version": "7.5.4",
+ "version": "7.6.0",
"description": "The semantic version parser used by npm.",
"main": "index.js",
"scripts": {
"test": "tap",
"snap": "tap",
- "lint": "eslint \"**/*.js\"",
+ "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
"postlint": "template-oss-check",
"lintfix": "npm run lint -- --fix",
"posttest": "npm run lint",
@@ -14,7 +14,7 @@
},
"devDependencies": {
"@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.17.0",
+ "@npmcli/template-oss": "4.21.3",
"tap": "^16.0.0"
},
"license": "ISC",
@@ -53,17 +53,8 @@
"author": "GitHub Inc.",
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.17.0",
+ "version": "4.21.3",
"engines": ">=10",
- "ciVersions": [
- "10.0.0",
- "10.x",
- "12.x",
- "14.x",
- "16.x",
- "18.x"
- ],
- "npmSpec": "8",
"distPaths": [
"classes/",
"functions/",
diff --git a/deps/npm/node_modules/sigstore/dist/ca/verify/chain.js b/deps/npm/node_modules/sigstore/dist/ca/verify/chain.js
deleted file mode 100644
index 3246c7a154e2d9..00000000000000
--- a/deps/npm/node_modules/sigstore/dist/ca/verify/chain.js
+++ /dev/null
@@ -1,63 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.verifyChain = void 0;
-/*
-Copyright 2022 The Sigstore 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.
-*/
-const error_1 = require("../../error");
-const cert_1 = require("../../x509/cert");
-const verify_1 = require("../../x509/verify");
-function verifyChain(certificate, certificateAuthorities) {
- const untrustedCert = cert_1.x509Certificate.parse(certificate.rawBytes);
- // Filter the list of certificate authorities to those which are valid for the
- // signing certificate's notBefore date.
- const validCAs = filterCertificateAuthorities(certificateAuthorities, untrustedCert.notBefore);
- if (validCAs.length === 0) {
- throw new error_1.VerificationError('No valid certificate authorities');
- }
- let trustedChain = [];
- // Loop through all valid CAs and attempt to verify the certificate chain
- const verified = validCAs.find((ca) => {
- const trustedCerts = parseCerts(ca.certChain?.certificates || []);
- try {
- trustedChain = (0, verify_1.verifyCertificateChain)({
- untrustedCert,
- trustedCerts,
- validAt: untrustedCert.notBefore,
- });
- return true;
- }
- catch (e) {
- return false;
- }
- });
- if (!verified) {
- throw new error_1.VerificationError('No valid certificate chain');
- }
- return trustedChain;
-}
-exports.verifyChain = verifyChain;
-// Filter the list of certificate authorities to those which are valid for the
-// given date.
-function filterCertificateAuthorities(certificateAuthorities, validAt) {
- return certificateAuthorities.filter((ca) => ca.validFor &&
- ca.validFor.start &&
- ca.validFor.start <= validAt &&
- (!ca.validFor.end || validAt <= ca.validFor.end));
-}
-// Parse the raw bytes of a certificate into an x509Certificate object.
-function parseCerts(certs) {
- return certs.map((cert) => cert_1.x509Certificate.parse(cert.rawBytes));
-}
diff --git a/deps/npm/node_modules/sigstore/dist/ca/verify/index.js b/deps/npm/node_modules/sigstore/dist/ca/verify/index.js
deleted file mode 100644
index 32f85c828fe5a4..00000000000000
--- a/deps/npm/node_modules/sigstore/dist/ca/verify/index.js
+++ /dev/null
@@ -1,22 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.verifySigningCertificate = void 0;
-const chain_1 = require("./chain");
-const sct_1 = require("./sct");
-const signer_1 = require("./signer");
-function verifySigningCertificate(bundle, trustedRoot, options) {
- // Check that a trusted certificate chain can be found for the signing
- // certificate in the bundle. Only the first certificate in the bundle's
- // chain is used -- everything else must come from the trusted root.
- const trustedChain = (0, chain_1.verifyChain)(bundle.verificationMaterial.content.x509CertificateChain.certificates[0], trustedRoot.certificateAuthorities);
- // Unless disabled, verify the SCTs in the signing certificate
- if (options.ctlogOptions.disable === false) {
- (0, sct_1.verifySCTs)(trustedChain, trustedRoot.ctlogs, options.ctlogOptions);
- }
- // Verify the signing certificate against the provided identities
- // if provided
- if (options.signers) {
- (0, signer_1.verifySignerIdentity)(trustedChain[0], options.signers.certificateIdentities);
- }
-}
-exports.verifySigningCertificate = verifySigningCertificate;
diff --git a/deps/npm/node_modules/sigstore/dist/ca/verify/sct.js b/deps/npm/node_modules/sigstore/dist/ca/verify/sct.js
deleted file mode 100644
index 771c6dd4c0a7f1..00000000000000
--- a/deps/npm/node_modules/sigstore/dist/ca/verify/sct.js
+++ /dev/null
@@ -1,30 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.verifySCTs = void 0;
-/*
-Copyright 2022 The Sigstore 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.
-*/
-const error_1 = require("../../error");
-function verifySCTs(certificateChain, ctLogs, options) {
- const signingCert = certificateChain[0];
- const issuerCert = certificateChain[1];
- const sctResults = signingCert.verifySCTs(issuerCert, ctLogs);
- // Count the number of verified SCTs which were found
- const verifiedSCTCount = sctResults.filter((sct) => sct.verified).length;
- if (verifiedSCTCount < options.threshold) {
- throw new error_1.VerificationError(`Not enough SCTs verified (found ${verifiedSCTCount}, need ${options.threshold})`);
- }
-}
-exports.verifySCTs = verifySCTs;
diff --git a/deps/npm/node_modules/sigstore/dist/ca/verify/signer.js b/deps/npm/node_modules/sigstore/dist/ca/verify/signer.js
deleted file mode 100644
index 6f47651b944c94..00000000000000
--- a/deps/npm/node_modules/sigstore/dist/ca/verify/signer.js
+++ /dev/null
@@ -1,146 +0,0 @@
-"use strict";
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- var desc = Object.getOwnPropertyDescriptor(m, k);
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
- desc = { enumerable: true, get: function() { return m[k]; } };
- }
- Object.defineProperty(o, k2, desc);
-}) : (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
- Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
- o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
- if (mod && mod.__esModule) return mod;
- var result = {};
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
- __setModuleDefault(result, mod);
- return result;
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.verifySignerIdentity = void 0;
-/*
-Copyright 2023 The Sigstore 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.
-*/
-const error_1 = require("../../error");
-const sigstore = __importStar(require("../../types/sigstore"));
-// https://github.com/sigstore/fulcio/blob/main/docs/oid-info.md#1361415726411--issuer
-const OID_FULCIO_ISSUER = '1.3.6.1.4.1.57264.1.1';
-// https://github.com/sigstore/fulcio/blob/main/docs/oid-info.md#1361415726417--othername-san
-const OID_FULCIO_USERNAME_SUBJECT = '1.3.6.1.4.1.57264.1.7';
-// Verifies the identity embedded in a Fulcio-issued signing certificate against
-// the list of trusted identities. Returns without error if at least one of the
-// identities matches the signing certificate; otherwise, throws a
-// VerificationError.
-function verifySignerIdentity(signingCert, identities) {
- // Check that the signing certificate was issued to at least one of the
- // specified identities
- const signerVerified = identities.identities.some((identity) => verifyIdentity(signingCert, identity));
- if (!signerVerified) {
- throw new error_1.PolicyError({
- code: 'UNTRUSTED_SIGNER_ERROR',
- message: 'Certificate issued to untrusted signer',
- });
- }
-}
-exports.verifySignerIdentity = verifySignerIdentity;
-// Checks that the specified certificate was issued to the specified identity.
-// The certificate must match the issuer, subject alternative name, and an
-// optional list of certificate extensions. Returns true if the certificate was
-// issued to the identity; otherwise, returns false.
-function verifyIdentity(cert, identity) {
- return (verifyIssuer(cert, identity.issuer) &&
- verifySAN(cert, identity.san) &&
- verifyOIDs(cert, identity.oids));
-}
-// Checks the Fulcio issuer extension against the expected issuer. Returns true
-// if the issuer matches; otherwise, returns false.
-function verifyIssuer(cert, issuer) {
- const issuerExtension = cert.extension(OID_FULCIO_ISSUER);
- return issuerExtension?.value.toString('ascii') === issuer;
-}
-// Checks the certificate against the expected subject alternative name. Returns
-// true if the SAN matches; otherwise, returns false.
-function verifySAN(cert, expectedSAN) {
- // Fail if the SAN is not specified or is not a supported type
- if (expectedSAN === undefined ||
- expectedSAN.identity === undefined ||
- expectedSAN.type ===
- sigstore.SubjectAlternativeNameType
- .SUBJECT_ALTERNATIVE_NAME_TYPE_UNSPECIFIED) {
- return false;
- }
- const sanExtension = cert.extSubjectAltName;
- // Fail if the certificate does not have a SAN extension
- if (!sanExtension) {
- return false;
- }
- let sanValue;
- switch (expectedSAN.type) {
- case sigstore.SubjectAlternativeNameType.EMAIL:
- sanValue = sanExtension.rfc822Name;
- break;
- case sigstore.SubjectAlternativeNameType.URI:
- sanValue = sanExtension.uri;
- break;
- case sigstore.SubjectAlternativeNameType.OTHER_NAME:
- sanValue = sanExtension.otherName(OID_FULCIO_USERNAME_SUBJECT);
- break;
- }
- // Missing SAN value is an automatic failure
- if (sanValue === undefined) {
- return false;
- }
- let match;
- switch (expectedSAN.identity.$case) {
- case 'value':
- match = expectedSAN.identity.value;
- break;
- case 'regexp':
- // TODO support regex
- break;
- }
- return sanValue === match;
-}
-// Checks that the certificate contains the specified extensions. Returns true
-// if all extensions are present and match the expected values; otherwise,
-// returns false.
-function verifyOIDs(cert, oids) {
- return oids.every((expectedExtension) => {
- if (!expectedExtension.oid) {
- return false;
- }
- const oid = expectedExtension.oid.id.join('.');
- const extension = cert.extension(oid);
- // If the extension is not present, or there is no value, return false
- const valueObj = extension?.valueObj;
- if (!valueObj) {
- return false;
- }
- // Check to see if this is a newer style extension with an embedded
- // UTF8String, or an older style extension with a raw string
- if (valueObj.subs.length > 0) {
- return valueObj.subs[0].value.equals(expectedExtension.value);
- }
- else {
- return valueObj.value.equals(expectedExtension.value);
- }
- });
-}
diff --git a/deps/npm/node_modules/sigstore/dist/config.js b/deps/npm/node_modules/sigstore/dist/config.js
index 43c236f0eebd07..b4f0eea74fa4b4 100644
--- a/deps/npm/node_modules/sigstore/dist/config.js
+++ b/deps/npm/node_modules/sigstore/dist/config.js
@@ -1,29 +1,6 @@
"use strict";
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- var desc = Object.getOwnPropertyDescriptor(m, k);
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
- desc = { enumerable: true, get: function() { return m[k]; } };
- }
- Object.defineProperty(o, k2, desc);
-}) : (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
- Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
- o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
- if (mod && mod.__esModule) return mod;
- var result = {};
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
- __setModuleDefault(result, mod);
- return result;
-};
Object.defineProperty(exports, "__esModule", { value: true });
-exports.artifactVerificationOptions = exports.createBundleBuilder = exports.DEFAULT_TIMEOUT = exports.DEFAULT_RETRY = void 0;
+exports.createVerificationPolicy = exports.createKeyFinder = exports.createBundleBuilder = exports.DEFAULT_TIMEOUT = exports.DEFAULT_RETRY = void 0;
/*
Copyright 2023 The Sigstore Authors.
@@ -39,8 +16,9 @@ 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.
*/
+const core_1 = require("@sigstore/core");
const sign_1 = require("@sigstore/sign");
-const sigstore = __importStar(require("./types/sigstore"));
+const verify_1 = require("@sigstore/verify");
exports.DEFAULT_RETRY = { retries: 2 };
exports.DEFAULT_TIMEOUT = 5000;
function createBundleBuilder(bundleType, options) {
@@ -56,6 +34,36 @@ function createBundleBuilder(bundleType, options) {
}
}
exports.createBundleBuilder = createBundleBuilder;
+// Translates the public KeySelector type into the KeyFinderFunc type needed by
+// the verifier.
+function createKeyFinder(keySelector) {
+ return (hint) => {
+ const key = keySelector(hint);
+ if (!key) {
+ throw new verify_1.VerificationError({
+ code: 'PUBLIC_KEY_ERROR',
+ message: `key not found: ${hint}`,
+ });
+ }
+ return {
+ publicKey: core_1.crypto.createPublicKey(key),
+ validFor: () => true,
+ };
+ };
+}
+exports.createKeyFinder = createKeyFinder;
+function createVerificationPolicy(options) {
+ const policy = {};
+ const san = options.certificateIdentityEmail || options.certificateIdentityURI;
+ if (san) {
+ policy.subjectAlternativeName = san;
+ }
+ if (options.certificateIssuer) {
+ policy.extensions = { issuer: options.certificateIssuer };
+ }
+ return policy;
+}
+exports.createVerificationPolicy = createVerificationPolicy;
// Instantiate the FulcioSigner based on the supplied options.
function initSigner(options) {
return new sign_1.FulcioSigner({
@@ -71,6 +79,7 @@ function initSigner(options) {
function initIdentityProvider(options) {
const token = options.identityToken;
if (token) {
+ /* istanbul ignore next */
return { getToken: () => Promise.resolve(token) };
}
else {
@@ -105,61 +114,3 @@ function isRekorEnabled(options) {
function isTSAEnabled(options) {
return options.tsaServerURL !== undefined;
}
-// Assembles the AtifactVerificationOptions from the supplied VerifyOptions.
-function artifactVerificationOptions(options) {
- // The trusted signers are only used if the options contain a certificate
- // issuer
- let signers;
- if (options.certificateIssuer) {
- let san = undefined;
- if (options.certificateIdentityEmail) {
- san = {
- type: sigstore.SubjectAlternativeNameType.EMAIL,
- identity: {
- $case: 'value',
- value: options.certificateIdentityEmail,
- },
- };
- }
- else if (options.certificateIdentityURI) {
- san = {
- type: sigstore.SubjectAlternativeNameType.URI,
- identity: {
- $case: 'value',
- value: options.certificateIdentityURI,
- },
- };
- }
- const oids = Object.entries(options.certificateOIDs || /* istanbul ignore next */ {}).map(([oid, value]) => ({
- oid: { id: oid.split('.').map((s) => parseInt(s, 10)) },
- value: Buffer.from(value),
- }));
- signers = {
- $case: 'certificateIdentities',
- certificateIdentities: {
- identities: [
- {
- issuer: options.certificateIssuer,
- san: san,
- oids: oids,
- },
- ],
- },
- };
- }
- // Construct the artifact verification options w/ defaults
- return {
- ctlogOptions: {
- disable: options.ctLogThreshold === 0,
- threshold: options.ctLogThreshold ?? 1,
- detachedSct: false,
- },
- tlogOptions: {
- disable: options.tlogThreshold === 0,
- threshold: options.tlogThreshold ?? 1,
- performOnlineVerification: false,
- },
- signers,
- };
-}
-exports.artifactVerificationOptions = artifactVerificationOptions;
diff --git a/deps/npm/node_modules/sigstore/dist/index.js b/deps/npm/node_modules/sigstore/dist/index.js
index 341c1fa504d1e8..7f6a5cf86bbfcb 100644
--- a/deps/npm/node_modules/sigstore/dist/index.js
+++ b/deps/npm/node_modules/sigstore/dist/index.js
@@ -24,9 +24,9 @@ Object.defineProperty(exports, "DEFAULT_REKOR_URL", { enumerable: true, get: fun
Object.defineProperty(exports, "InternalError", { enumerable: true, get: function () { return sign_1.InternalError; } });
var tuf_1 = require("@sigstore/tuf");
Object.defineProperty(exports, "TUFError", { enumerable: true, get: function () { return tuf_1.TUFError; } });
-var error_1 = require("./error");
-Object.defineProperty(exports, "PolicyError", { enumerable: true, get: function () { return error_1.PolicyError; } });
-Object.defineProperty(exports, "VerificationError", { enumerable: true, get: function () { return error_1.VerificationError; } });
+var verify_1 = require("@sigstore/verify");
+Object.defineProperty(exports, "PolicyError", { enumerable: true, get: function () { return verify_1.PolicyError; } });
+Object.defineProperty(exports, "VerificationError", { enumerable: true, get: function () { return verify_1.VerificationError; } });
var sigstore_1 = require("./sigstore");
Object.defineProperty(exports, "attest", { enumerable: true, get: function () { return sigstore_1.attest; } });
Object.defineProperty(exports, "createVerifier", { enumerable: true, get: function () { return sigstore_1.createVerifier; } });
diff --git a/deps/npm/node_modules/sigstore/dist/sigstore.js b/deps/npm/node_modules/sigstore/dist/sigstore.js
index 24fff291ab2b7e..79d3440670cd50 100644
--- a/deps/npm/node_modules/sigstore/dist/sigstore.js
+++ b/deps/npm/node_modules/sigstore/dist/sigstore.js
@@ -41,8 +41,8 @@ limitations under the License.
*/
const bundle_1 = require("@sigstore/bundle");
const tuf = __importStar(require("@sigstore/tuf"));
+const verify_1 = require("@sigstore/verify");
const config = __importStar(require("./config"));
-const verify_1 = require("./verify");
async function sign(payload,
/* istanbul ignore next */
options = {}) {
@@ -77,15 +77,26 @@ options = {}) {
mirrorURL: options.tufMirrorURL,
rootPath: options.tufRootPath,
cachePath: options.tufCachePath,
+ forceCache: options.tufForceCache,
retry: options.retry ?? config.DEFAULT_RETRY,
timeout: options.timeout ?? config.DEFAULT_TIMEOUT,
});
- const verifier = new verify_1.Verifier(trustedRoot, options.keySelector);
- const verifyOpts = config.artifactVerificationOptions(options);
+ const keyFinder = options.keySelector
+ ? config.createKeyFinder(options.keySelector)
+ : undefined;
+ const trustMaterial = (0, verify_1.toTrustMaterial)(trustedRoot, keyFinder);
+ const verifierOptions = {
+ ctlogThreshold: options.ctLogThreshold,
+ tlogThreshold: options.tlogThreshold,
+ };
+ const verifier = new verify_1.Verifier(trustMaterial, verifierOptions);
+ const policy = config.createVerificationPolicy(options);
return {
verify: (bundle, payload) => {
const deserializedBundle = (0, bundle_1.bundleFromJSON)(bundle);
- return verifier.verify(deserializedBundle, verifyOpts, payload);
+ const signedEntity = (0, verify_1.toSignedEntity)(deserializedBundle, payload);
+ verifier.verify(signedEntity, policy);
+ return;
},
};
}
diff --git a/deps/npm/node_modules/sigstore/dist/tlog/verify/body.js b/deps/npm/node_modules/sigstore/dist/tlog/verify/body.js
deleted file mode 100644
index 5a265e5190c125..00000000000000
--- a/deps/npm/node_modules/sigstore/dist/tlog/verify/body.js
+++ /dev/null
@@ -1,152 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.verifyTLogBody = void 0;
-/*
-Copyright 2023 The Sigstore 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.
-*/
-const error_1 = require("../../error");
-const util_1 = require("../../util");
-const TLOG_MISMATCH_ERROR_MSG = 'bundle content and tlog entry do not match';
-// Compare the given tlog entry to the given bundle
-function verifyTLogBody(entry, bundleContent) {
- const { kind, version } = entry.kindVersion;
- const body = JSON.parse(entry.canonicalizedBody.toString('utf8'));
- try {
- if (kind !== body.kind || version !== body.apiVersion) {
- throw new error_1.VerificationError(TLOG_MISMATCH_ERROR_MSG);
- }
- switch (body.kind) {
- case 'dsse':
- verifyDSSETLogBody(body, bundleContent);
- break;
- case 'intoto':
- verifyIntotoTLogBody(body, bundleContent);
- break;
- case 'hashedrekord':
- verifyHashedRekordTLogBody(body, bundleContent);
- break;
- default:
- throw new error_1.VerificationError(`unsupported kind in tlog entry: ${kind}`);
- }
- return true;
- }
- catch (e) {
- return false;
- }
-}
-exports.verifyTLogBody = verifyTLogBody;
-// Compare the given intoto tlog entry to the given bundle
-function verifyDSSETLogBody(tlogEntry, content) {
- if (content?.$case !== 'dsseEnvelope') {
- throw new error_1.VerificationError(`unsupported bundle content: ${content?.$case || 'unknown'}`);
- }
- const dsse = content.dsseEnvelope;
- switch (tlogEntry.apiVersion) {
- case '0.0.1':
- verifyDSSE001TLogBody(tlogEntry, dsse);
- break;
- default:
- throw new error_1.VerificationError(`unsupported dsse version: ${tlogEntry.apiVersion}`);
- }
-}
-// Compare the given intoto tlog entry to the given bundle
-function verifyIntotoTLogBody(tlogEntry, content) {
- if (content?.$case !== 'dsseEnvelope') {
- throw new error_1.VerificationError(`unsupported bundle content: ${content?.$case || 'unknown'}`);
- }
- const dsse = content.dsseEnvelope;
- switch (tlogEntry.apiVersion) {
- case '0.0.2':
- verifyIntoto002TLogBody(tlogEntry, dsse);
- break;
- default:
- throw new error_1.VerificationError(`unsupported intoto version: ${tlogEntry.apiVersion}`);
- }
-}
-// Compare the given hashedrekord tlog entry to the given bundle
-function verifyHashedRekordTLogBody(tlogEntry, content) {
- if (content?.$case !== 'messageSignature') {
- throw new error_1.VerificationError(`unsupported bundle content: ${content?.$case || 'unknown'}`);
- }
- const messageSignature = content.messageSignature;
- switch (tlogEntry.apiVersion) {
- case '0.0.1':
- verifyHashedrekor001TLogBody(tlogEntry, messageSignature);
- break;
- default:
- throw new error_1.VerificationError(`unsupported hashedrekord version: ${tlogEntry.apiVersion}`);
- }
-}
-// Compare the given dsse v0.0.1 tlog entry to the given DSSE envelope.
-function verifyDSSE001TLogBody(tlogEntry, dsse) {
- // Collect all of the signatures from the DSSE envelope
- // Turns them into base64-encoded strings for comparison
- const dsseSigs = dsse.signatures.map((signature) => signature.sig.toString('base64'));
- // Collect all of the signatures from the tlog entry
- const tlogSigs = tlogEntry.spec.signatures?.map((signature) => signature.signature);
- // Ensure the bundle's DSSE and the tlog entry contain the same number of signatures
- if (dsseSigs.length !== tlogSigs?.length) {
- throw new error_1.VerificationError(TLOG_MISMATCH_ERROR_MSG);
- }
- // Ensure that every signature in the bundle's DSSE is present in the tlog entry
- if (!dsseSigs.every((dsseSig) => tlogSigs.includes(dsseSig))) {
- throw new error_1.VerificationError(TLOG_MISMATCH_ERROR_MSG);
- }
- // Ensure the digest of the bundle's DSSE payload matches the digest in the
- // tlog entry
- const dssePayloadHash = util_1.crypto.hash(dsse.payload).toString('hex');
- if (dssePayloadHash !== tlogEntry.spec.payloadHash?.value) {
- throw new error_1.VerificationError(TLOG_MISMATCH_ERROR_MSG);
- }
-}
-// Compare the given intoto v0.0.2 tlog entry to the given DSSE envelope.
-function verifyIntoto002TLogBody(tlogEntry, dsse) {
- // Collect all of the signatures from the DSSE envelope
- // Turns them into base64-encoded strings for comparison
- const dsseSigs = dsse.signatures.map((signature) => signature.sig.toString('base64'));
- // Collect all of the signatures from the tlog entry
- // Remember that tlog signastures are double base64-encoded
- const tlogSigs = tlogEntry.spec.content.envelope?.signatures.map((signature) => (signature.sig ? util_1.encoding.base64Decode(signature.sig) : ''));
- // Ensure the bundle's DSSE and the tlog entry contain the same number of signatures
- if (dsseSigs.length !== tlogSigs?.length) {
- throw new error_1.VerificationError(TLOG_MISMATCH_ERROR_MSG);
- }
- // Ensure that every signature in the bundle's DSSE is present in the tlog entry
- if (!dsseSigs.every((dsseSig) => tlogSigs.includes(dsseSig))) {
- throw new error_1.VerificationError(TLOG_MISMATCH_ERROR_MSG);
- }
- // Ensure the digest of the bundle's DSSE payload matches the digest in the
- // tlog entry
- const dssePayloadHash = util_1.crypto.hash(dsse.payload).toString('hex');
- if (dssePayloadHash !== tlogEntry.spec.content.payloadHash?.value) {
- throw new error_1.VerificationError(TLOG_MISMATCH_ERROR_MSG);
- }
-}
-// Compare the given hashedrekord v0.0.1 tlog entry to the given message
-// signature
-function verifyHashedrekor001TLogBody(tlogEntry, messageSignature) {
- // Ensure that the bundles message signature matches the tlog entry
- const msgSig = messageSignature.signature.toString('base64');
- const tlogSig = tlogEntry.spec.signature.content;
- if (msgSig !== tlogSig) {
- throw new error_1.VerificationError(TLOG_MISMATCH_ERROR_MSG);
- }
- // Ensure that the bundle's message digest matches the tlog entry
- const msgDigest = messageSignature.messageDigest?.digest.toString('hex');
- const tlogDigest = tlogEntry.spec.data.hash?.value;
- if (msgDigest !== tlogDigest) {
- throw new error_1.VerificationError(TLOG_MISMATCH_ERROR_MSG);
- }
-}
diff --git a/deps/npm/node_modules/sigstore/dist/tlog/verify/index.js b/deps/npm/node_modules/sigstore/dist/tlog/verify/index.js
deleted file mode 100644
index 9224feffde00b0..00000000000000
--- a/deps/npm/node_modules/sigstore/dist/tlog/verify/index.js
+++ /dev/null
@@ -1,92 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.verifyTLogEntries = void 0;
-/*
-Copyright 2023 The Sigstore 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.
-*/
-const bundle_1 = require("@sigstore/bundle");
-const error_1 = require("../../error");
-const cert_1 = require("../../x509/cert");
-const body_1 = require("./body");
-const checkpoint_1 = require("./checkpoint");
-const merkle_1 = require("./merkle");
-const set_1 = require("./set");
-// Verifies that the number of tlog entries that pass offline verification
-// is greater than or equal to the threshold specified in the options.
-function verifyTLogEntries(bundle, trustedRoot, options) {
- if (bundle.mediaType === bundle_1.BUNDLE_V01_MEDIA_TYPE) {
- (0, bundle_1.assertBundleV01)(bundle);
- verifyTLogEntriesForBundleV01(bundle, trustedRoot, options);
- }
- else {
- (0, bundle_1.assertBundleLatest)(bundle);
- verifyTLogEntriesForBundleLatest(bundle, trustedRoot, options);
- }
-}
-exports.verifyTLogEntries = verifyTLogEntries;
-function verifyTLogEntriesForBundleV01(bundle, trustedRoot, options) {
- if (options.performOnlineVerification) {
- throw new error_1.VerificationError('Online verification not implemented');
- }
- // Extract the signing cert, if available
- const signingCert = signingCertificate(bundle);
- // Iterate over the tlog entries and verify each one
- const verifiedEntries = bundle.verificationMaterial.tlogEntries.filter((entry) => verifyTLogEntryWithInclusionPromise(entry, bundle.content, trustedRoot.tlogs, signingCert));
- if (verifiedEntries.length < options.threshold) {
- throw new error_1.VerificationError('tlog verification failed');
- }
-}
-function verifyTLogEntriesForBundleLatest(bundle, trustedRoot, options) {
- if (options.performOnlineVerification) {
- throw new error_1.VerificationError('Online verification not implemented');
- }
- // Extract the signing cert, if available
- const signingCert = signingCertificate(bundle);
- // Iterate over the tlog entries and verify each one
- const verifiedEntries = bundle.verificationMaterial.tlogEntries.filter((entry) => verifyTLogEntryWithInclusionProof(entry, bundle.content, trustedRoot.tlogs, signingCert));
- if (verifiedEntries.length < options.threshold) {
- throw new error_1.VerificationError('tlog verification failed');
- }
-}
-function verifyTLogEntryWithInclusionPromise(entry, bundleContent, tlogs, signingCert) {
- // If there is a signing certificate availble, check that the tlog integrated
- // time is within the certificate's validity period; otherwise, skip this
- // check.
- const verifyTLogIntegrationTime = signingCert
- ? () => signingCert.validForDate(new Date(Number(entry.integratedTime) * 1000))
- : () => true;
- return ((0, body_1.verifyTLogBody)(entry, bundleContent) &&
- (0, set_1.verifyTLogSET)(entry, tlogs) &&
- verifyTLogIntegrationTime());
-}
-function verifyTLogEntryWithInclusionProof(entry, bundleContent, tlogs, signingCert) {
- // If there is a signing certificate availble, check that the tlog integrated
- // time is within the certificate's validity period; otherwise, skip this
- // check.
- const verifyTLogIntegrationTime = signingCert
- ? () => signingCert.validForDate(new Date(Number(entry.integratedTime) * 1000))
- : () => true;
- return ((0, body_1.verifyTLogBody)(entry, bundleContent) &&
- (0, merkle_1.verifyMerkleInclusion)(entry) &&
- (0, checkpoint_1.verifyCheckpoint)(entry, tlogs) &&
- verifyTLogIntegrationTime());
-}
-function signingCertificate(bundle) {
- if (!(0, bundle_1.isBundleWithCertificateChain)(bundle)) {
- return undefined;
- }
- const signingCert = bundle.verificationMaterial.content.x509CertificateChain.certificates[0];
- return cert_1.x509Certificate.parse(signingCert.rawBytes);
-}
diff --git a/deps/npm/node_modules/sigstore/dist/tlog/verify/set.js b/deps/npm/node_modules/sigstore/dist/tlog/verify/set.js
deleted file mode 100644
index 959cd5883f1cad..00000000000000
--- a/deps/npm/node_modules/sigstore/dist/tlog/verify/set.js
+++ /dev/null
@@ -1,64 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.verifyTLogSET = void 0;
-const util_1 = require("../../util");
-// Verifies the SET for the given entry against the list of trusted
-// transparency logs. Returns true if the SET can be verified against at least
-// one of the trusted logs; otherwise, returns false.
-function verifyTLogSET(entry, tlogs) {
- // Filter the list of tlog instances to only those which might be able to
- // verify the SET
- const validTLogs = filterTLogInstances(tlogs, entry.logId.keyId, entry.integratedTime);
- // Check to see if we can verify the SET against any of the valid tlogs
- return validTLogs.some((tlog) => {
- const publicKey = util_1.crypto.createPublicKey(tlog.publicKey.rawBytes);
- // Re-create the original Rekor verification payload
- const payload = toVerificationPayload(entry);
- // Canonicalize the payload and turn into a buffer for verification
- const data = Buffer.from(util_1.json.canonicalize(payload), 'utf8');
- // Extract the SET from the tlog entry
- const signature = entry.inclusionPromise.signedEntryTimestamp;
- return util_1.crypto.verifyBlob(data, publicKey, signature);
- });
-}
-exports.verifyTLogSET = verifyTLogSET;
-// Returns a properly formatted "VerificationPayload" for one of the
-// transaction log entires in the given bundle which can be used for SET
-// verification.
-function toVerificationPayload(entry) {
- const { integratedTime, logIndex, logId, canonicalizedBody } = entry;
- return {
- body: canonicalizedBody.toString('base64'),
- integratedTime: Number(integratedTime),
- logIndex: Number(logIndex),
- logID: logId.keyId.toString('hex'),
- };
-}
-// Filter the list of tlog instances to only those which match the given log
-// ID and have public keys which are valid for the given integrated time.
-function filterTLogInstances(tlogInstances, logID, integratedTime) {
- const targetDate = new Date(Number(integratedTime) * 1000);
- return tlogInstances.filter((tlog) => {
- // If the log IDs don't match, we can't use this tlog
- if (!tlog.logId?.keyId.equals(logID)) {
- return false;
- }
- // If the tlog doesn't have a public key, we can't use it
- const publicKey = tlog.publicKey;
- if (publicKey === undefined) {
- return false;
- }
- // If the tlog doesn't have a rawBytes field, we can't use it
- if (publicKey.rawBytes === undefined) {
- return false;
- }
- // If the tlog doesn't have a validFor field, we don't need to check it
- if (publicKey.validFor === undefined) {
- return true;
- }
- // Check that the integrated time is within the validFor range
- return (publicKey.validFor.start !== undefined &&
- publicKey.validFor.start <= targetDate &&
- (!publicKey.validFor.end || targetDate <= publicKey.validFor.end));
- });
-}
diff --git a/deps/npm/node_modules/sigstore/dist/types/sigstore.js b/deps/npm/node_modules/sigstore/dist/types/sigstore.js
deleted file mode 100644
index 36efb67e38a5eb..00000000000000
--- a/deps/npm/node_modules/sigstore/dist/types/sigstore.js
+++ /dev/null
@@ -1,27 +0,0 @@
-"use strict";
-/*
-Copyright 2023 The Sigstore 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.
-*/
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.isCAVerificationOptions = exports.SubjectAlternativeNameType = void 0;
-// Enums from protobuf-specs
-var protobuf_specs_1 = require("@sigstore/protobuf-specs");
-Object.defineProperty(exports, "SubjectAlternativeNameType", { enumerable: true, get: function () { return protobuf_specs_1.SubjectAlternativeNameType; } });
-function isCAVerificationOptions(options) {
- return (options.ctlogOptions !== undefined &&
- (options.signers === undefined ||
- options.signers.$case === 'certificateIdentities'));
-}
-exports.isCAVerificationOptions = isCAVerificationOptions;
diff --git a/deps/npm/node_modules/sigstore/dist/util/asn1/dump.js b/deps/npm/node_modules/sigstore/dist/util/asn1/dump.js
deleted file mode 100644
index b44605455ba00f..00000000000000
--- a/deps/npm/node_modules/sigstore/dist/util/asn1/dump.js
+++ /dev/null
@@ -1,97 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.dump = void 0;
-const tag_1 = require("./tag");
-// Utility function to dump the contents of an ASN1Obj to the console.
-function dump(obj, indent = 0) {
- let str = ' '.repeat(indent);
- str += tagToString(obj.tag) + ' ';
- if (obj.tag.isUniversal()) {
- switch (obj.tag.number) {
- case tag_1.UNIVERSAL_TAG.BOOLEAN:
- str += obj.toBoolean();
- break;
- case tag_1.UNIVERSAL_TAG.INTEGER:
- str += `(${obj.value.length} byte) `;
- str += obj.toInteger();
- break;
- case tag_1.UNIVERSAL_TAG.BIT_STRING: {
- const bits = obj.toBitString();
- str += `(${bits.length} bit) `;
- str += truncate(bits.map((bit) => bit.toString()).join(''));
- break;
- }
- case tag_1.UNIVERSAL_TAG.OBJECT_IDENTIFIER:
- str += obj.toOID();
- break;
- case tag_1.UNIVERSAL_TAG.SEQUENCE:
- case tag_1.UNIVERSAL_TAG.SET:
- str += `(${obj.subs.length} elem) `;
- break;
- case tag_1.UNIVERSAL_TAG.PRINTABLE_STRING:
- str += obj.value.toString('ascii');
- break;
- case tag_1.UNIVERSAL_TAG.UTC_TIME:
- case tag_1.UNIVERSAL_TAG.GENERALIZED_TIME:
- str += obj.toDate().toUTCString();
- break;
- default:
- str += `(${obj.value.length} byte) `;
- str += isASCII(obj.value)
- ? obj.value.toString('ascii')
- : truncate(obj.value.toString('hex').toUpperCase());
- }
- }
- else {
- if (obj.tag.constructed) {
- str += `(${obj.subs.length} elem) `;
- }
- else {
- str += `(${obj.value.length} byte) `;
- str += isASCII(obj.value)
- ? obj.value.toString('ascii')
- : obj.value.toString('hex').toUpperCase();
- }
- }
- console.log(str);
- // Recursive call for children
- obj.subs.forEach((sub) => dump(sub, indent + 2));
-}
-exports.dump = dump;
-function tagToString(tag) {
- if (tag.isContextSpecific()) {
- return `[${tag.number.toString(16)}]`;
- }
- else {
- switch (tag.number) {
- case tag_1.UNIVERSAL_TAG.BOOLEAN:
- return 'BOOLEAN';
- case tag_1.UNIVERSAL_TAG.INTEGER:
- return 'INTEGER';
- case tag_1.UNIVERSAL_TAG.BIT_STRING:
- return 'BIT STRING';
- case tag_1.UNIVERSAL_TAG.OCTET_STRING:
- return 'OCTET STRING';
- case tag_1.UNIVERSAL_TAG.OBJECT_IDENTIFIER:
- return 'OBJECT IDENTIFIER';
- case tag_1.UNIVERSAL_TAG.SEQUENCE:
- return 'SEQUENCE';
- case tag_1.UNIVERSAL_TAG.SET:
- return 'SET';
- case tag_1.UNIVERSAL_TAG.PRINTABLE_STRING:
- return 'PrintableString';
- case tag_1.UNIVERSAL_TAG.UTC_TIME:
- return 'UTCTime';
- case tag_1.UNIVERSAL_TAG.GENERALIZED_TIME:
- return 'GeneralizedTime';
- default:
- return tag.number.toString(16);
- }
- }
-}
-function isASCII(buf) {
- return buf.every((b) => b >= 32 && b <= 126);
-}
-function truncate(str) {
- return str.length > 70 ? str.substring(0, 69) + '...' : str;
-}
diff --git a/deps/npm/node_modules/sigstore/dist/util/dsse.js b/deps/npm/node_modules/sigstore/dist/util/dsse.js
deleted file mode 100644
index bba7baa6bbfb89..00000000000000
--- a/deps/npm/node_modules/sigstore/dist/util/dsse.js
+++ /dev/null
@@ -1,25 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.preAuthEncoding = void 0;
-/*
-Copyright 2022 The Sigstore 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.
-*/
-const PAE_PREFIX = 'DSSEv1';
-// DSSE Pre-Authentication Encoding
-function preAuthEncoding(payloadType, payload) {
- const prefix = Buffer.from(`${PAE_PREFIX} ${payloadType.length} ${payloadType} ${payload.length} `, 'ascii');
- return Buffer.concat([prefix, payload]);
-}
-exports.preAuthEncoding = preAuthEncoding;
diff --git a/deps/npm/node_modules/sigstore/dist/util/encoding.js b/deps/npm/node_modules/sigstore/dist/util/encoding.js
deleted file mode 100644
index 8674d779b61f98..00000000000000
--- a/deps/npm/node_modules/sigstore/dist/util/encoding.js
+++ /dev/null
@@ -1,46 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.base64URLUnescape = exports.base64URLEscape = exports.base64URLDecode = exports.base64URLEncode = exports.base64Decode = exports.base64Encode = void 0;
-/*
-Copyright 2022 The Sigstore 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.
-*/
-const BASE64_ENCODING = 'base64';
-const UTF8_ENCODING = 'utf-8';
-function base64Encode(str) {
- return Buffer.from(str, UTF8_ENCODING).toString(BASE64_ENCODING);
-}
-exports.base64Encode = base64Encode;
-function base64Decode(str) {
- return Buffer.from(str, BASE64_ENCODING).toString(UTF8_ENCODING);
-}
-exports.base64Decode = base64Decode;
-function base64URLEncode(str) {
- return base64URLEscape(base64Encode(str));
-}
-exports.base64URLEncode = base64URLEncode;
-function base64URLDecode(str) {
- return base64Decode(base64URLUnescape(str));
-}
-exports.base64URLDecode = base64URLDecode;
-function base64URLEscape(str) {
- return str.replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '');
-}
-exports.base64URLEscape = base64URLEscape;
-function base64URLUnescape(str) {
- // Repad the base64 string if necessary
- str += '='.repeat((4 - (str.length % 4)) % 4);
- return str.replace(/-/g, '+').replace(/_/g, '/');
-}
-exports.base64URLUnescape = base64URLUnescape;
diff --git a/deps/npm/node_modules/sigstore/dist/verify.js b/deps/npm/node_modules/sigstore/dist/verify.js
deleted file mode 100644
index a3dc4b307e4953..00000000000000
--- a/deps/npm/node_modules/sigstore/dist/verify.js
+++ /dev/null
@@ -1,160 +0,0 @@
-"use strict";
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- var desc = Object.getOwnPropertyDescriptor(m, k);
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
- desc = { enumerable: true, get: function() { return m[k]; } };
- }
- Object.defineProperty(o, k2, desc);
-}) : (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
- Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
- o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
- if (mod && mod.__esModule) return mod;
- var result = {};
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
- __setModuleDefault(result, mod);
- return result;
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.Verifier = void 0;
-/*
-Copyright 2023 The Sigstore 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.
-*/
-const bundle_1 = require("@sigstore/bundle");
-const ca = __importStar(require("./ca/verify"));
-const error_1 = require("./error");
-const tlog = __importStar(require("./tlog/verify"));
-const sigstore = __importStar(require("./types/sigstore"));
-const util_1 = require("./util");
-class Verifier {
- constructor(trustedRoot, keySelector) {
- this.trustedRoot = trustedRoot;
- this.keySelector = keySelector || (() => undefined);
- }
- // Verifies the bundle signature, the bundle's certificate chain (if present)
- // and the bundle's transparency log entries.
- verify(bundle, options, data) {
- this.verifyArtifactSignature(bundle, data);
- if ((0, bundle_1.isBundleWithCertificateChain)(bundle)) {
- this.verifySigningCertificate(bundle, options);
- }
- if (options.tlogOptions.disable === false) {
- this.verifyTLogEntries(bundle, options);
- }
- }
- // Performs bundle signature verification. Determines the type of the bundle
- // content and delegates to the appropriate signature verification function.
- verifyArtifactSignature(bundle, data) {
- const publicKey = this.getPublicKey(bundle);
- switch (bundle.content?.$case) {
- case 'messageSignature':
- if (!data) {
- throw new error_1.VerificationError('no data provided for message signature verification');
- }
- verifyMessageSignature(data, bundle.content.messageSignature, publicKey);
- break;
- case 'dsseEnvelope':
- verifyDSSESignature(bundle.content.dsseEnvelope, publicKey);
- break;
- }
- }
- // Performs verification of the bundle's certificate chain. The bundle must
- // contain a certificate chain and the options must contain the required
- // options for CA verification.
- // TODO: We've temporarily removed the requirement that the options contain
- // the list of trusted signer identities. This will be added back in a future
- // release.
- verifySigningCertificate(bundle, options) {
- if (!sigstore.isCAVerificationOptions(options)) {
- throw new error_1.VerificationError('no trusted certificates provided for verification');
- }
- ca.verifySigningCertificate(bundle, this.trustedRoot, options);
- }
- // Performs verification of the bundle's transparency log entries. The bundle
- // must contain a list of transparency log entries.
- verifyTLogEntries(bundle, options) {
- tlog.verifyTLogEntries(bundle, this.trustedRoot, options.tlogOptions);
- }
- // Returns the public key which will be used to verify the bundle signature.
- // The public key is selected based on the verification material in the bundle
- // and the options provided.
- getPublicKey(bundle) {
- // Select the key which will be used to verify the signature
- switch (bundle.verificationMaterial?.content?.$case) {
- // If the bundle contains a certificate chain, the public key is the
- // first certificate in the chain (the signing certificate)
- case 'x509CertificateChain':
- return getPublicKeyFromCertificateChain(bundle.verificationMaterial.content.x509CertificateChain);
- // If the bundle contains a public key hint, the public key is selected
- // from the list of trusted keys in the options
- case 'publicKey':
- return getPublicKeyFromHint(bundle.verificationMaterial.content.publicKey, this.keySelector);
- }
- }
-}
-exports.Verifier = Verifier;
-// Retrieves the public key from the first certificate in the certificate chain
-function getPublicKeyFromCertificateChain(certificateChain) {
- const cert = util_1.pem.fromDER(certificateChain.certificates[0].rawBytes);
- return util_1.crypto.createPublicKey(cert);
-}
-// Retrieves the public key through the key selector callback, passing the
-// public key hint from the bundle
-function getPublicKeyFromHint(publicKeyID, keySelector) {
- const key = keySelector(publicKeyID.hint);
- if (!key) {
- throw new error_1.VerificationError('no public key found for signature verification');
- }
- try {
- return util_1.crypto.createPublicKey(key);
- }
- catch (e) {
- throw new error_1.VerificationError('invalid public key');
- }
-}
-// Performs signature verification for bundle containing a message signature.
-// Verifies that the digest and signature found in the bundle match the
-// provided data.
-function verifyMessageSignature(data, messageSignature, publicKey) {
- // Extract signature for message
- const { signature, messageDigest } = messageSignature;
- const calculatedDigest = util_1.crypto.hash(data);
- if (!calculatedDigest.equals(messageDigest.digest)) {
- throw new error_1.VerificationError('message digest verification failed');
- }
- if (!util_1.crypto.verifyBlob(data, publicKey, signature)) {
- throw new error_1.VerificationError('artifact signature verification failed');
- }
-}
-// Performs signature verification for bundle containing a DSSE envelope.
-// Calculates the PAE for the DSSE envelope and verifies it against the
-// signature in the envelope.
-function verifyDSSESignature(envelope, publicKey) {
- // Construct payload over which the signature was originally created
- const { payloadType, payload } = envelope;
- const data = util_1.dsse.preAuthEncoding(payloadType, payload);
- // Only support a single signature in DSSE
- const signature = envelope.signatures[0].sig;
- if (!util_1.crypto.verifyBlob(data, publicKey, signature)) {
- throw new error_1.VerificationError('artifact signature verification failed');
- }
-}
diff --git a/deps/npm/node_modules/sigstore/package.json b/deps/npm/node_modules/sigstore/package.json
index daf50ba601884c..3dca00636b8d9d 100644
--- a/deps/npm/node_modules/sigstore/package.json
+++ b/deps/npm/node_modules/sigstore/package.json
@@ -1,6 +1,6 @@
{
"name": "sigstore",
- "version": "2.1.0",
+ "version": "2.2.2",
"description": "code-signing for npm packages",
"main": "dist/index.js",
"types": "dist/index.d.ts",
@@ -29,15 +29,17 @@
"devDependencies": {
"@sigstore/rekor-types": "^2.0.0",
"@sigstore/jest": "^0.0.0",
- "@sigstore/mock": "^0.4.0",
+ "@sigstore/mock": "^0.6.5",
"@tufjs/repo-mock": "^2.0.0",
- "@types/make-fetch-happen": "^10.0.0"
+ "@types/make-fetch-happen": "^10.0.4"
},
"dependencies": {
- "@sigstore/bundle": "^2.1.0",
- "@sigstore/protobuf-specs": "^0.2.1",
- "@sigstore/sign": "^2.1.0",
- "@sigstore/tuf": "^2.1.0"
+ "@sigstore/bundle": "^2.2.0",
+ "@sigstore/core": "^1.0.0",
+ "@sigstore/protobuf-specs": "^0.3.0",
+ "@sigstore/sign": "^2.2.3",
+ "@sigstore/tuf": "^2.3.1",
+ "@sigstore/verify": "^1.1.0"
},
"engines": {
"node": "^16.14.0 || >=18.0.0"
diff --git a/deps/npm/node_modules/socks/build/client/socksclient.js b/deps/npm/node_modules/socks/build/client/socksclient.js
index c3439169e3ad8b..09b1f55767aa72 100644
--- a/deps/npm/node_modules/socks/build/client/socksclient.js
+++ b/deps/npm/node_modules/socks/build/client/socksclient.js
@@ -12,13 +12,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
exports.SocksClientError = exports.SocksClient = void 0;
const events_1 = require("events");
const net = require("net");
-const ip = require("ip");
const smart_buffer_1 = require("smart-buffer");
const constants_1 = require("../common/constants");
const helpers_1 = require("../common/helpers");
const receivebuffer_1 = require("../common/receivebuffer");
const util_1 = require("../common/util");
Object.defineProperty(exports, "SocksClientError", { enumerable: true, get: function () { return util_1.SocksClientError; } });
+const ip_address_1 = require("ip-address");
class SocksClient extends events_1.EventEmitter {
constructor(options) {
super();
@@ -161,11 +161,11 @@ class SocksClient extends events_1.EventEmitter {
// IPv4/IPv6/Hostname
if (net.isIPv4(options.remoteHost.host)) {
buff.writeUInt8(constants_1.Socks5HostType.IPv4);
- buff.writeUInt32BE(ip.toLong(options.remoteHost.host));
+ buff.writeUInt32BE((0, helpers_1.ipv4ToInt32)(options.remoteHost.host));
}
else if (net.isIPv6(options.remoteHost.host)) {
buff.writeUInt8(constants_1.Socks5HostType.IPv6);
- buff.writeBuffer(ip.toBuffer(options.remoteHost.host));
+ buff.writeBuffer((0, helpers_1.ipToBuffer)(options.remoteHost.host));
}
else {
buff.writeUInt8(constants_1.Socks5HostType.Hostname);
@@ -189,10 +189,10 @@ class SocksClient extends events_1.EventEmitter {
const hostType = buff.readUInt8();
let remoteHost;
if (hostType === constants_1.Socks5HostType.IPv4) {
- remoteHost = ip.fromLong(buff.readUInt32BE());
+ remoteHost = (0, helpers_1.int32ToIpv4)(buff.readUInt32BE());
}
else if (hostType === constants_1.Socks5HostType.IPv6) {
- remoteHost = ip.toString(buff.readBuffer(16));
+ remoteHost = ip_address_1.Address6.fromByteArray(Array.from(buff.readBuffer(16))).canonicalForm();
}
else {
remoteHost = buff.readString(buff.readUInt8());
@@ -401,7 +401,7 @@ class SocksClient extends events_1.EventEmitter {
buff.writeUInt16BE(this.options.destination.port);
// Socks 4 (IPv4)
if (net.isIPv4(this.options.destination.host)) {
- buff.writeBuffer(ip.toBuffer(this.options.destination.host));
+ buff.writeBuffer((0, helpers_1.ipToBuffer)(this.options.destination.host));
buff.writeStringNT(userId);
// Socks 4a (hostname)
}
@@ -433,7 +433,7 @@ class SocksClient extends events_1.EventEmitter {
buff.readOffset = 2;
const remoteHost = {
port: buff.readUInt16BE(),
- host: ip.fromLong(buff.readUInt32BE()),
+ host: (0, helpers_1.int32ToIpv4)(buff.readUInt32BE()),
};
// If host is 0.0.0.0, set to proxy host.
if (remoteHost.host === '0.0.0.0') {
@@ -464,7 +464,7 @@ class SocksClient extends events_1.EventEmitter {
buff.readOffset = 2;
const remoteHost = {
port: buff.readUInt16BE(),
- host: ip.fromLong(buff.readUInt32BE()),
+ host: (0, helpers_1.int32ToIpv4)(buff.readUInt32BE()),
};
this.setState(constants_1.SocksClientState.Established);
this.removeInternalSocketHandlers();
@@ -610,11 +610,11 @@ class SocksClient extends events_1.EventEmitter {
// ipv4, ipv6, domain?
if (net.isIPv4(this.options.destination.host)) {
buff.writeUInt8(constants_1.Socks5HostType.IPv4);
- buff.writeBuffer(ip.toBuffer(this.options.destination.host));
+ buff.writeBuffer((0, helpers_1.ipToBuffer)(this.options.destination.host));
}
else if (net.isIPv6(this.options.destination.host)) {
buff.writeUInt8(constants_1.Socks5HostType.IPv6);
- buff.writeBuffer(ip.toBuffer(this.options.destination.host));
+ buff.writeBuffer((0, helpers_1.ipToBuffer)(this.options.destination.host));
}
else {
buff.writeUInt8(constants_1.Socks5HostType.Hostname);
@@ -652,7 +652,7 @@ class SocksClient extends events_1.EventEmitter {
}
buff = smart_buffer_1.SmartBuffer.fromBuffer(this.receiveBuffer.get(dataNeeded).slice(4));
remoteHost = {
- host: ip.fromLong(buff.readUInt32BE()),
+ host: (0, helpers_1.int32ToIpv4)(buff.readUInt32BE()),
port: buff.readUInt16BE(),
};
// If given host is 0.0.0.0, assume remote proxy ip instead.
@@ -685,7 +685,7 @@ class SocksClient extends events_1.EventEmitter {
}
buff = smart_buffer_1.SmartBuffer.fromBuffer(this.receiveBuffer.get(dataNeeded).slice(4));
remoteHost = {
- host: ip.toString(buff.readBuffer(16)),
+ host: ip_address_1.Address6.fromByteArray(Array.from(buff.readBuffer(16))).canonicalForm(),
port: buff.readUInt16BE(),
};
}
@@ -743,7 +743,7 @@ class SocksClient extends events_1.EventEmitter {
}
buff = smart_buffer_1.SmartBuffer.fromBuffer(this.receiveBuffer.get(dataNeeded).slice(4));
remoteHost = {
- host: ip.fromLong(buff.readUInt32BE()),
+ host: (0, helpers_1.int32ToIpv4)(buff.readUInt32BE()),
port: buff.readUInt16BE(),
};
// If given host is 0.0.0.0, assume remote proxy ip instead.
@@ -776,7 +776,7 @@ class SocksClient extends events_1.EventEmitter {
}
buff = smart_buffer_1.SmartBuffer.fromBuffer(this.receiveBuffer.get(dataNeeded).slice(4));
remoteHost = {
- host: ip.toString(buff.readBuffer(16)),
+ host: ip_address_1.Address6.fromByteArray(Array.from(buff.readBuffer(16))).canonicalForm(),
port: buff.readUInt16BE(),
};
}
diff --git a/deps/npm/node_modules/socks/build/common/constants.js b/deps/npm/node_modules/socks/build/common/constants.js
index 3c9ff90ac9feb4..aaf16418fe941b 100644
--- a/deps/npm/node_modules/socks/build/common/constants.js
+++ b/deps/npm/node_modules/socks/build/common/constants.js
@@ -38,10 +38,10 @@ const SOCKS_INCOMING_PACKET_SIZES = {
Socks5InitialHandshakeResponse: 2,
Socks5UserPassAuthenticationResponse: 2,
// Command response + incoming connection (bind)
- Socks5ResponseHeader: 5,
- Socks5ResponseIPv4: 10,
- Socks5ResponseIPv6: 22,
- Socks5ResponseHostname: (hostNameLength) => hostNameLength + 7,
+ Socks5ResponseHeader: 5, // We need at least 5 to read the hostname length, then we wait for the address+port information.
+ Socks5ResponseIPv4: 10, // 4 header + 4 ip + 2 port
+ Socks5ResponseIPv6: 22, // 4 header + 16 ip + 2 port
+ Socks5ResponseHostname: (hostNameLength) => hostNameLength + 7, // 4 header + 1 host length + host + 2 port
// Command response + incoming connection (bind)
Socks4Response: 8, // 2 header + 2 port + 4 ip
};
@@ -51,23 +51,20 @@ var SocksCommand;
SocksCommand[SocksCommand["connect"] = 1] = "connect";
SocksCommand[SocksCommand["bind"] = 2] = "bind";
SocksCommand[SocksCommand["associate"] = 3] = "associate";
-})(SocksCommand || (SocksCommand = {}));
-exports.SocksCommand = SocksCommand;
+})(SocksCommand || (exports.SocksCommand = SocksCommand = {}));
var Socks4Response;
(function (Socks4Response) {
Socks4Response[Socks4Response["Granted"] = 90] = "Granted";
Socks4Response[Socks4Response["Failed"] = 91] = "Failed";
Socks4Response[Socks4Response["Rejected"] = 92] = "Rejected";
Socks4Response[Socks4Response["RejectedIdent"] = 93] = "RejectedIdent";
-})(Socks4Response || (Socks4Response = {}));
-exports.Socks4Response = Socks4Response;
+})(Socks4Response || (exports.Socks4Response = Socks4Response = {}));
var Socks5Auth;
(function (Socks5Auth) {
Socks5Auth[Socks5Auth["NoAuth"] = 0] = "NoAuth";
Socks5Auth[Socks5Auth["GSSApi"] = 1] = "GSSApi";
Socks5Auth[Socks5Auth["UserPass"] = 2] = "UserPass";
-})(Socks5Auth || (Socks5Auth = {}));
-exports.Socks5Auth = Socks5Auth;
+})(Socks5Auth || (exports.Socks5Auth = Socks5Auth = {}));
const SOCKS5_CUSTOM_AUTH_START = 0x80;
exports.SOCKS5_CUSTOM_AUTH_START = SOCKS5_CUSTOM_AUTH_START;
const SOCKS5_CUSTOM_AUTH_END = 0xfe;
@@ -85,15 +82,13 @@ var Socks5Response;
Socks5Response[Socks5Response["TTLExpired"] = 6] = "TTLExpired";
Socks5Response[Socks5Response["CommandNotSupported"] = 7] = "CommandNotSupported";
Socks5Response[Socks5Response["AddressNotSupported"] = 8] = "AddressNotSupported";
-})(Socks5Response || (Socks5Response = {}));
-exports.Socks5Response = Socks5Response;
+})(Socks5Response || (exports.Socks5Response = Socks5Response = {}));
var Socks5HostType;
(function (Socks5HostType) {
Socks5HostType[Socks5HostType["IPv4"] = 1] = "IPv4";
Socks5HostType[Socks5HostType["Hostname"] = 3] = "Hostname";
Socks5HostType[Socks5HostType["IPv6"] = 4] = "IPv6";
-})(Socks5HostType || (Socks5HostType = {}));
-exports.Socks5HostType = Socks5HostType;
+})(Socks5HostType || (exports.Socks5HostType = Socks5HostType = {}));
var SocksClientState;
(function (SocksClientState) {
SocksClientState[SocksClientState["Created"] = 0] = "Created";
@@ -109,6 +104,5 @@ var SocksClientState;
SocksClientState[SocksClientState["Established"] = 10] = "Established";
SocksClientState[SocksClientState["Disconnected"] = 11] = "Disconnected";
SocksClientState[SocksClientState["Error"] = 99] = "Error";
-})(SocksClientState || (SocksClientState = {}));
-exports.SocksClientState = SocksClientState;
+})(SocksClientState || (exports.SocksClientState = SocksClientState = {}));
//# sourceMappingURL=constants.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/socks/build/common/helpers.js b/deps/npm/node_modules/socks/build/common/helpers.js
index f84db8f6729d6c..65bd95bdc62215 100644
--- a/deps/npm/node_modules/socks/build/common/helpers.js
+++ b/deps/npm/node_modules/socks/build/common/helpers.js
@@ -1,9 +1,11 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
-exports.validateSocksClientChainOptions = exports.validateSocksClientOptions = void 0;
+exports.ipToBuffer = exports.int32ToIpv4 = exports.ipv4ToInt32 = exports.validateSocksClientChainOptions = exports.validateSocksClientOptions = void 0;
const util_1 = require("./util");
const constants_1 = require("./constants");
const stream = require("stream");
+const ip_address_1 = require("ip-address");
+const net = require("net");
/**
* Validates the provided SocksClientOptions
* @param options { SocksClientOptions }
@@ -125,4 +127,36 @@ function isValidSocksProxy(proxy) {
function isValidTimeoutValue(value) {
return typeof value === 'number' && value > 0;
}
+function ipv4ToInt32(ip) {
+ const address = new ip_address_1.Address4(ip);
+ // Convert the IPv4 address parts to an integer
+ return address.toArray().reduce((acc, part) => (acc << 8) + part, 0);
+}
+exports.ipv4ToInt32 = ipv4ToInt32;
+function int32ToIpv4(int32) {
+ // Extract each byte (octet) from the 32-bit integer
+ const octet1 = (int32 >>> 24) & 0xff;
+ const octet2 = (int32 >>> 16) & 0xff;
+ const octet3 = (int32 >>> 8) & 0xff;
+ const octet4 = int32 & 0xff;
+ // Combine the octets into a string in IPv4 format
+ return [octet1, octet2, octet3, octet4].join('.');
+}
+exports.int32ToIpv4 = int32ToIpv4;
+function ipToBuffer(ip) {
+ if (net.isIPv4(ip)) {
+ // Handle IPv4 addresses
+ const address = new ip_address_1.Address4(ip);
+ return Buffer.from(address.toArray());
+ }
+ else if (net.isIPv6(ip)) {
+ // Handle IPv6 addresses
+ const address = new ip_address_1.Address6(ip);
+ return Buffer.from(address.toByteArray());
+ }
+ else {
+ throw new Error('Invalid IP address format');
+ }
+}
+exports.ipToBuffer = ipToBuffer;
//# sourceMappingURL=helpers.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/socks/package.json b/deps/npm/node_modules/socks/package.json
index 0f5054b91ee039..dbda909fd0787c 100644
--- a/deps/npm/node_modules/socks/package.json
+++ b/deps/npm/node_modules/socks/package.json
@@ -1,7 +1,7 @@
{
"name": "socks",
"private": false,
- "version": "2.7.1",
+ "version": "2.8.0",
"description": "Fully featured SOCKS proxy client supporting SOCKSv4, SOCKSv4a, and SOCKSv5. Includes Bind and Associate functionality.",
"main": "build/index.js",
"typings": "typings/index.d.ts",
@@ -23,7 +23,7 @@
"socks5"
],
"engines": {
- "node": ">= 10.13.0",
+ "node": ">= 16.0.0",
"npm": ">= 3.0.0"
},
"author": "Josh Glazebrook",
@@ -33,19 +33,18 @@
"license": "MIT",
"readmeFilename": "README.md",
"devDependencies": {
- "@types/ip": "1.1.0",
- "@types/mocha": "^9.1.1",
- "@types/node": "^18.0.6",
- "@typescript-eslint/eslint-plugin": "^5.30.6",
- "@typescript-eslint/parser": "^5.30.6",
+ "@types/mocha": "^10.0.6",
+ "@types/node": "^20.11.17",
+ "@typescript-eslint/eslint-plugin": "^6.21.0",
+ "@typescript-eslint/parser": "^6.21.0",
"eslint": "^8.20.0",
"mocha": "^10.0.0",
- "prettier": "^2.7.1",
+ "prettier": "^3.2.5",
"ts-node": "^10.9.1",
- "typescript": "^4.7.4"
+ "typescript": "^5.3.3"
},
"dependencies": {
- "ip": "^2.0.0",
+ "ip-address": "^9.0.5",
"smart-buffer": "^4.2.0"
},
"scripts": {
diff --git a/deps/npm/node_modules/spdx-exceptions/deprecated.json b/deps/npm/node_modules/spdx-exceptions/deprecated.json
new file mode 100644
index 00000000000000..cba7e2badb14e6
--- /dev/null
+++ b/deps/npm/node_modules/spdx-exceptions/deprecated.json
@@ -0,0 +1,3 @@
+[
+ "Nokia-Qt-exception-1.1"
+]
diff --git a/deps/npm/node_modules/spdx-exceptions/index.json b/deps/npm/node_modules/spdx-exceptions/index.json
index f88f088ab2fa16..d9549d3e40e4e6 100644
--- a/deps/npm/node_modules/spdx-exceptions/index.json
+++ b/deps/npm/node_modules/spdx-exceptions/index.json
@@ -1,40 +1,68 @@
[
"389-exception",
+ "Asterisk-exception",
"Autoconf-exception-2.0",
"Autoconf-exception-3.0",
+ "Autoconf-exception-generic",
+ "Autoconf-exception-generic-3.0",
+ "Autoconf-exception-macro",
+ "Bison-exception-1.24",
"Bison-exception-2.2",
"Bootloader-exception",
"Classpath-exception-2.0",
"CLISP-exception-2.0",
+ "cryptsetup-OpenSSL-exception",
"DigiRule-FOSS-exception",
"eCos-exception-2.0",
"Fawkes-Runtime-exception",
"FLTK-exception",
+ "fmt-exception",
"Font-exception-2.0",
"freertos-exception-2.0",
"GCC-exception-2.0",
+ "GCC-exception-2.0-note",
"GCC-exception-3.1",
+ "Gmsh-exception",
+ "GNAT-exception",
+ "GNOME-examples-exception",
+ "GNU-compiler-exception",
"gnu-javamail-exception",
+ "GPL-3.0-interface-exception",
"GPL-3.0-linking-exception",
"GPL-3.0-linking-source-exception",
"GPL-CC-1.0",
+ "GStreamer-exception-2005",
+ "GStreamer-exception-2008",
"i2p-gpl-java-exception",
+ "KiCad-libraries-exception",
+ "LGPL-3.0-linking-exception",
+ "libpri-OpenH323-exception",
"Libtool-exception",
"Linux-syscall-note",
+ "LLGPL",
"LLVM-exception",
"LZMA-exception",
"mif-exception",
- "Nokia-Qt-exception-1.1",
"OCaml-LGPL-linking-exception",
"OCCT-exception-1.0",
"OpenJDK-assembly-exception-1.0",
"openvpn-openssl-exception",
"PS-or-PDF-font-exception-20170817",
+ "QPL-1.0-INRIA-2004-exception",
"Qt-GPL-exception-1.0",
"Qt-LGPL-exception-1.1",
"Qwt-exception-1.0",
+ "SANE-exception",
+ "SHL-2.0",
+ "SHL-2.1",
+ "stunnel-exception",
+ "SWI-exception",
"Swift-exception",
+ "Texinfo-exception",
"u-boot-exception-2.0",
+ "UBDL-exception",
"Universal-FOSS-exception-1.0",
- "WxWindows-exception-3.1"
+ "vsftpd-openssl-exception",
+ "WxWindows-exception-3.1",
+ "x11vnc-openssl-exception"
]
diff --git a/deps/npm/node_modules/spdx-exceptions/package.json b/deps/npm/node_modules/spdx-exceptions/package.json
index 2bafc6a38b2431..2f9a9504b2cac8 100644
--- a/deps/npm/node_modules/spdx-exceptions/package.json
+++ b/deps/npm/node_modules/spdx-exceptions/package.json
@@ -1,7 +1,7 @@
{
"name": "spdx-exceptions",
"description": "list of SPDX standard license exceptions",
- "version": "2.3.0",
+ "version": "2.5.0",
"author": "The Linux Foundation",
"contributors": [
"Kyle E. Mitchell (https://kemitchell.com/)"
@@ -9,9 +9,11 @@
"license": "CC-BY-3.0",
"repository": "kemitchell/spdx-exceptions.json",
"files": [
- "index.json"
+ "index.json",
+ "deprecated.json"
],
"scripts": {
- "build": "node build.js"
+ "build": "node build.js",
+ "latest": "node latest.js"
}
}
diff --git a/deps/npm/node_modules/spdx-license-ids/index.json b/deps/npm/node_modules/spdx-license-ids/index.json
index a7b98b24b6273e..7cc52df7dac860 100644
--- a/deps/npm/node_modules/spdx-license-ids/index.json
+++ b/deps/npm/node_modules/spdx-license-ids/index.json
@@ -13,6 +13,7 @@
"AGPL-3.0-or-later",
"AMDPLPA",
"AML",
+ "AML-glslang",
"AMPAS",
"ANTLR-PD",
"ANTLR-PD-fallback",
@@ -27,6 +28,7 @@
"Abstyles",
"AdaCore-doc",
"Adobe-2006",
+ "Adobe-Display-PostScript",
"Adobe-Glyph",
"Adobe-Utopia",
"Afmparse",
@@ -42,6 +44,7 @@
"Artistic-2.0",
"BSD-1-Clause",
"BSD-2-Clause",
+ "BSD-2-Clause-Darwin",
"BSD-2-Clause-Patent",
"BSD-2-Clause-Views",
"BSD-3-Clause",
@@ -56,6 +59,7 @@
"BSD-3-Clause-No-Nuclear-Warranty",
"BSD-3-Clause-Open-MPI",
"BSD-3-Clause-Sun",
+ "BSD-3-Clause-acpica",
"BSD-3-Clause-flex",
"BSD-4-Clause",
"BSD-4-Clause-Shortened",
@@ -67,7 +71,9 @@
"BSD-Inferno-Nettverk",
"BSD-Protection",
"BSD-Source-Code",
+ "BSD-Source-beginning-file",
"BSD-Systemics",
+ "BSD-Systemics-W3Works",
"BSL-1.0",
"BUSL-1.1",
"Baekmuk",
@@ -81,6 +87,7 @@
"BlueOak-1.0.0",
"Boehm-GC",
"Borceux",
+ "Brian-Gladman-2-Clause",
"Brian-Gladman-3-Clause",
"C-UDA-1.0",
"CAL-1.0",
@@ -92,6 +99,7 @@
"CC-BY-2.5-AU",
"CC-BY-3.0",
"CC-BY-3.0-AT",
+ "CC-BY-3.0-AU",
"CC-BY-3.0-DE",
"CC-BY-3.0-IGO",
"CC-BY-3.0-NL",
@@ -157,6 +165,7 @@
"CERN-OHL-W-2.0",
"CFITSIO",
"CMU-Mach",
+ "CMU-Mach-nodoc",
"CNRI-Jython",
"CNRI-Python",
"CNRI-Python-GPL-Compatible",
@@ -166,6 +175,7 @@
"CPOL-1.02",
"CUA-OPL-1.0",
"Caldera",
+ "Caldera-no-preamble",
"ClArtistic",
"Clips",
"Community-Spec-1.0",
@@ -176,10 +186,12 @@
"CrystalStacker",
"Cube",
"D-FSL-1.0",
+ "DEC-3-Clause",
"DL-DE-BY-2.0",
"DL-DE-ZERO-2.0",
"DOC",
"DRL-1.0",
+ "DRL-1.1",
"DSDP",
"Dotseqn",
"ECL-1.0",
@@ -200,6 +212,7 @@
"FBM",
"FDK-AAC",
"FSFAP",
+ "FSFAP-no-warranty-disclaimer",
"FSFUL",
"FSFULLR",
"FSFULLRWD",
@@ -210,6 +223,7 @@
"FreeBSD-DOC",
"FreeImage",
"Furuseth",
+ "GCR-docs",
"GD",
"GFDL-1.1-invariants-only",
"GFDL-1.1-invariants-or-later",
@@ -245,6 +259,10 @@
"HP-1989",
"HPND",
"HPND-DEC",
+ "HPND-Fenneberg-Livingston",
+ "HPND-INRIA-IMAG",
+ "HPND-Kevlin-Henney",
+ "HPND-MIT-disclaimer",
"HPND-Markus-Kuhn",
"HPND-Pbmplus",
"HPND-UC",
@@ -252,6 +270,7 @@
"HPND-doc-sell",
"HPND-export-US",
"HPND-export-US-modify",
+ "HPND-sell-MIT-disclaimer-xserver",
"HPND-sell-regexpr",
"HPND-sell-variant",
"HPND-sell-variant-MIT-disclaimer",
@@ -266,6 +285,7 @@
"IPA",
"IPL-1.0",
"ISC",
+ "ISC-Veillard",
"ImageMagick",
"Imlib2",
"Info-ZIP",
@@ -291,6 +311,7 @@
"LGPL-3.0-or-later",
"LGPLLR",
"LOOP",
+ "LPD-document",
"LPL-1.0",
"LPL-1.02",
"LPPL-1.0",
@@ -335,6 +356,8 @@
"MS-PL",
"MS-RL",
"MTLL",
+ "Mackerras-3-Clause",
+ "Mackerras-3-Clause-acknowledgment",
"MakeIndex",
"Martin-Birgmeier",
"McPhee-slideshow",
@@ -419,6 +442,8 @@
"OSL-3.0",
"OpenPBS-2.3",
"OpenSSL",
+ "OpenSSL-standalone",
+ "OpenVision",
"PADL",
"PDDL-1.0",
"PHP-3.0",
@@ -426,6 +451,7 @@
"PSF-2.0",
"Parity-6.0.0",
"Parity-7.0.0",
+ "Pixar",
"Plexus",
"PolyForm-Noncommercial-1.0.0",
"PolyForm-Small-Business-1.0.0",
@@ -444,6 +470,7 @@
"Rdisc",
"Ruby",
"SAX-PD",
+ "SAX-PD-2.0",
"SCEA",
"SGI-B-1.0",
"SGI-B-1.1",
@@ -461,6 +488,7 @@
"SPL-1.0",
"SSH-OpenSSH",
"SSH-short",
+ "SSLeay-standalone",
"SSPL-1.0",
"SWL",
"Saxpath",
@@ -474,11 +502,13 @@
"Spencer-94",
"Spencer-99",
"SugarCRM-1.1.3",
+ "Sun-PPP",
"SunPro",
"Symlinks",
"TAPR-OHL-1.0",
"TCL",
"TCP-wrappers",
+ "TGPPL-1.0",
"TMate",
"TORQUE-1.1",
"TOSL",
@@ -491,8 +521,10 @@
"TermReadKey",
"UCAR",
"UCL-1.0",
+ "UMich-Merit",
"UPL-1.0",
"URT-RLE",
+ "Unicode-3.0",
"Unicode-DFS-2015",
"Unicode-DFS-2016",
"Unicode-TOU",
@@ -527,6 +559,7 @@
"Zimbra-1.3",
"Zimbra-1.4",
"Zlib",
+ "bcrypt-Solar-Designer",
"blessing",
"bzip2-1.0.6",
"check-cvs",
@@ -542,6 +575,8 @@
"fwlw",
"gSOAP-1.3b",
"gnuplot",
+ "gtkbook",
+ "hdparm",
"iMatix",
"libpng-2.0",
"libselinux-1.0",
@@ -549,6 +584,7 @@
"libutil-David-Nugent",
"lsof",
"magaz",
+ "mailprio",
"metamail",
"mpi-permissive",
"mpich2",
@@ -557,12 +593,15 @@
"psfrag",
"psutils",
"python-ldap",
+ "radvd",
"snprintf",
+ "softSurfer",
"ssh-keyscan",
"swrule",
"ulem",
"w3m",
"xinetd",
+ "xkeyboard-config-Zinoviev",
"xlock",
"xpp",
"zlib-acknowledgement"
diff --git a/deps/npm/node_modules/spdx-license-ids/package.json b/deps/npm/node_modules/spdx-license-ids/package.json
index 196b02705769a9..441f6ea38236c2 100644
--- a/deps/npm/node_modules/spdx-license-ids/package.json
+++ b/deps/npm/node_modules/spdx-license-ids/package.json
@@ -1,6 +1,6 @@
{
"name": "spdx-license-ids",
- "version": "3.0.16",
+ "version": "3.0.17",
"description": "A list of SPDX license identifiers",
"repository": "jslicense/spdx-license-ids",
"author": "Shinnosuke Watanabe (https://github.com/shinnn)",
diff --git a/deps/npm/node_modules/string-width-cjs/node_modules/ansi-regex/index.js b/deps/npm/node_modules/string-width-cjs/node_modules/ansi-regex/index.js
deleted file mode 100644
index 616ff837d3ff01..00000000000000
--- a/deps/npm/node_modules/string-width-cjs/node_modules/ansi-regex/index.js
+++ /dev/null
@@ -1,10 +0,0 @@
-'use strict';
-
-module.exports = ({onlyFirst = false} = {}) => {
- const pattern = [
- '[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)',
- '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))'
- ].join('|');
-
- return new RegExp(pattern, onlyFirst ? undefined : 'g');
-};
diff --git a/deps/npm/node_modules/string-width-cjs/node_modules/ansi-regex/license b/deps/npm/node_modules/string-width-cjs/node_modules/ansi-regex/license
deleted file mode 100644
index e7af2f77107d73..00000000000000
--- a/deps/npm/node_modules/string-width-cjs/node_modules/ansi-regex/license
+++ /dev/null
@@ -1,9 +0,0 @@
-MIT License
-
-Copyright (c) Sindre Sorhus (sindresorhus.com)
-
-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/deps/npm/node_modules/string-width-cjs/node_modules/ansi-regex/package.json b/deps/npm/node_modules/string-width-cjs/node_modules/ansi-regex/package.json
deleted file mode 100644
index 017f53116a9e28..00000000000000
--- a/deps/npm/node_modules/string-width-cjs/node_modules/ansi-regex/package.json
+++ /dev/null
@@ -1,55 +0,0 @@
-{
- "name": "ansi-regex",
- "version": "5.0.1",
- "description": "Regular expression for matching ANSI escape codes",
- "license": "MIT",
- "repository": "chalk/ansi-regex",
- "author": {
- "name": "Sindre Sorhus",
- "email": "sindresorhus@gmail.com",
- "url": "sindresorhus.com"
- },
- "engines": {
- "node": ">=8"
- },
- "scripts": {
- "test": "xo && ava && tsd",
- "view-supported": "node fixtures/view-codes.js"
- },
- "files": [
- "index.js",
- "index.d.ts"
- ],
- "keywords": [
- "ansi",
- "styles",
- "color",
- "colour",
- "colors",
- "terminal",
- "console",
- "cli",
- "string",
- "tty",
- "escape",
- "formatting",
- "rgb",
- "256",
- "shell",
- "xterm",
- "command-line",
- "text",
- "regex",
- "regexp",
- "re",
- "match",
- "test",
- "find",
- "pattern"
- ],
- "devDependencies": {
- "ava": "^2.4.0",
- "tsd": "^0.9.0",
- "xo": "^0.25.3"
- }
-}
diff --git a/deps/npm/node_modules/string-width-cjs/node_modules/strip-ansi/index.js b/deps/npm/node_modules/string-width-cjs/node_modules/strip-ansi/index.js
deleted file mode 100644
index 9a593dfcd1fd5c..00000000000000
--- a/deps/npm/node_modules/string-width-cjs/node_modules/strip-ansi/index.js
+++ /dev/null
@@ -1,4 +0,0 @@
-'use strict';
-const ansiRegex = require('ansi-regex');
-
-module.exports = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string;
diff --git a/deps/npm/node_modules/string-width-cjs/node_modules/strip-ansi/license b/deps/npm/node_modules/string-width-cjs/node_modules/strip-ansi/license
deleted file mode 100644
index e7af2f77107d73..00000000000000
--- a/deps/npm/node_modules/string-width-cjs/node_modules/strip-ansi/license
+++ /dev/null
@@ -1,9 +0,0 @@
-MIT License
-
-Copyright (c) Sindre Sorhus (sindresorhus.com)
-
-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/deps/npm/node_modules/string-width-cjs/node_modules/strip-ansi/package.json b/deps/npm/node_modules/string-width-cjs/node_modules/strip-ansi/package.json
deleted file mode 100644
index 1a41108d42831c..00000000000000
--- a/deps/npm/node_modules/string-width-cjs/node_modules/strip-ansi/package.json
+++ /dev/null
@@ -1,54 +0,0 @@
-{
- "name": "strip-ansi",
- "version": "6.0.1",
- "description": "Strip ANSI escape codes from a string",
- "license": "MIT",
- "repository": "chalk/strip-ansi",
- "author": {
- "name": "Sindre Sorhus",
- "email": "sindresorhus@gmail.com",
- "url": "sindresorhus.com"
- },
- "engines": {
- "node": ">=8"
- },
- "scripts": {
- "test": "xo && ava && tsd"
- },
- "files": [
- "index.js",
- "index.d.ts"
- ],
- "keywords": [
- "strip",
- "trim",
- "remove",
- "ansi",
- "styles",
- "color",
- "colour",
- "colors",
- "terminal",
- "console",
- "string",
- "tty",
- "escape",
- "formatting",
- "rgb",
- "256",
- "shell",
- "xterm",
- "log",
- "logging",
- "command-line",
- "text"
- ],
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "devDependencies": {
- "ava": "^2.4.0",
- "tsd": "^0.10.0",
- "xo": "^0.25.3"
- }
-}
diff --git a/deps/npm/node_modules/string-width/node_modules/ansi-regex/index.js b/deps/npm/node_modules/string-width/node_modules/ansi-regex/index.js
deleted file mode 100644
index 616ff837d3ff01..00000000000000
--- a/deps/npm/node_modules/string-width/node_modules/ansi-regex/index.js
+++ /dev/null
@@ -1,10 +0,0 @@
-'use strict';
-
-module.exports = ({onlyFirst = false} = {}) => {
- const pattern = [
- '[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)',
- '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))'
- ].join('|');
-
- return new RegExp(pattern, onlyFirst ? undefined : 'g');
-};
diff --git a/deps/npm/node_modules/string-width/node_modules/ansi-regex/license b/deps/npm/node_modules/string-width/node_modules/ansi-regex/license
deleted file mode 100644
index e7af2f77107d73..00000000000000
--- a/deps/npm/node_modules/string-width/node_modules/ansi-regex/license
+++ /dev/null
@@ -1,9 +0,0 @@
-MIT License
-
-Copyright (c) Sindre Sorhus (sindresorhus.com)
-
-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/deps/npm/node_modules/string-width/node_modules/ansi-regex/package.json b/deps/npm/node_modules/string-width/node_modules/ansi-regex/package.json
deleted file mode 100644
index 017f53116a9e28..00000000000000
--- a/deps/npm/node_modules/string-width/node_modules/ansi-regex/package.json
+++ /dev/null
@@ -1,55 +0,0 @@
-{
- "name": "ansi-regex",
- "version": "5.0.1",
- "description": "Regular expression for matching ANSI escape codes",
- "license": "MIT",
- "repository": "chalk/ansi-regex",
- "author": {
- "name": "Sindre Sorhus",
- "email": "sindresorhus@gmail.com",
- "url": "sindresorhus.com"
- },
- "engines": {
- "node": ">=8"
- },
- "scripts": {
- "test": "xo && ava && tsd",
- "view-supported": "node fixtures/view-codes.js"
- },
- "files": [
- "index.js",
- "index.d.ts"
- ],
- "keywords": [
- "ansi",
- "styles",
- "color",
- "colour",
- "colors",
- "terminal",
- "console",
- "cli",
- "string",
- "tty",
- "escape",
- "formatting",
- "rgb",
- "256",
- "shell",
- "xterm",
- "command-line",
- "text",
- "regex",
- "regexp",
- "re",
- "match",
- "test",
- "find",
- "pattern"
- ],
- "devDependencies": {
- "ava": "^2.4.0",
- "tsd": "^0.9.0",
- "xo": "^0.25.3"
- }
-}
diff --git a/deps/npm/node_modules/string-width/node_modules/strip-ansi/index.js b/deps/npm/node_modules/string-width/node_modules/strip-ansi/index.js
deleted file mode 100644
index 9a593dfcd1fd5c..00000000000000
--- a/deps/npm/node_modules/string-width/node_modules/strip-ansi/index.js
+++ /dev/null
@@ -1,4 +0,0 @@
-'use strict';
-const ansiRegex = require('ansi-regex');
-
-module.exports = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string;
diff --git a/deps/npm/node_modules/string-width/node_modules/strip-ansi/license b/deps/npm/node_modules/string-width/node_modules/strip-ansi/license
deleted file mode 100644
index e7af2f77107d73..00000000000000
--- a/deps/npm/node_modules/string-width/node_modules/strip-ansi/license
+++ /dev/null
@@ -1,9 +0,0 @@
-MIT License
-
-Copyright (c) Sindre Sorhus (sindresorhus.com)
-
-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/deps/npm/node_modules/string-width/node_modules/strip-ansi/package.json b/deps/npm/node_modules/string-width/node_modules/strip-ansi/package.json
deleted file mode 100644
index 1a41108d42831c..00000000000000
--- a/deps/npm/node_modules/string-width/node_modules/strip-ansi/package.json
+++ /dev/null
@@ -1,54 +0,0 @@
-{
- "name": "strip-ansi",
- "version": "6.0.1",
- "description": "Strip ANSI escape codes from a string",
- "license": "MIT",
- "repository": "chalk/strip-ansi",
- "author": {
- "name": "Sindre Sorhus",
- "email": "sindresorhus@gmail.com",
- "url": "sindresorhus.com"
- },
- "engines": {
- "node": ">=8"
- },
- "scripts": {
- "test": "xo && ava && tsd"
- },
- "files": [
- "index.js",
- "index.d.ts"
- ],
- "keywords": [
- "strip",
- "trim",
- "remove",
- "ansi",
- "styles",
- "color",
- "colour",
- "colors",
- "terminal",
- "console",
- "string",
- "tty",
- "escape",
- "formatting",
- "rgb",
- "256",
- "shell",
- "xterm",
- "log",
- "logging",
- "command-line",
- "text"
- ],
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "devDependencies": {
- "ava": "^2.4.0",
- "tsd": "^0.10.0",
- "xo": "^0.25.3"
- }
-}
diff --git a/deps/npm/node_modules/strip-ansi-cjs/node_modules/ansi-regex/index.js b/deps/npm/node_modules/strip-ansi-cjs/node_modules/ansi-regex/index.js
deleted file mode 100644
index 616ff837d3ff01..00000000000000
--- a/deps/npm/node_modules/strip-ansi-cjs/node_modules/ansi-regex/index.js
+++ /dev/null
@@ -1,10 +0,0 @@
-'use strict';
-
-module.exports = ({onlyFirst = false} = {}) => {
- const pattern = [
- '[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)',
- '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))'
- ].join('|');
-
- return new RegExp(pattern, onlyFirst ? undefined : 'g');
-};
diff --git a/deps/npm/node_modules/strip-ansi-cjs/node_modules/ansi-regex/license b/deps/npm/node_modules/strip-ansi-cjs/node_modules/ansi-regex/license
deleted file mode 100644
index e7af2f77107d73..00000000000000
--- a/deps/npm/node_modules/strip-ansi-cjs/node_modules/ansi-regex/license
+++ /dev/null
@@ -1,9 +0,0 @@
-MIT License
-
-Copyright (c) Sindre Sorhus (sindresorhus.com)
-
-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/deps/npm/node_modules/strip-ansi-cjs/node_modules/ansi-regex/package.json b/deps/npm/node_modules/strip-ansi-cjs/node_modules/ansi-regex/package.json
deleted file mode 100644
index 017f53116a9e28..00000000000000
--- a/deps/npm/node_modules/strip-ansi-cjs/node_modules/ansi-regex/package.json
+++ /dev/null
@@ -1,55 +0,0 @@
-{
- "name": "ansi-regex",
- "version": "5.0.1",
- "description": "Regular expression for matching ANSI escape codes",
- "license": "MIT",
- "repository": "chalk/ansi-regex",
- "author": {
- "name": "Sindre Sorhus",
- "email": "sindresorhus@gmail.com",
- "url": "sindresorhus.com"
- },
- "engines": {
- "node": ">=8"
- },
- "scripts": {
- "test": "xo && ava && tsd",
- "view-supported": "node fixtures/view-codes.js"
- },
- "files": [
- "index.js",
- "index.d.ts"
- ],
- "keywords": [
- "ansi",
- "styles",
- "color",
- "colour",
- "colors",
- "terminal",
- "console",
- "cli",
- "string",
- "tty",
- "escape",
- "formatting",
- "rgb",
- "256",
- "shell",
- "xterm",
- "command-line",
- "text",
- "regex",
- "regexp",
- "re",
- "match",
- "test",
- "find",
- "pattern"
- ],
- "devDependencies": {
- "ava": "^2.4.0",
- "tsd": "^0.9.0",
- "xo": "^0.25.3"
- }
-}
diff --git a/deps/npm/node_modules/strip-ansi/index.js b/deps/npm/node_modules/strip-ansi/index.js
index ba19750e64e061..9a593dfcd1fd5c 100644
--- a/deps/npm/node_modules/strip-ansi/index.js
+++ b/deps/npm/node_modules/strip-ansi/index.js
@@ -1,14 +1,4 @@
-import ansiRegex from 'ansi-regex';
+'use strict';
+const ansiRegex = require('ansi-regex');
-const regex = ansiRegex();
-
-export default function stripAnsi(string) {
- if (typeof string !== 'string') {
- throw new TypeError(`Expected a \`string\`, got \`${typeof string}\``);
- }
-
- // Even though the regex is global, we don't need to reset the `.lastIndex`
- // because unlike `.exec()` and `.test()`, `.replace()` does it automatically
- // and doing it manually has a performance penalty.
- return string.replace(regex, '');
-}
+module.exports = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string;
diff --git a/deps/npm/node_modules/strip-ansi/license b/deps/npm/node_modules/strip-ansi/license
index fa7ceba3eb4a96..e7af2f77107d73 100644
--- a/deps/npm/node_modules/strip-ansi/license
+++ b/deps/npm/node_modules/strip-ansi/license
@@ -1,6 +1,6 @@
MIT License
-Copyright (c) Sindre Sorhus (https://sindresorhus.com)
+Copyright (c) Sindre Sorhus (sindresorhus.com)
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:
diff --git a/deps/npm/node_modules/strip-ansi/package.json b/deps/npm/node_modules/strip-ansi/package.json
index e1f455c325b007..1a41108d42831c 100644
--- a/deps/npm/node_modules/strip-ansi/package.json
+++ b/deps/npm/node_modules/strip-ansi/package.json
@@ -1,19 +1,16 @@
{
"name": "strip-ansi",
- "version": "7.1.0",
+ "version": "6.0.1",
"description": "Strip ANSI escape codes from a string",
"license": "MIT",
"repository": "chalk/strip-ansi",
- "funding": "https://github.com/chalk/strip-ansi?sponsor=1",
"author": {
"name": "Sindre Sorhus",
"email": "sindresorhus@gmail.com",
- "url": "https://sindresorhus.com"
+ "url": "sindresorhus.com"
},
- "type": "module",
- "exports": "./index.js",
"engines": {
- "node": ">=12"
+ "node": ">=8"
},
"scripts": {
"test": "xo && ava && tsd"
@@ -47,11 +44,11 @@
"text"
],
"dependencies": {
- "ansi-regex": "^6.0.1"
+ "ansi-regex": "^5.0.1"
},
"devDependencies": {
- "ava": "^3.15.0",
- "tsd": "^0.17.0",
- "xo": "^0.44.0"
+ "ava": "^2.4.0",
+ "tsd": "^0.10.0",
+ "xo": "^0.25.3"
}
}
diff --git a/deps/npm/node_modules/tuf-js/dist/config.js b/deps/npm/node_modules/tuf-js/dist/config.js
index bafb33a8a1bf7c..6845679942fec5 100644
--- a/deps/npm/node_modules/tuf-js/dist/config.js
+++ b/deps/npm/node_modules/tuf-js/dist/config.js
@@ -4,12 +4,12 @@ exports.defaultConfig = void 0;
exports.defaultConfig = {
maxRootRotations: 32,
maxDelegations: 32,
- rootMaxLength: 512000,
- timestampMaxLength: 16384,
- snapshotMaxLength: 2000000,
- targetsMaxLength: 5000000,
+ rootMaxLength: 512000, //bytes
+ timestampMaxLength: 16384, // bytes
+ snapshotMaxLength: 2000000, // bytes
+ targetsMaxLength: 5000000, // bytes
prefixTargetsWithHash: true,
- fetchTimeout: 100000,
+ fetchTimeout: 100000, // milliseconds
fetchRetries: undefined,
fetchRetry: 2,
};
diff --git a/deps/npm/node_modules/tuf-js/dist/updater.js b/deps/npm/node_modules/tuf-js/dist/updater.js
index 2d0c769c7af647..5317f7e14659ac 100644
--- a/deps/npm/node_modules/tuf-js/dist/updater.js
+++ b/deps/npm/node_modules/tuf-js/dist/updater.js
@@ -44,6 +44,7 @@ class Updater {
this.metadataBaseUrl = metadataBaseUrl;
this.targetDir = targetDir;
this.targetBaseUrl = targetBaseUrl;
+ this.forceCache = options.forceCache ?? false;
const data = this.loadLocalMetadata(models_1.MetadataKind.Root);
this.trustedSet = new store_1.TrustedMetadataStore(data);
this.config = { ...config_1.defaultConfig, ...config };
@@ -57,8 +58,25 @@ class Updater {
// refresh and load the metadata before downloading the target
// refresh should be called once after the client is initialized
async refresh() {
- await this.loadRoot();
- await this.loadTimestamp();
+ // If forceCache is true, try to load the timestamp from local storage
+ // without fetching it from the remote. Otherwise, load the root and
+ // timestamp from the remote per the TUF spec.
+ if (this.forceCache) {
+ // If anything fails, load the root and timestamp from the remote. This
+ // should cover any situation where the local metadata is corrupted or
+ // expired.
+ try {
+ await this.loadTimestamp({ checkRemote: false });
+ }
+ catch (error) {
+ await this.loadRoot();
+ await this.loadTimestamp();
+ }
+ }
+ else {
+ await this.loadRoot();
+ await this.loadTimestamp();
+ }
await this.loadSnapshot();
await this.loadTargets(models_1.MetadataKind.Targets, models_1.MetadataKind.Root);
}
@@ -143,11 +161,16 @@ class Updater {
}
// Load local and remote timestamp metadata.
// Client workflow 5.4: update timestamp role
- async loadTimestamp() {
+ async loadTimestamp({ checkRemote } = { checkRemote: true }) {
// Load local and remote timestamp metadata
try {
const data = this.loadLocalMetadata(models_1.MetadataKind.Timestamp);
this.trustedSet.updateTimestamp(data);
+ // If checkRemote is disabled, return here to avoid fetching the remote
+ // timestamp metadata.
+ if (!checkRemote) {
+ return;
+ }
}
catch (error) {
// continue
diff --git a/deps/npm/node_modules/tuf-js/package.json b/deps/npm/node_modules/tuf-js/package.json
index c757d6a00d7008..f6b2943f8195d6 100644
--- a/deps/npm/node_modules/tuf-js/package.json
+++ b/deps/npm/node_modules/tuf-js/package.json
@@ -1,6 +1,6 @@
{
"name": "tuf-js",
- "version": "2.1.0",
+ "version": "2.2.0",
"description": "JavaScript implementation of The Update Framework (TUF)",
"main": "dist/index.js",
"types": "dist/index.d.ts",
@@ -29,8 +29,8 @@
"homepage": "https://github.com/theupdateframework/tuf-js/tree/main/packages/client#readme",
"devDependencies": {
"@tufjs/repo-mock": "2.0.0",
- "@types/debug": "^4.1.8",
- "@types/make-fetch-happen": "^10.0.1"
+ "@types/debug": "^4.1.12",
+ "@types/make-fetch-happen": "^10.0.4"
},
"dependencies": {
"@tufjs/models": "2.0.0",
diff --git a/deps/npm/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/index.js b/deps/npm/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/index.js
deleted file mode 100644
index 616ff837d3ff01..00000000000000
--- a/deps/npm/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/index.js
+++ /dev/null
@@ -1,10 +0,0 @@
-'use strict';
-
-module.exports = ({onlyFirst = false} = {}) => {
- const pattern = [
- '[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)',
- '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))'
- ].join('|');
-
- return new RegExp(pattern, onlyFirst ? undefined : 'g');
-};
diff --git a/deps/npm/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/license b/deps/npm/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/license
deleted file mode 100644
index e7af2f77107d73..00000000000000
--- a/deps/npm/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/license
+++ /dev/null
@@ -1,9 +0,0 @@
-MIT License
-
-Copyright (c) Sindre Sorhus (sindresorhus.com)
-
-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/deps/npm/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/package.json b/deps/npm/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/package.json
deleted file mode 100644
index 017f53116a9e28..00000000000000
--- a/deps/npm/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/package.json
+++ /dev/null
@@ -1,55 +0,0 @@
-{
- "name": "ansi-regex",
- "version": "5.0.1",
- "description": "Regular expression for matching ANSI escape codes",
- "license": "MIT",
- "repository": "chalk/ansi-regex",
- "author": {
- "name": "Sindre Sorhus",
- "email": "sindresorhus@gmail.com",
- "url": "sindresorhus.com"
- },
- "engines": {
- "node": ">=8"
- },
- "scripts": {
- "test": "xo && ava && tsd",
- "view-supported": "node fixtures/view-codes.js"
- },
- "files": [
- "index.js",
- "index.d.ts"
- ],
- "keywords": [
- "ansi",
- "styles",
- "color",
- "colour",
- "colors",
- "terminal",
- "console",
- "cli",
- "string",
- "tty",
- "escape",
- "formatting",
- "rgb",
- "256",
- "shell",
- "xterm",
- "command-line",
- "text",
- "regex",
- "regexp",
- "re",
- "match",
- "test",
- "find",
- "pattern"
- ],
- "devDependencies": {
- "ava": "^2.4.0",
- "tsd": "^0.9.0",
- "xo": "^0.25.3"
- }
-}
diff --git a/deps/npm/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/index.js b/deps/npm/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/index.js
deleted file mode 100644
index 9a593dfcd1fd5c..00000000000000
--- a/deps/npm/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/index.js
+++ /dev/null
@@ -1,4 +0,0 @@
-'use strict';
-const ansiRegex = require('ansi-regex');
-
-module.exports = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string;
diff --git a/deps/npm/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/license b/deps/npm/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/license
deleted file mode 100644
index e7af2f77107d73..00000000000000
--- a/deps/npm/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/license
+++ /dev/null
@@ -1,9 +0,0 @@
-MIT License
-
-Copyright (c) Sindre Sorhus (sindresorhus.com)
-
-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/deps/npm/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/package.json b/deps/npm/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/package.json
deleted file mode 100644
index 1a41108d42831c..00000000000000
--- a/deps/npm/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/package.json
+++ /dev/null
@@ -1,54 +0,0 @@
-{
- "name": "strip-ansi",
- "version": "6.0.1",
- "description": "Strip ANSI escape codes from a string",
- "license": "MIT",
- "repository": "chalk/strip-ansi",
- "author": {
- "name": "Sindre Sorhus",
- "email": "sindresorhus@gmail.com",
- "url": "sindresorhus.com"
- },
- "engines": {
- "node": ">=8"
- },
- "scripts": {
- "test": "xo && ava && tsd"
- },
- "files": [
- "index.js",
- "index.d.ts"
- ],
- "keywords": [
- "strip",
- "trim",
- "remove",
- "ansi",
- "styles",
- "color",
- "colour",
- "colors",
- "terminal",
- "console",
- "string",
- "tty",
- "escape",
- "formatting",
- "rgb",
- "256",
- "shell",
- "xterm",
- "log",
- "logging",
- "command-line",
- "text"
- ],
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "devDependencies": {
- "ava": "^2.4.0",
- "tsd": "^0.10.0",
- "xo": "^0.25.3"
- }
-}
diff --git a/deps/npm/node_modules/wrap-ansi/node_modules/ansi-regex/index.js b/deps/npm/node_modules/wrap-ansi/node_modules/ansi-regex/index.js
new file mode 100644
index 00000000000000..130a0929b8ce8c
--- /dev/null
+++ b/deps/npm/node_modules/wrap-ansi/node_modules/ansi-regex/index.js
@@ -0,0 +1,8 @@
+export default function ansiRegex({onlyFirst = false} = {}) {
+ const pattern = [
+ '[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)',
+ '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))'
+ ].join('|');
+
+ return new RegExp(pattern, onlyFirst ? undefined : 'g');
+}
diff --git a/deps/npm/node_modules/columnify/node_modules/ansi-regex/license b/deps/npm/node_modules/wrap-ansi/node_modules/ansi-regex/license
similarity index 92%
rename from deps/npm/node_modules/columnify/node_modules/ansi-regex/license
rename to deps/npm/node_modules/wrap-ansi/node_modules/ansi-regex/license
index e7af2f77107d73..fa7ceba3eb4a96 100644
--- a/deps/npm/node_modules/columnify/node_modules/ansi-regex/license
+++ b/deps/npm/node_modules/wrap-ansi/node_modules/ansi-regex/license
@@ -1,6 +1,6 @@
MIT License
-Copyright (c) Sindre Sorhus (sindresorhus.com)
+Copyright (c) Sindre Sorhus (https://sindresorhus.com)
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:
diff --git a/deps/npm/node_modules/gauge/node_modules/ansi-regex/package.json b/deps/npm/node_modules/wrap-ansi/node_modules/ansi-regex/package.json
similarity index 75%
rename from deps/npm/node_modules/gauge/node_modules/ansi-regex/package.json
rename to deps/npm/node_modules/wrap-ansi/node_modules/ansi-regex/package.json
index 017f53116a9e28..7bbb563bf2a70a 100644
--- a/deps/npm/node_modules/gauge/node_modules/ansi-regex/package.json
+++ b/deps/npm/node_modules/wrap-ansi/node_modules/ansi-regex/package.json
@@ -1,16 +1,19 @@
{
"name": "ansi-regex",
- "version": "5.0.1",
+ "version": "6.0.1",
"description": "Regular expression for matching ANSI escape codes",
"license": "MIT",
"repository": "chalk/ansi-regex",
+ "funding": "https://github.com/chalk/ansi-regex?sponsor=1",
"author": {
"name": "Sindre Sorhus",
"email": "sindresorhus@gmail.com",
- "url": "sindresorhus.com"
+ "url": "https://sindresorhus.com"
},
+ "type": "module",
+ "exports": "./index.js",
"engines": {
- "node": ">=8"
+ "node": ">=12"
},
"scripts": {
"test": "xo && ava && tsd",
@@ -48,8 +51,8 @@
"pattern"
],
"devDependencies": {
- "ava": "^2.4.0",
- "tsd": "^0.9.0",
- "xo": "^0.25.3"
+ "ava": "^3.15.0",
+ "tsd": "^0.14.0",
+ "xo": "^0.38.2"
}
}
diff --git a/deps/npm/node_modules/wrap-ansi/node_modules/strip-ansi/index.js b/deps/npm/node_modules/wrap-ansi/node_modules/strip-ansi/index.js
new file mode 100644
index 00000000000000..ba19750e64e061
--- /dev/null
+++ b/deps/npm/node_modules/wrap-ansi/node_modules/strip-ansi/index.js
@@ -0,0 +1,14 @@
+import ansiRegex from 'ansi-regex';
+
+const regex = ansiRegex();
+
+export default function stripAnsi(string) {
+ if (typeof string !== 'string') {
+ throw new TypeError(`Expected a \`string\`, got \`${typeof string}\``);
+ }
+
+ // Even though the regex is global, we don't need to reset the `.lastIndex`
+ // because unlike `.exec()` and `.test()`, `.replace()` does it automatically
+ // and doing it manually has a performance penalty.
+ return string.replace(regex, '');
+}
diff --git a/deps/npm/node_modules/columnify/node_modules/strip-ansi/license b/deps/npm/node_modules/wrap-ansi/node_modules/strip-ansi/license
similarity index 92%
rename from deps/npm/node_modules/columnify/node_modules/strip-ansi/license
rename to deps/npm/node_modules/wrap-ansi/node_modules/strip-ansi/license
index e7af2f77107d73..fa7ceba3eb4a96 100644
--- a/deps/npm/node_modules/columnify/node_modules/strip-ansi/license
+++ b/deps/npm/node_modules/wrap-ansi/node_modules/strip-ansi/license
@@ -1,6 +1,6 @@
MIT License
-Copyright (c) Sindre Sorhus (sindresorhus.com)
+Copyright (c) Sindre Sorhus (https://sindresorhus.com)
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:
diff --git a/deps/npm/node_modules/cli-columns/node_modules/strip-ansi/package.json b/deps/npm/node_modules/wrap-ansi/node_modules/strip-ansi/package.json
similarity index 71%
rename from deps/npm/node_modules/cli-columns/node_modules/strip-ansi/package.json
rename to deps/npm/node_modules/wrap-ansi/node_modules/strip-ansi/package.json
index 1a41108d42831c..e1f455c325b007 100644
--- a/deps/npm/node_modules/cli-columns/node_modules/strip-ansi/package.json
+++ b/deps/npm/node_modules/wrap-ansi/node_modules/strip-ansi/package.json
@@ -1,16 +1,19 @@
{
"name": "strip-ansi",
- "version": "6.0.1",
+ "version": "7.1.0",
"description": "Strip ANSI escape codes from a string",
"license": "MIT",
"repository": "chalk/strip-ansi",
+ "funding": "https://github.com/chalk/strip-ansi?sponsor=1",
"author": {
"name": "Sindre Sorhus",
"email": "sindresorhus@gmail.com",
- "url": "sindresorhus.com"
+ "url": "https://sindresorhus.com"
},
+ "type": "module",
+ "exports": "./index.js",
"engines": {
- "node": ">=8"
+ "node": ">=12"
},
"scripts": {
"test": "xo && ava && tsd"
@@ -44,11 +47,11 @@
"text"
],
"dependencies": {
- "ansi-regex": "^5.0.1"
+ "ansi-regex": "^6.0.1"
},
"devDependencies": {
- "ava": "^2.4.0",
- "tsd": "^0.10.0",
- "xo": "^0.25.3"
+ "ava": "^3.15.0",
+ "tsd": "^0.17.0",
+ "xo": "^0.44.0"
}
}
diff --git a/deps/npm/package.json b/deps/npm/package.json
index 7f222796a8a2f8..d892a7fff8180b 100644
--- a/deps/npm/package.json
+++ b/deps/npm/package.json
@@ -1,5 +1,5 @@
{
- "version": "10.3.0",
+ "version": "10.5.0",
"name": "npm",
"description": "a package manager for JavaScript",
"workspaces": [
@@ -58,8 +58,8 @@
"@npmcli/map-workspaces": "^3.0.4",
"@npmcli/package-json": "^5.0.0",
"@npmcli/promise-spawn": "^7.0.1",
- "@npmcli/run-script": "^7.0.3",
- "@sigstore/tuf": "^2.2.0",
+ "@npmcli/run-script": "^7.0.4",
+ "@sigstore/tuf": "^2.3.1",
"abbrev": "^2.0.0",
"archy": "~1.0.0",
"cacache": "^18.0.2",
@@ -105,15 +105,14 @@
"npm-user-validate": "^2.0.0",
"npmlog": "^7.0.1",
"p-map": "^4.0.0",
- "pacote": "^17.0.5",
+ "pacote": "^17.0.6",
"parse-conflict-json": "^3.0.1",
"proc-log": "^3.0.0",
"qrcode-terminal": "^0.12.0",
"read": "^2.1.0",
- "semver": "^7.5.4",
+ "semver": "^7.6.0",
"spdx-expression-parse": "^3.0.1",
"ssri": "^10.0.5",
- "strip-ansi": "^7.1.0",
"supports-color": "^9.4.0",
"tar": "^6.2.0",
"text-table": "~0.2.0",
@@ -186,7 +185,6 @@
"semver",
"spdx-expression-parse",
"ssri",
- "strip-ansi",
"supports-color",
"tar",
"text-table",
@@ -207,7 +205,7 @@
"ajv": "^8.12.0",
"ajv-formats": "^2.1.1",
"ajv-formats-draft2019": "^1.6.1",
- "diff": "^5.1.0",
+ "diff": "^5.2.0",
"licensee": "^10.0.0",
"nock": "^13.4.0",
"npm-packlist": "^8.0.2",
diff --git a/deps/npm/tap-snapshots/test/lib/commands/config.js.test.cjs b/deps/npm/tap-snapshots/test/lib/commands/config.js.test.cjs
index 593de43c2f0193..79518c2b8c8670 100644
--- a/deps/npm/tap-snapshots/test/lib/commands/config.js.test.cjs
+++ b/deps/npm/tap-snapshots/test/lib/commands/config.js.test.cjs
@@ -50,6 +50,8 @@ exports[`test/lib/commands/config.js TAP config list --json > output matches sna
"dry-run": false,
"editor": "{EDITOR}",
"engine-strict": false,
+ "expect-results": null,
+ "expect-result-count": null,
"fetch-retries": 2,
"fetch-retry-factor": 10,
"fetch-retry-maxtimeout": 60000,
@@ -207,6 +209,8 @@ diff-unified = 3
dry-run = false
editor = "{EDITOR}"
engine-strict = false
+expect-result-count = null
+expect-results = null
fetch-retries = 2
fetch-retry-factor = 10
fetch-retry-maxtimeout = 60000
diff --git a/deps/npm/tap-snapshots/test/lib/commands/pack.js.test.cjs b/deps/npm/tap-snapshots/test/lib/commands/pack.js.test.cjs
index 74b472a7e4bb64..5cdcdd9a8d08a5 100644
--- a/deps/npm/tap-snapshots/test/lib/commands/pack.js.test.cjs
+++ b/deps/npm/tap-snapshots/test/lib/commands/pack.js.test.cjs
@@ -26,6 +26,48 @@ Array [
]
`
+exports[`test/lib/commands/pack.js TAP foreground-scripts can still be set to false > logs pack contents 1`] = `
+Array [
+ undefined,
+ "package: test-fg-scripts@0.0.0",
+ undefined,
+ "110B package.json",
+ undefined,
+ String(
+ name: test-fg-scripts
+ version: 0.0.0
+ filename: test-fg-scripts-0.0.0.tgz
+ package size: {size}
+ unpacked size: 110 B
+ shasum: {sha}
+ integrity: {integrity}
+ total files: 1
+ ),
+ "",
+]
+`
+
+exports[`test/lib/commands/pack.js TAP foreground-scripts defaults to true > logs pack contents 1`] = `
+Array [
+ undefined,
+ "package: test-fg-scripts@0.0.0",
+ undefined,
+ "110B package.json",
+ undefined,
+ String(
+ name: test-fg-scripts
+ version: 0.0.0
+ filename: test-fg-scripts-0.0.0.tgz
+ package size: {size}
+ unpacked size: 110 B
+ shasum: {sha}
+ integrity: {integrity}
+ total files: 1
+ ),
+ "",
+]
+`
+
exports[`test/lib/commands/pack.js TAP should log output as valid json > logs pack contents 1`] = `
Array []
`
diff --git a/deps/npm/tap-snapshots/test/lib/commands/publish.js.test.cjs b/deps/npm/tap-snapshots/test/lib/commands/publish.js.test.cjs
index 597bf236f46b21..45406c994002aa 100644
--- a/deps/npm/tap-snapshots/test/lib/commands/publish.js.test.cjs
+++ b/deps/npm/tap-snapshots/test/lib/commands/publish.js.test.cjs
@@ -56,6 +56,92 @@ Array [
]
`
+exports[`test/lib/commands/publish.js TAP foreground-scripts can still be set to false > must match snapshot 1`] = `
+Array [
+ Array [
+ "",
+ ],
+ Array [
+ "",
+ "package: test-fg-scripts@0.0.0",
+ ],
+ Array [
+ "=== Tarball Contents ===",
+ ],
+ Array [
+ "",
+ "110B package.json",
+ ],
+ Array [
+ "=== Tarball Details ===",
+ ],
+ Array [
+ "",
+ String(
+ name: test-fg-scripts
+ version: 0.0.0
+ filename: test-fg-scripts-0.0.0.tgz
+ package size: {size}
+ unpacked size: 110 B
+ shasum: {sha}
+ integrity: {integrity}
+ total files: 1
+ ),
+ ],
+ Array [
+ "",
+ "",
+ ],
+ Array [
+ "",
+ "Publishing to https://registry.npmjs.org/ with tag latest and default access (dry-run)",
+ ],
+]
+`
+
+exports[`test/lib/commands/publish.js TAP foreground-scripts defaults to true > must match snapshot 1`] = `
+Array [
+ Array [
+ "",
+ ],
+ Array [
+ "",
+ "package: test-fg-scripts@0.0.0",
+ ],
+ Array [
+ "=== Tarball Contents ===",
+ ],
+ Array [
+ "",
+ "110B package.json",
+ ],
+ Array [
+ "=== Tarball Details ===",
+ ],
+ Array [
+ "",
+ String(
+ name: test-fg-scripts
+ version: 0.0.0
+ filename: test-fg-scripts-0.0.0.tgz
+ package size: {size}
+ unpacked size: 110 B
+ shasum: {sha}
+ integrity: {integrity}
+ total files: 1
+ ),
+ ],
+ Array [
+ "",
+ "",
+ ],
+ Array [
+ "",
+ "Publishing to https://registry.npmjs.org/ with tag latest and default access (dry-run)",
+ ],
+]
+`
+
exports[`test/lib/commands/publish.js TAP has mTLS auth for scope configured registry > new package version 1`] = `
+ @npm/test-package@1.0.0
`
diff --git a/deps/npm/tap-snapshots/test/lib/commands/view.js.test.cjs b/deps/npm/tap-snapshots/test/lib/commands/view.js.test.cjs
index 1c37e26db7f824..3bda4e7de28531 100644
--- a/deps/npm/tap-snapshots/test/lib/commands/view.js.test.cjs
+++ b/deps/npm/tap-snapshots/test/lib/commands/view.js.test.cjs
@@ -190,6 +190,10 @@ dist-tags:
[1m[32mlatest[39m[22m: 1.0.0
`
+exports[`test/lib/commands/view.js TAP package with invalid version > must match snapshot 1`] = `
+[ [32m'1.0.0'[39m, [32m'1.0.1'[39m ]
+`
+
exports[`test/lib/commands/view.js TAP package with maintainers info as object > must match snapshot 1`] = `
[4m[1m[32mpink[39m@[32m1.0.0[39m[22m[24m | [1m[31mProprietary[39m[22m | deps: [32mnone[39m | versions: [33m2[39m
diff --git a/deps/npm/tap-snapshots/test/lib/docs.js.test.cjs b/deps/npm/tap-snapshots/test/lib/docs.js.test.cjs
index ba1fe703d39d5c..faa8309dfad781 100644
--- a/deps/npm/tap-snapshots/test/lib/docs.js.test.cjs
+++ b/deps/npm/tap-snapshots/test/lib/docs.js.test.cjs
@@ -537,6 +537,25 @@ This can be overridden by setting the \`--force\` flag.
+#### \`expect-result-count\`
+
+* Default: null
+* Type: null or Number
+
+Tells to expect a specific number of results from the command.
+
+This config can not be used with: \`expect-results\`
+
+#### \`expect-results\`
+
+* Default: null
+* Type: null or Boolean
+
+Tells npm whether or not to expect results from the command. Can be either
+true (expect some results) or false (expect no results).
+
+This config can not be used with: \`expect-result-count\`
+
#### \`fetch-retries\`
* Default: 2
@@ -618,7 +637,8 @@ recommended that you do not use this option!
#### \`foreground-scripts\`
-* Default: false
+* 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\`)
@@ -2074,6 +2094,8 @@ Array [
"dry-run",
"editor",
"engine-strict",
+ "expect-results",
+ "expect-result-count",
"fetch-retries",
"fetch-retry-factor",
"fetch-retry-maxtimeout",
@@ -2325,6 +2347,8 @@ Array [
exports[`test/lib/docs.js TAP config > keys that are not flattened 1`] = `
Array [
+ "expect-results",
+ "expect-result-count",
"init-author-email",
"init-author-name",
"init-author-url",
@@ -3869,6 +3893,7 @@ Options:
[-g|--global]
[-w|--workspace [-w|--workspace ...]]
[-ws|--workspaces] [--include-workspace-root] [--package-lock-only]
+[--expect-results|--expect-result-count ]
Run "npm help query" for more info
@@ -3881,6 +3906,8 @@ npm query
#### \`workspaces\`
#### \`include-workspace-root\`
#### \`package-lock-only\`
+#### \`expect-results\`
+#### \`expect-result-count\`
`
exports[`test/lib/docs.js TAP usage rebuild > must match snapshot 1`] = `
diff --git a/deps/npm/tap-snapshots/test/lib/utils/reify-output.js.test.cjs b/deps/npm/tap-snapshots/test/lib/utils/reify-output.js.test.cjs
index 3fb3fa2611c231..3e3df9039efb91 100644
--- a/deps/npm/tap-snapshots/test/lib/utils/reify-output.js.test.cjs
+++ b/deps/npm/tap-snapshots/test/lib/utils/reify-output.js.test.cjs
@@ -1632,3 +1632,21 @@ exports[`test/lib/utils/reify-output.js TAP packages changed message > {"added"
}
}
`
+
+exports[`test/lib/utils/reify-output.js TAP prints dedupe difference on dry-run > diff table 1`] = `
+
+change bar 1.0.0 -> 2.1.0
+remove bar 1.0.0
+add foo 1.0.0
+
+removed 1 package, and changed 1 package in {TIME}
+`
+
+exports[`test/lib/utils/reify-output.js TAP prints dedupe difference on long > diff table 1`] = `
+
+change bar 1.0.0 -> 2.1.0
+remove bar 1.0.0
+add foo 1.0.0
+
+removed 1 package, and changed 1 package in {TIME}
+`
diff --git a/deps/npm/test/lib/commands/audit.js b/deps/npm/test/lib/commands/audit.js
index 623c7b6485159f..9a57a02184ea18 100644
--- a/deps/npm/test/lib/commands/audit.js
+++ b/deps/npm/test/lib/commands/audit.js
@@ -939,7 +939,7 @@ t.test('audit signatures', async t => {
const opts = {
baseURL: 'https://tuf-repo-cdn.sigstore.dev',
metadataPathPrefix: '',
- cachePath: path.join(npm.cache, '_tuf'),
+ cachePath: path.join(npm.cache, '_tuf', 'tuf-repo-cdn.sigstore.dev'),
}
return tufmock(target, opts)
}
diff --git a/deps/npm/test/lib/commands/dist-tag.js b/deps/npm/test/lib/commands/dist-tag.js
index 1c63ce497d3fb2..918f658c6462aa 100644
--- a/deps/npm/test/lib/commands/dist-tag.js
+++ b/deps/npm/test/lib/commands/dist-tag.js
@@ -318,6 +318,15 @@ t.test('add missing pkg name', async t => {
)
})
+t.test('add invalid tag', async t => {
+ const { distTag } = await mockDist(t)
+ await t.rejects(
+ distTag.exec(['add', '@tag']),
+ { code: 'EINVALIDTAGNAME' },
+ 'should exit with invalid tag name error'
+ )
+})
+
t.test('set existing version', async t => {
const { distTag, logs } = await mockDist(t)
await distTag.exec(['set', '@scoped/another@0.6.0', 'b'])
diff --git a/deps/npm/test/lib/commands/exec.js b/deps/npm/test/lib/commands/exec.js
index 3cb4e90e855fe4..094cb7113d07a3 100644
--- a/deps/npm/test/lib/commands/exec.js
+++ b/deps/npm/test/lib/commands/exec.js
@@ -41,6 +41,7 @@ t.test('registry package', async t => {
})
await registry.package({
+ times: 2,
manifest,
tarballs: {
'1.0.0': path.join(npm.prefix, 'npm-exec-test'),
diff --git a/deps/npm/test/lib/commands/hook.js b/deps/npm/test/lib/commands/hook.js
index 448045cdd69162..382bc177e7001a 100644
--- a/deps/npm/test/lib/commands/hook.js
+++ b/deps/npm/test/lib/commands/hook.js
@@ -1,5 +1,6 @@
const t = require('tap')
const mockNpm = require('../../fixtures/mock-npm')
+const { stripVTControlCharacters } = require('node:util')
const mockHook = async (t, { hookResponse, ...npmOpts } = {}) => {
const now = Date.now()
@@ -243,8 +244,7 @@ t.test('npm hook ls', async t => {
'received the correct arguments'
)
t.equal(outputs[0][0], 'You have 3 hooks configured.', 'prints the correct header')
- const { default: stripAnsi } = await import('strip-ansi')
- const out = stripAnsi(outputs[1][0])
+ const out = stripVTControlCharacters(outputs[1][0])
t.match(out, /semver.*https:\/\/google.com.*\n.*\n.*never triggered/, 'prints package hook')
t.match(out, /@npmcli.*https:\/\/google.com.*\n.*\n.*triggered just now/, 'prints scope hook')
t.match(out, /~npm.*https:\/\/google.com.*\n.*\n.*never triggered/, 'prints owner hook')
@@ -293,8 +293,7 @@ t.test('npm hook ls, single result', async t => {
'received the correct arguments'
)
t.equal(outputs[0][0], 'You have one hook configured.', 'prints the correct header')
- const { default: stripAnsi } = await import('strip-ansi')
- const out = stripAnsi(outputs[1][0])
+ const out = stripVTControlCharacters(outputs[1][0])
t.match(out, /semver.*https:\/\/google.com.*\n.*\n.*never triggered/, 'prints package hook')
})
diff --git a/deps/npm/test/lib/commands/org.js b/deps/npm/test/lib/commands/org.js
index ed8fb238c4b0d8..0c343f028d6dcf 100644
--- a/deps/npm/test/lib/commands/org.js
+++ b/deps/npm/test/lib/commands/org.js
@@ -1,5 +1,6 @@
const t = require('tap')
const mockNpm = require('../../fixtures/mock-npm')
+const { stripVTControlCharacters } = require('node:util')
const mockOrg = async (t, { orgSize = 1, orgList = {}, ...npmOpts } = {}) => {
let setArgs = null
@@ -426,8 +427,7 @@ t.test('npm org ls', async t => {
},
'receieved the correct args'
)
- const { default: stripAnsi } = await import('strip-ansi')
- const out = stripAnsi(outputs[0][0])
+ const out = stripVTControlCharacters(outputs[0][0])
t.match(out, /one.*developer/, 'contains the developer member')
t.match(out, /two.*admin/, 'contains the admin member')
t.match(out, /three.*owner/, 'contains the owner member')
@@ -452,8 +452,7 @@ t.test('npm org ls - user filter', async t => {
},
'receieved the correct args'
)
- const { default: stripAnsi } = await import('strip-ansi')
- const out = stripAnsi(outputs[0][0])
+ const out = stripVTControlCharacters(outputs[0][0])
t.match(out, /username.*admin/, 'contains the filtered member')
t.notMatch(out, /missing.*admin/, 'does not contain other members')
})
@@ -476,8 +475,7 @@ t.test('npm org ls - user filter, missing user', async t => {
},
'receieved the correct args'
)
- const { default: stripAnsi } = await import('strip-ansi')
- const out = stripAnsi(outputs[0][0])
+ const out = stripVTControlCharacters(outputs[0][0])
t.notMatch(out, /username/, 'does not contain the requested member')
t.notMatch(out, /missing.*admin/, 'does not contain other members')
})
diff --git a/deps/npm/test/lib/commands/pack.js b/deps/npm/test/lib/commands/pack.js
index 658fd3489abea1..baec163c7b34d0 100644
--- a/deps/npm/test/lib/commands/pack.js
+++ b/deps/npm/test/lib/commands/pack.js
@@ -105,6 +105,87 @@ t.test('dry run', async t => {
t.throws(() => fs.statSync(path.resolve(npm.prefix, filename)))
})
+t.test('foreground-scripts defaults to true', async t => {
+ const { npm, outputs, logs } = await loadMockNpm(t, {
+ prefixDir: {
+ 'package.json': JSON.stringify({
+ name: 'test-fg-scripts',
+ version: '0.0.0',
+ scripts: {
+ prepack: 'echo prepack!',
+ postpack: 'echo postpack!',
+ },
+ }
+ ),
+ },
+ config: { 'dry-run': true },
+ })
+
+ /* eslint no-console: 0 */
+ // TODO: replace this with `const results = t.intercept(console, 'log')`
+ const log = console.log
+ t.teardown(() => {
+ console.log = log
+ })
+ const caughtLogs = []
+ console.log = (...args) => {
+ caughtLogs.push(args)
+ }
+ // end TODO
+
+ await npm.exec('pack', [])
+ const filename = 'test-fg-scripts-0.0.0.tgz'
+ t.same(
+ caughtLogs,
+ [
+ ['\n> test-fg-scripts@0.0.0 prepack\n> echo prepack!\n'],
+ ['\n> test-fg-scripts@0.0.0 postpack\n> echo postpack!\n'],
+ ],
+ 'prepack and postpack log to stdout')
+ t.strictSame(outputs, [[filename]])
+ t.matchSnapshot(logs.notice.map(([, m]) => m), 'logs pack contents')
+ t.throws(() => fs.statSync(path.resolve(npm.prefix, filename)))
+})
+
+t.test('foreground-scripts can still be set to false', async t => {
+ const { npm, outputs, logs } = await loadMockNpm(t, {
+ prefixDir: {
+ 'package.json': JSON.stringify({
+ name: 'test-fg-scripts',
+ version: '0.0.0',
+ scripts: {
+ prepack: 'echo prepack!',
+ postpack: 'echo postpack!',
+ },
+ }
+ ),
+ },
+ config: { 'dry-run': true, 'foreground-scripts': false },
+ })
+
+ /* eslint no-console: 0 */
+ // TODO: replace this with `const results = t.intercept(console, 'log')`
+ const log = console.log
+ t.teardown(() => {
+ console.log = log
+ })
+ const caughtLogs = []
+ console.log = (...args) => {
+ caughtLogs.push(args)
+ }
+ // end TODO
+
+ await npm.exec('pack', [])
+ const filename = 'test-fg-scripts-0.0.0.tgz'
+ t.same(
+ caughtLogs,
+ [],
+ 'prepack and postpack do not log to stdout')
+ t.strictSame(outputs, [[filename]])
+ t.matchSnapshot(logs.notice.map(([, m]) => m), 'logs pack contents')
+ t.throws(() => fs.statSync(path.resolve(npm.prefix, filename)))
+})
+
t.test('invalid packument', async t => {
const { npm, outputs } = await loadMockNpm(t, {
prefixDir: {
diff --git a/deps/npm/test/lib/commands/publish.js b/deps/npm/test/lib/commands/publish.js
index a5644ce224d670..ec7299e9eec530 100644
--- a/deps/npm/test/lib/commands/publish.js
+++ b/deps/npm/test/lib/commands/publish.js
@@ -167,6 +167,92 @@ t.test('dry-run', async t => {
t.matchSnapshot(logs.notice)
})
+t.test('foreground-scripts defaults to true', async t => {
+ const { joinedOutput, npm, logs } = await loadMockNpm(t, {
+ config: {
+ 'dry-run': true,
+ ...auth,
+ },
+ prefixDir: {
+ 'package.json': JSON.stringify({
+ name: 'test-fg-scripts',
+ version: '0.0.0',
+ scripts: {
+ prepack: 'echo prepack!',
+ postpack: 'echo postpack!',
+ },
+ }
+ ),
+ },
+ })
+
+ /* eslint no-console: 0 */
+ // TODO: replace this with `const results = t.intercept(console, 'log')`
+ const log = console.log
+ t.teardown(() => {
+ console.log = log
+ })
+ const caughtLogs = []
+ console.log = (...args) => {
+ caughtLogs.push(args)
+ }
+ // end TODO
+
+ await npm.exec('publish', [])
+ t.equal(joinedOutput(), `+ test-fg-scripts@0.0.0`)
+ t.matchSnapshot(logs.notice)
+
+ t.same(
+ caughtLogs,
+ [
+ ['\n> test-fg-scripts@0.0.0 prepack\n> echo prepack!\n'],
+ ['\n> test-fg-scripts@0.0.0 postpack\n> echo postpack!\n'],
+ ],
+ 'prepack and postpack log to stdout')
+})
+
+t.test('foreground-scripts can still be set to false', async t => {
+ const { joinedOutput, npm, logs } = await loadMockNpm(t, {
+ config: {
+ 'dry-run': true,
+ 'foreground-scripts': false,
+ ...auth,
+ },
+ prefixDir: {
+ 'package.json': JSON.stringify({
+ name: 'test-fg-scripts',
+ version: '0.0.0',
+ scripts: {
+ prepack: 'echo prepack!',
+ postpack: 'echo postpack!',
+ },
+ }
+ ),
+ },
+ })
+
+ /* eslint no-console: 0 */
+ // TODO: replace this with `const results = t.intercept(console, 'log')`
+ const log = console.log
+ t.teardown(() => {
+ console.log = log
+ })
+ const caughtLogs = []
+ console.log = (...args) => {
+ caughtLogs.push(args)
+ }
+ // end TODO
+
+ await npm.exec('publish', [])
+ t.equal(joinedOutput(), `+ test-fg-scripts@0.0.0`)
+ t.matchSnapshot(logs.notice)
+
+ t.same(
+ caughtLogs,
+ [],
+ 'prepack and postpack do not log to stdout')
+})
+
t.test('shows usage with wrong set of arguments', async t => {
const { publish } = await loadMockNpm(t, { command: 'publish' })
await t.rejects(publish.exec(['a', 'b', 'c']), publish.usage)
diff --git a/deps/npm/test/lib/commands/query.js b/deps/npm/test/lib/commands/query.js
index adf617316772e5..ebe89ed0da2789 100644
--- a/deps/npm/test/lib/commands/query.js
+++ b/deps/npm/test/lib/commands/query.js
@@ -61,6 +61,7 @@ t.test('recursive tree', async t => {
await npm.exec('query', ['*'])
t.matchSnapshot(joinedOutput(), 'should return everything in the tree, accounting for recursion')
})
+
t.test('workspace query', async t => {
const { npm, joinedOutput } = await loadMockNpm(t, {
config: {
@@ -237,3 +238,85 @@ t.test('package-lock-only', t => {
})
t.end()
})
+
+t.test('expect entries', t => {
+ const { exitCode } = process
+ t.afterEach(() => process.exitCode = exitCode)
+ const prefixDir = {
+ node_modules: {
+ a: { name: 'a', version: '1.0.0' },
+ },
+ 'package.json': JSON.stringify({
+ name: 'project',
+ dependencies: { a: '^1.0.0' },
+ }),
+ }
+ t.test('false, has entries', async t => {
+ const { logs, npm, joinedOutput } = await loadMockNpm(t, {
+ prefixDir,
+ })
+ npm.config.set('expect-results', false)
+ await npm.exec('query', ['#a'])
+ t.not(joinedOutput(), '[]', 'has entries')
+ t.same(logs.warn, [['query', 'Expected no results, got 1']])
+ t.ok(process.exitCode, 'exits with code')
+ })
+ t.test('false, no entries', async t => {
+ const { npm, joinedOutput } = await loadMockNpm(t, {
+ prefixDir,
+ })
+ npm.config.set('expect-results', false)
+ await npm.exec('query', ['#b'])
+ t.equal(joinedOutput(), '[]', 'does not have entries')
+ t.notOk(process.exitCode, 'exits without code')
+ })
+ t.test('true, has entries', async t => {
+ const { npm, joinedOutput } = await loadMockNpm(t, {
+ prefixDir,
+ })
+ npm.config.set('expect-results', true)
+ await npm.exec('query', ['#a'])
+ t.not(joinedOutput(), '[]', 'has entries')
+ t.notOk(process.exitCode, 'exits without code')
+ })
+ t.test('true, no entries', async t => {
+ const { logs, npm, joinedOutput } = await loadMockNpm(t, {
+ prefixDir,
+ })
+ npm.config.set('expect-results', true)
+ await npm.exec('query', ['#b'])
+ t.equal(joinedOutput(), '[]', 'does not have entries')
+ t.same(logs.warn, [['query', 'Expected results, got 0']])
+ t.ok(process.exitCode, 'exits with code')
+ })
+ t.test('count, matches', async t => {
+ const { npm, joinedOutput } = await loadMockNpm(t, {
+ prefixDir,
+ })
+ npm.config.set('expect-result-count', 1)
+ await npm.exec('query', ['#a'])
+ t.not(joinedOutput(), '[]', 'has entries')
+ t.notOk(process.exitCode, 'exits without code')
+ })
+ t.test('count 1, does not match', async t => {
+ const { logs, npm, joinedOutput } = await loadMockNpm(t, {
+ prefixDir,
+ })
+ npm.config.set('expect-result-count', 1)
+ await npm.exec('query', ['#b'])
+ t.equal(joinedOutput(), '[]', 'does not have entries')
+ t.same(logs.warn, [['query', 'Expected 1 result, got 0']])
+ t.ok(process.exitCode, 'exits with code')
+ })
+ t.test('count 3, does not match', async t => {
+ const { logs, npm, joinedOutput } = await loadMockNpm(t, {
+ prefixDir,
+ })
+ npm.config.set('expect-result-count', 3)
+ await npm.exec('query', ['#b'])
+ t.equal(joinedOutput(), '[]', 'does not have entries')
+ t.same(logs.warn, [['query', 'Expected 3 results, got 0']])
+ t.ok(process.exitCode, 'exits with code')
+ })
+ t.end()
+})
diff --git a/deps/npm/test/lib/commands/view.js b/deps/npm/test/lib/commands/view.js
index a99c8d6242212c..92c7fe47bda062 100644
--- a/deps/npm/test/lib/commands/view.js
+++ b/deps/npm/test/lib/commands/view.js
@@ -250,6 +250,8 @@ const packument = (nv, opts) => {
},
},
'1.0.1': {},
+ '100000000000000000.0.0': {
+ },
},
},
}
@@ -315,6 +317,12 @@ t.test('package with homepage', async t => {
t.matchSnapshot(outputs.join('\n'))
})
+t.test('package with invalid version', async t => {
+ const { view, outputs } = await loadMockNpm(t, { config: { unicode: false } })
+ await view.exec(['orange', 'versions'])
+ t.matchSnapshot(outputs.join('\n'))
+})
+
t.test('package with no versions', async t => {
const { view, outputs } = await loadMockNpm(t, { config: { unicode: false } })
await view.exec(['brown'])
diff --git a/deps/npm/test/lib/utils/reify-output.js b/deps/npm/test/lib/utils/reify-output.js
index 1c6215ab33bef0..fd15e25a749842 100644
--- a/deps/npm/test/lib/utils/reify-output.js
+++ b/deps/npm/test/lib/utils/reify-output.js
@@ -380,3 +380,59 @@ t.test('added packages should be looked up within returned tree', async t => {
t.matchSnapshot(out)
})
})
+
+t.test('prints dedupe difference on dry-run', async t => {
+ const mock = {
+ actualTree: {
+ name: 'foo',
+ inventory: {
+ has: () => false,
+ },
+ },
+ diff: {
+ children: [
+ { action: 'ADD', ideal: { name: 'foo', package: { version: '1.0.0' } } },
+ { action: 'REMOVE', actual: { name: 'bar', package: { version: '1.0.0' } } },
+ {
+ action: 'CHANGE',
+ actual: { name: 'bar', package: { version: '1.0.0' } },
+ ideal: { package: { version: '2.1.0' } },
+ },
+ ],
+ },
+ }
+
+ const out = await mockReify(t, mock, {
+ 'dry-run': true,
+ })
+
+ t.matchSnapshot(out, 'diff table')
+})
+
+t.test('prints dedupe difference on long', async t => {
+ const mock = {
+ actualTree: {
+ name: 'foo',
+ inventory: {
+ has: () => false,
+ },
+ },
+ diff: {
+ children: [
+ { action: 'ADD', ideal: { name: 'foo', package: { version: '1.0.0' } } },
+ { action: 'REMOVE', actual: { name: 'bar', package: { version: '1.0.0' } } },
+ {
+ action: 'CHANGE',
+ actual: { name: 'bar', package: { version: '1.0.0' } },
+ ideal: { package: { version: '2.1.0' } },
+ },
+ ],
+ },
+ }
+
+ const out = await mockReify(t, mock, {
+ long: true,
+ })
+
+ t.matchSnapshot(out, 'diff table')
+})
diff --git a/deps/npm/test/lib/utils/update-notifier.js b/deps/npm/test/lib/utils/update-notifier.js
index cc5348a440e0a7..052367c60dadb1 100644
--- a/deps/npm/test/lib/utils/update-notifier.js
+++ b/deps/npm/test/lib/utils/update-notifier.js
@@ -23,6 +23,7 @@ const runUpdateNotifier = async (t, {
prefixDir,
version = CURRENT_VERSION,
argv = [],
+ wroteFile = false,
...config
} = {}) => {
const mockFs = {
@@ -37,6 +38,7 @@ const runUpdateNotifier = async (t, {
return { mtime: new Date(STAT_MTIME) }
},
writeFile: async (path, content) => {
+ wroteFile = true
if (content !== '') {
t.fail('no write file content allowed')
}
@@ -86,88 +88,108 @@ const runUpdateNotifier = async (t, {
const result = await updateNotifier(mock.npm)
return {
+ wroteFile,
result,
MANIFEST_REQUEST,
}
}
-t.test('does not notify by default', async t => {
- const { result, MANIFEST_REQUEST } = await runUpdateNotifier(t)
+t.test('duration has elapsed, no updates', async t => {
+ const { wroteFile, result, MANIFEST_REQUEST } = await runUpdateNotifier(t)
+ t.equal(wroteFile, true)
t.not(result)
t.equal(MANIFEST_REQUEST.length, 1)
})
t.test('situations in which we do not notify', t => {
t.test('nothing to do if notifier disabled', async t => {
- const { result, MANIFEST_REQUEST } = await runUpdateNotifier(t, {
+ const { wroteFile, result, MANIFEST_REQUEST } = await runUpdateNotifier(t, {
'update-notifier': false,
})
+ t.equal(wroteFile, false)
t.equal(result, null)
t.strictSame(MANIFEST_REQUEST, [], 'no requests for manifests')
})
t.test('do not suggest update if already updating', async t => {
- const { result, MANIFEST_REQUEST } = await runUpdateNotifier(t, {
+ const { wroteFile, result, MANIFEST_REQUEST } = await runUpdateNotifier(t, {
command: 'install',
prefixDir: { 'package.json': `{"name":"${t.testName}"}` },
argv: ['npm'],
global: true,
})
+ t.equal(wroteFile, false)
t.equal(result, null)
t.strictSame(MANIFEST_REQUEST, [], 'no requests for manifests')
})
t.test('do not suggest update if already updating with spec', async t => {
- const { result, MANIFEST_REQUEST } = await runUpdateNotifier(t, {
+ const { wroteFile, result, MANIFEST_REQUEST } = await runUpdateNotifier(t, {
command: 'install',
prefixDir: { 'package.json': `{"name":"${t.testName}"}` },
argv: ['npm@latest'],
global: true,
})
+ t.equal(wroteFile, false)
t.equal(result, null)
t.strictSame(MANIFEST_REQUEST, [], 'no requests for manifests')
})
t.test('do not update if same as latest', async t => {
- const { result, MANIFEST_REQUEST } = await runUpdateNotifier(t)
+ const { wroteFile, result, MANIFEST_REQUEST } = await runUpdateNotifier(t)
+ t.equal(wroteFile, true)
t.equal(result, null)
t.strictSame(MANIFEST_REQUEST, ['npm@latest'], 'requested latest version')
})
t.test('check if stat errors (here for coverage)', async t => {
const STAT_ERROR = new Error('blorg')
- const { result, MANIFEST_REQUEST } = await runUpdateNotifier(t, { STAT_ERROR })
+ const { wroteFile, result, MANIFEST_REQUEST } = await runUpdateNotifier(t, { STAT_ERROR })
+ t.equal(wroteFile, true)
t.equal(result, null)
t.strictSame(MANIFEST_REQUEST, ['npm@latest'], 'requested latest version')
})
t.test('ok if write errors (here for coverage)', async t => {
const WRITE_ERROR = new Error('grolb')
- const { result, MANIFEST_REQUEST } = await runUpdateNotifier(t, { WRITE_ERROR })
+ const { wroteFile, result, MANIFEST_REQUEST } = await runUpdateNotifier(t, { WRITE_ERROR })
+ t.equal(wroteFile, true)
t.equal(result, null)
t.strictSame(MANIFEST_REQUEST, ['npm@latest'], 'requested latest version')
})
t.test('ignore pacote failures (here for coverage)', async t => {
const PACOTE_ERROR = new Error('pah-KO-tchay')
- const { result, MANIFEST_REQUEST } = await runUpdateNotifier(t, { PACOTE_ERROR })
+ const { wroteFile, result, MANIFEST_REQUEST } = await runUpdateNotifier(t, { PACOTE_ERROR })
t.equal(result, null)
+ t.equal(wroteFile, true)
t.strictSame(MANIFEST_REQUEST, ['npm@latest'], 'requested latest version')
})
t.test('do not update if newer than latest, but same as next', async t => {
- const { result, MANIFEST_REQUEST } = await runUpdateNotifier(t, { version: NEXT_VERSION })
+ const {
+ wroteFile,
+ result,
+ MANIFEST_REQUEST,
+ } = await runUpdateNotifier(t, { version: NEXT_VERSION })
t.equal(result, null)
+ t.equal(wroteFile, true)
const reqs = ['npm@latest', `npm@^${NEXT_VERSION}`]
t.strictSame(MANIFEST_REQUEST, reqs, 'requested latest and next versions')
})
t.test('do not update if on the latest beta', async t => {
- const { result, MANIFEST_REQUEST } = await runUpdateNotifier(t, { version: CURRENT_BETA })
+ const {
+ wroteFile,
+ result,
+ MANIFEST_REQUEST,
+ } = await runUpdateNotifier(t, { version: CURRENT_BETA })
t.equal(result, null)
+ t.equal(wroteFile, true)
const reqs = [`npm@^${CURRENT_BETA}`]
t.strictSame(MANIFEST_REQUEST, reqs, 'requested latest and next versions')
})
t.test('do not update in CI', async t => {
- const { result, MANIFEST_REQUEST } = await runUpdateNotifier(t, { mocks: {
+ const { wroteFile, result, MANIFEST_REQUEST } = await runUpdateNotifier(t, { mocks: {
'ci-info': { isCI: true, name: 'something' },
} })
+ t.equal(wroteFile, false)
t.equal(result, null)
t.strictSame(MANIFEST_REQUEST, [], 'no requests for manifests')
})
@@ -175,7 +197,8 @@ t.test('situations in which we do not notify', t => {
t.test('only check weekly for GA releases', async t => {
// One week (plus five minutes to account for test environment fuzziness)
const STAT_MTIME = Date.now() - 1000 * 60 * 60 * 24 * 7 + 1000 * 60 * 5
- const { result, MANIFEST_REQUEST } = await runUpdateNotifier(t, { STAT_MTIME })
+ const { wroteFile, result, MANIFEST_REQUEST } = await runUpdateNotifier(t, { STAT_MTIME })
+ t.equal(wroteFile, false, 'duration was not reset')
t.equal(result, null)
t.strictSame(MANIFEST_REQUEST, [], 'no requests for manifests')
})
@@ -183,9 +206,14 @@ t.test('situations in which we do not notify', t => {
t.test('only check daily for betas', async t => {
// One day (plus five minutes to account for test environment fuzziness)
const STAT_MTIME = Date.now() - 1000 * 60 * 60 * 24 + 1000 * 60 * 5
- const res = await runUpdateNotifier(t, { STAT_MTIME, version: HAVE_BETA })
- t.equal(res.result, null)
- t.strictSame(res.MANIFEST_REQUEST, [], 'no requests for manifests')
+ const {
+ wroteFile,
+ result,
+ MANIFEST_REQUEST,
+ } = await runUpdateNotifier(t, { STAT_MTIME, version: HAVE_BETA })
+ t.equal(wroteFile, false, 'duration was not reset')
+ t.equal(result, null)
+ t.strictSame(MANIFEST_REQUEST, [], 'no requests for manifests')
})
t.end()
@@ -204,8 +232,13 @@ t.test('notification situations', async t => {
for (const [version, reqs] of Object.entries(cases)) {
for (const color of [false, 'always']) {
await t.test(`${version} - color=${color}`, async t => {
- const { result, MANIFEST_REQUEST } = await runUpdateNotifier(t, { version, color })
+ const {
+ wroteFile,
+ result,
+ MANIFEST_REQUEST,
+ } = await runUpdateNotifier(t, { version, color })
t.matchSnapshot(result)
+ t.equal(wroteFile, true)
t.strictSame(MANIFEST_REQUEST, reqs.map(r => `npm@${r.replace('{V}', version)}`))
})
}
diff --git a/deps/openssl/unofficial.gni b/deps/openssl/unofficial.gni
index 31f31043812427..5d58d1d55152f7 100644
--- a/deps/openssl/unofficial.gni
+++ b/deps/openssl/unofficial.gni
@@ -88,6 +88,11 @@ template("openssl_gn_build") {
configs += [ ":openssl_internal_config" ]
public_configs = [ ":openssl_external_config" ]
+ if (is_posix) {
+ configs -= [ "//build/config/gcc:symbol_visibility_hidden" ]
+ configs += [ "//build/config/gcc:symbol_visibility_default" ]
+ }
+
config_path_name = ""
if (is_win) {
if (target_cpu == "x86") {
diff --git a/deps/simdjson/simdjson.cpp b/deps/simdjson/simdjson.cpp
index 4dd913b70ba65a..5511f3d037bc33 100644
--- a/deps/simdjson/simdjson.cpp
+++ b/deps/simdjson/simdjson.cpp
@@ -1,4 +1,4 @@
-/* auto-generated on 2023-12-07 12:42:28 -0500. Do not edit! */
+/* auto-generated on 2024-02-18 11:50:12 -0500. Do not edit! */
/* including simdjson.cpp: */
/* begin file simdjson.cpp */
#define SIMDJSON_SRC_SIMDJSON_CPP
@@ -525,7 +525,7 @@ SIMDJSON_PUSH_DISABLE_ALL_WARNINGS
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-#pragma once
+// #pragma once // We remove #pragma once here as it generates a warning in some cases. We rely on the include guard.
#ifndef NONSTD_SV_LITE_H_INCLUDED
#define NONSTD_SV_LITE_H_INCLUDED
@@ -588,6 +588,10 @@ SIMDJSON_PUSH_DISABLE_ALL_WARNINGS
# define nssv_CONFIG_NO_STREAM_INSERTION 0
#endif
+#ifndef nssv_CONFIG_CONSTEXPR11_STD_SEARCH
+# define nssv_CONFIG_CONSTEXPR11_STD_SEARCH 1
+#endif
+
// Control presence of exception handling (try and auto discover):
#ifndef nssv_CONFIG_NO_EXCEPTIONS
@@ -786,7 +790,7 @@ using std::operator<<;
# define nssv_HAS_CPP0X 0
#endif
-// Unless defined otherwise below, consider VC14 as C++11 for variant-lite:
+// Unless defined otherwise below, consider VC14 as C++11 for string-view-lite:
#if nssv_COMPILER_MSVC_VER >= 1900
# undef nssv_CPP11_OR_GREATER
@@ -953,9 +957,9 @@ using std::operator<<;
# pragma clang diagnostic ignored "-Wreserved-user-defined-literal"
# pragma clang diagnostic push
# pragma clang diagnostic ignored "-Wuser-defined-literals"
-#elif defined(__GNUC__)
-# pragma GCC diagnostic push
-# pragma GCC diagnostic ignored "-Wliteral-suffix"
+#elif nssv_COMPILER_GNUC_VERSION >= 480
+# pragma GCC diagnostic push
+# pragma GCC diagnostic ignored "-Wliteral-suffix"
#endif // __clang__
#if nssv_COMPILER_MSVC_VERSION >= 140
@@ -970,8 +974,8 @@ using std::operator<<;
#if defined(__clang__)
# define nssv_RESTORE_WARNINGS() _Pragma("clang diagnostic pop")
-#elif defined(__GNUC__)
-# define nssv_RESTORE_WARNINGS() _Pragma("GCC diagnostic pop")
+#elif nssv_COMPILER_GNUC_VERSION >= 480
+# define nssv_RESTORE_WARNINGS() _Pragma("GCC diagnostic pop")
#elif nssv_COMPILER_MSVC_VERSION >= 140
# define nssv_RESTORE_WARNINGS() __pragma(warning(pop ))
#else
@@ -1086,12 +1090,31 @@ constexpr const CharT* search( basic_string_view haystack, basic_
// non-recursive:
+#if nssv_CONFIG_CONSTEXPR11_STD_SEARCH
+
template< class CharT, class Traits = std::char_traits >
constexpr const CharT* search( basic_string_view haystack, basic_string_view needle )
{
return std::search( haystack.begin(), haystack.end(), needle.begin(), needle.end() );
}
+#else // nssv_CONFIG_CONSTEXPR11_STD_SEARCH
+
+template< class CharT, class Traits = std::char_traits >
+nssv_constexpr14 const CharT* search( basic_string_view haystack, basic_string_view needle )
+{
+ while ( needle.size() <= haystack.size() )
+ {
+ if ( haystack.starts_with(needle) )
+ {
+ return haystack.cbegin();
+ }
+ haystack = basic_string_view{ haystack.begin() + 1, haystack.size() - 1U };
+ }
+ return haystack.cend();
+}
+#endif // nssv_CONFIG_CONSTEXPR11_STD_SEARCH
+
#endif // OPTIMIZE
#endif // nssv_CPP11_OR_GREATER && ! nssv_CPP17_OR_GREATER
@@ -1364,7 +1387,7 @@ class basic_string_view
// find(), 4x:
- nssv_constexpr size_type find( basic_string_view v, size_type pos = 0 ) const nssv_noexcept // (1)
+ nssv_constexpr14 size_type find( basic_string_view v, size_type pos = 0 ) const nssv_noexcept // (1)
{
return assert( v.size() == 0 || v.data() != nssv_nullptr )
, pos >= size()
@@ -7111,6 +7134,38 @@ static const simdjson::westmere::implementation* get_westmere_singleton() {
namespace simdjson {
namespace internal {
+// When there is a single implementation, we should not pay a price
+// for dispatching to the best implementation. We should just use the
+// one we have. This is a compile-time check.
+#define SIMDJSON_SINGLE_IMPLEMENTATION (SIMDJSON_IMPLEMENTATION_ICELAKE \
+ + SIMDJSON_IMPLEMENTATION_HASWELL + SIMDJSON_IMPLEMENTATION_WESTMERE \
+ + SIMDJSON_IMPLEMENTATION_ARM64 + SIMDJSON_IMPLEMENTATION_PPC64 \
+ + SIMDJSON_IMPLEMENTATION_FALLBACK == 1)
+
+#if SIMDJSON_SINGLE_IMPLEMENTATION
+ static const implementation* get_single_implementation() {
+ return
+#if SIMDJSON_IMPLEMENTATION_ICELAKE
+ get_icelake_singleton();
+#endif
+#if SIMDJSON_IMPLEMENTATION_HASWELL
+ get_haswell_singleton();
+#endif
+#if SIMDJSON_IMPLEMENTATION_WESTMERE
+ get_westmere_singleton();
+#endif
+#if SIMDJSON_IMPLEMENTATION_ARM64
+ get_arm64_singleton();
+#endif
+#if SIMDJSON_IMPLEMENTATION_PPC64
+ get_ppc64_singleton();
+#endif
+#if SIMDJSON_IMPLEMENTATION_FALLBACK
+ get_fallback_singleton();
+#endif
+}
+#endif
+
// Static array of known implementations. We're hoping these get baked into the executable
// without requiring a static initializer.
@@ -7240,9 +7295,16 @@ SIMDJSON_DLLIMPORTEXPORT const internal::available_implementation_list& get_avai
}
SIMDJSON_DLLIMPORTEXPORT internal::atomic_ptr& get_active_implementation() {
- static const internal::detect_best_supported_implementation_on_first_use detect_best_supported_implementation_on_first_use_singleton;
- static internal::atomic_ptr active_implementation{&detect_best_supported_implementation_on_first_use_singleton};
- return active_implementation;
+#if SIMDJSON_SINGLE_IMPLEMENTATION
+ // We immediately select the only implementation we have, skipping the
+ // detect_best_supported_implementation_on_first_use_singleton.
+ static internal::atomic_ptr active_implementation{internal::get_single_implementation()};
+ return active_implementation;
+#else
+ static const internal::detect_best_supported_implementation_on_first_use detect_best_supported_implementation_on_first_use_singleton;
+ static internal::atomic_ptr active_implementation{&detect_best_supported_implementation_on_first_use_singleton};
+ return active_implementation;
+#endif
}
simdjson_warn_unused error_code minify(const char *buf, size_t len, char *dst, size_t &dst_len) noexcept {
@@ -8991,7 +9053,7 @@ simdjson_inline error_code parse_exponent(simdjson_unused const uint8_t *const s
// If there were more than 18 digits, we may have overflowed the integer. We have to do
// something!!!!
if (simdjson_unlikely(p > start_exp+18)) {
- // Skip leading zeroes: 1e000000000000000000001 is technically valid and doesn't overflow
+ // Skip leading zeroes: 1e000000000000000000001 is technically valid and does not overflow
while (*start_exp == '0') { start_exp++; }
// 19 digits could overflow int64_t and is kind of absurd anyway. We don't
// support exponents smaller than -999,999,999,999,999,999 and bigger
@@ -9025,11 +9087,8 @@ simdjson_inline size_t significant_digits(const uint8_t * start_digits, size_t d
} // unnamed namespace
/** @private */
-template
-error_code slow_float_parsing(simdjson_unused const uint8_t * src, W writer) {
- double d;
- if (parse_float_fallback(src, &d)) {
- writer.append_double(d);
+static error_code slow_float_parsing(simdjson_unused const uint8_t * src, double* answer) {
+ if (parse_float_fallback(src, answer)) {
return SUCCESS;
}
return INVALID_NUMBER(src);
@@ -9053,13 +9112,13 @@ simdjson_inline error_code write_float(const uint8_t *const src, bool negative,
// 10000000000000000000000000000000000000000000e+308
// 3.1415926535897932384626433832795028841971693993751
//
- // NOTE: This makes a *copy* of the writer and passes it to slow_float_parsing. This happens
- // because slow_float_parsing is a non-inlined function. If we passed our writer reference to
- // it, it would force it to be stored in memory, preventing the compiler from picking it apart
- // and putting into registers. i.e. if we pass it as reference, it gets slow.
- // This is what forces the skip_double, as well.
- error_code error = slow_float_parsing(src, writer);
- writer.skip_double();
+ // NOTE: We do not pass a reference to the to slow_float_parsing. If we passed our writer
+ // reference to it, it would force it to be stored in memory, preventing the compiler from
+ // picking it apart and putting into registers. i.e. if we pass it as reference,
+ // it gets slow.
+ double d;
+ error_code error = slow_float_parsing(src, &d);
+ writer.append_double(d);
return error;
}
// NOTE: it's weird that the simdjson_unlikely() only wraps half the if, but it seems to get slower any other
@@ -9191,7 +9250,7 @@ simdjson_inline error_code parse_number(const uint8_t *const src, W &writer) {
} else if (src[0] != uint8_t('1') || i <= uint64_t(INT64_MAX)) { return INVALID_NUMBER(src); }
}
- // Write unsigned if it doesn't fit in a signed integer.
+ // Write unsigned if it does not fit in a signed integer.
if (i > uint64_t(INT64_MAX)) {
WRITE_UNSIGNED(i, src, writer);
} else {
@@ -10852,7 +10911,7 @@ namespace simdjson {
namespace arm64 {
namespace {
-simdjson_inline simd8 must_be_2_3_continuation(const simd8 prev2, const simd8 prev3);
+simdjson_inline simd8 must_be_2_3_continuation(const simd8 prev2, const simd8 prev3);
simdjson_inline bool is_ascii(const simd8x64& input);
} // unnamed namespace
@@ -11419,7 +11478,7 @@ using namespace simd;
const simd8 prev_input, const simd8 sc) {
simd8 prev2 = input.prev<2>(prev_input);
simd8 prev3 = input.prev<3>(prev_input);
- simd8 must23 = simd8(must_be_2_3_continuation(prev2, prev3));
+ simd8 must23 = must_be_2_3_continuation(prev2, prev3);
simd8 must23_80 = must23 & uint8_t(0x80);
return must23_80 ^ sc;
}
@@ -12095,7 +12154,7 @@ simdjson_inline size_t trim_partial_utf8(const uint8_t *buf, size_t len) {
// up enough CPU: the second half of the functions is highly serial, only using 1 execution core
// at a time. The second input's scans has some dependency on the first ones finishing it, but
// they can make a lot of progress before they need that information.
-// 3. Step 1 doesn't use enough capacity, so we run some extra stuff while we're waiting for that
+// 3. Step 1 does not use enough capacity, so we run some extra stuff while we're waiting for that
// to finish: utf-8 checks and generating the output from the last iteration.
//
// The reason we run 2 inputs at a time, is steps 2 and 3 are *still* not enough to soak up all
@@ -13614,10 +13673,10 @@ simdjson_unused simdjson_inline simd8 must_be_continuation(const simd8 must_be_2_3_continuation(const simd8 prev2, const simd8 prev3) {
- simd8 is_third_byte = prev2 >= uint8_t(0xe0u);
- simd8 is_fourth_byte = prev3 >= uint8_t(0xf0u);
- return is_third_byte ^ is_fourth_byte;
+simdjson_inline simd8 must_be_2_3_continuation(const simd8 prev2, const simd8 prev3) {
+ simd8 is_third_byte = prev2.saturating_sub(0xe0u-0x80); // Only 111_____ will be >= 0x80
+ simd8 is_fourth_byte = prev3.saturating_sub(0xf0u-0x80); // Only 1111____ will be >= 0x80
+ return is_third_byte | is_fourth_byte;
}
} // unnamed namespace
@@ -13687,192 +13746,259 @@ simdjson_warn_unused error_code dom_parser_implementation::parse(const uint8_t *
#endif // SIMDJSON_SRC_ARM64_CPP
/* end file arm64.cpp */
#endif
-#if SIMDJSON_IMPLEMENTATION_FALLBACK
-/* including fallback.cpp: #include */
-/* begin file fallback.cpp */
-#ifndef SIMDJSON_SRC_FALLBACK_CPP
-#define SIMDJSON_SRC_FALLBACK_CPP
+#if SIMDJSON_IMPLEMENTATION_HASWELL
+/* including haswell.cpp: #include */
+/* begin file haswell.cpp */
+#ifndef SIMDJSON_SRC_HASWELL_CPP
+#define SIMDJSON_SRC_HASWELL_CPP
/* amalgamation skipped (editor-only): #ifndef SIMDJSON_CONDITIONAL_INCLUDE */
/* amalgamation skipped (editor-only): #include */
/* amalgamation skipped (editor-only): #endif // SIMDJSON_CONDITIONAL_INCLUDE */
-/* including simdjson/fallback.h: #include */
-/* begin file simdjson/fallback.h */
-#ifndef SIMDJSON_FALLBACK_H
-#define SIMDJSON_FALLBACK_H
+/* including simdjson/haswell.h: #include */
+/* begin file simdjson/haswell.h */
+#ifndef SIMDJSON_HASWELL_H
+#define SIMDJSON_HASWELL_H
-/* including simdjson/fallback/begin.h: #include "simdjson/fallback/begin.h" */
-/* begin file simdjson/fallback/begin.h */
-/* defining SIMDJSON_IMPLEMENTATION to "fallback" */
-#define SIMDJSON_IMPLEMENTATION fallback
-/* including simdjson/fallback/base.h: #include "simdjson/fallback/base.h" */
-/* begin file simdjson/fallback/base.h */
-#ifndef SIMDJSON_FALLBACK_BASE_H
-#define SIMDJSON_FALLBACK_BASE_H
+/* including simdjson/haswell/begin.h: #include "simdjson/haswell/begin.h" */
+/* begin file simdjson/haswell/begin.h */
+/* defining SIMDJSON_IMPLEMENTATION to "haswell" */
+#define SIMDJSON_IMPLEMENTATION haswell
+
+/* including simdjson/haswell/base.h: #include "simdjson/haswell/base.h" */
+/* begin file simdjson/haswell/base.h */
+#ifndef SIMDJSON_HASWELL_BASE_H
+#define SIMDJSON_HASWELL_BASE_H
/* amalgamation skipped (editor-only): #ifndef SIMDJSON_CONDITIONAL_INCLUDE */
/* amalgamation skipped (editor-only): #include "simdjson/base.h" */
/* amalgamation skipped (editor-only): #endif // SIMDJSON_CONDITIONAL_INCLUDE */
+// The constructor may be executed on any host, so we take care not to use SIMDJSON_TARGET_HASWELL
namespace simdjson {
/**
- * Fallback implementation (runs on any machine).
+ * Implementation for Haswell (Intel AVX2).
*/
-namespace fallback {
+namespace haswell {
class implementation;
-} // namespace fallback
+namespace {
+namespace simd {
+template struct simd8;
+template struct simd8x64;
+} // namespace simd
+} // unnamed namespace
+
+} // namespace haswell
} // namespace simdjson
-#endif // SIMDJSON_FALLBACK_BASE_H
-/* end file simdjson/fallback/base.h */
-/* including simdjson/fallback/bitmanipulation.h: #include "simdjson/fallback/bitmanipulation.h" */
-/* begin file simdjson/fallback/bitmanipulation.h */
-#ifndef SIMDJSON_FALLBACK_BITMANIPULATION_H
-#define SIMDJSON_FALLBACK_BITMANIPULATION_H
+#endif // SIMDJSON_HASWELL_BASE_H
+/* end file simdjson/haswell/base.h */
+/* including simdjson/haswell/intrinsics.h: #include "simdjson/haswell/intrinsics.h" */
+/* begin file simdjson/haswell/intrinsics.h */
+#ifndef SIMDJSON_HASWELL_INTRINSICS_H
+#define SIMDJSON_HASWELL_INTRINSICS_H
/* amalgamation skipped (editor-only): #ifndef SIMDJSON_CONDITIONAL_INCLUDE */
-/* amalgamation skipped (editor-only): #include "simdjson/fallback/base.h" */
+/* amalgamation skipped (editor-only): #include "simdjson/haswell/base.h" */
+/* amalgamation skipped (editor-only): #endif // SIMDJSON_CONDITIONAL_INCLUDE */
+
+#if SIMDJSON_VISUAL_STUDIO
+// under clang within visual studio, this will include
+#include // visual studio or clang
+#else
+#include // elsewhere
+#endif // SIMDJSON_VISUAL_STUDIO
+
+#if SIMDJSON_CLANG_VISUAL_STUDIO
+/**
+ * You are not supposed, normally, to include these
+ * headers directly. Instead you should either include intrin.h
+ * or x86intrin.h. However, when compiling with clang
+ * under Windows (i.e., when _MSC_VER is set), these headers
+ * only get included *if* the corresponding features are detected
+ * from macros:
+ * e.g., if __AVX2__ is set... in turn, we normally set these
+ * macros by compiling against the corresponding architecture
+ * (e.g., arch:AVX2, -mavx2, etc.) which compiles the whole
+ * software with these advanced instructions. In simdjson, we
+ * want to compile the whole program for a generic target,
+ * and only target our specific kernels. As a workaround,
+ * we directly include the needed headers. These headers would
+ * normally guard against such usage, but we carefully included
+ * (or ) before, so the headers
+ * are fooled.
+ */
+#include // for _blsr_u64
+#include // for __lzcnt64
+#include // for most things (AVX2, AVX512, _popcnt64)
+#include
+#include
+#include
+#include
+#include // for _mm_clmulepi64_si128
+// unfortunately, we may not get _blsr_u64, but, thankfully, clang
+// has it as a macro.
+#ifndef _blsr_u64
+// we roll our own
+#define _blsr_u64(n) ((n - 1) & n)
+#endif // _blsr_u64
+#endif // SIMDJSON_CLANG_VISUAL_STUDIO
+
+static_assert(sizeof(__m256i) <= simdjson::SIMDJSON_PADDING, "insufficient padding for haswell kernel.");
+
+#endif // SIMDJSON_HASWELL_INTRINSICS_H
+/* end file simdjson/haswell/intrinsics.h */
+
+#if !SIMDJSON_CAN_ALWAYS_RUN_HASWELL
+SIMDJSON_TARGET_REGION("avx2,bmi,pclmul,lzcnt,popcnt")
+#endif
+
+/* including simdjson/haswell/bitmanipulation.h: #include "simdjson/haswell/bitmanipulation.h" */
+/* begin file simdjson/haswell/bitmanipulation.h */
+#ifndef SIMDJSON_HASWELL_BITMANIPULATION_H
+#define SIMDJSON_HASWELL_BITMANIPULATION_H
+
+/* amalgamation skipped (editor-only): #ifndef SIMDJSON_CONDITIONAL_INCLUDE */
+/* amalgamation skipped (editor-only): #include "simdjson/haswell/base.h" */
+/* amalgamation skipped (editor-only): #include "simdjson/haswell/intrinsics.h" */
+/* amalgamation skipped (editor-only): #include "simdjson/haswell/bitmask.h" */
/* amalgamation skipped (editor-only): #endif // SIMDJSON_CONDITIONAL_INCLUDE */
namespace simdjson {
-namespace fallback {
+namespace haswell {
namespace {
-#if defined(_MSC_VER) && !defined(_M_ARM64) && !defined(_M_X64)
-static inline unsigned char _BitScanForward64(unsigned long* ret, uint64_t x) {
- unsigned long x0 = (unsigned long)x, top, bottom;
- _BitScanForward(&top, (unsigned long)(x >> 32));
- _BitScanForward(&bottom, x0);
- *ret = x0 ? bottom : 32 + top;
- return x != 0;
+// We sometimes call trailing_zero on inputs that are zero,
+// but the algorithms do not end up using the returned value.
+// Sadly, sanitizers are not smart enough to figure it out.
+SIMDJSON_NO_SANITIZE_UNDEFINED
+// This function can be used safely even if not all bytes have been
+// initialized.
+// See issue https://github.com/simdjson/simdjson/issues/1965
+SIMDJSON_NO_SANITIZE_MEMORY
+simdjson_inline int trailing_zeroes(uint64_t input_num) {
+#if SIMDJSON_REGULAR_VISUAL_STUDIO
+ return (int)_tzcnt_u64(input_num);
+#else // SIMDJSON_REGULAR_VISUAL_STUDIO
+ ////////
+ // You might expect the next line to be equivalent to
+ // return (int)_tzcnt_u64(input_num);
+ // but the generated code differs and might be less efficient?
+ ////////
+ return __builtin_ctzll(input_num);
+#endif // SIMDJSON_REGULAR_VISUAL_STUDIO
}
-static unsigned char _BitScanReverse64(unsigned long* ret, uint64_t x) {
- unsigned long x1 = (unsigned long)(x >> 32), top, bottom;
- _BitScanReverse(&top, x1);
- _BitScanReverse(&bottom, (unsigned long)x);
- *ret = x1 ? top + 32 : bottom;
- return x != 0;
+
+/* result might be undefined when input_num is zero */
+simdjson_inline uint64_t clear_lowest_bit(uint64_t input_num) {
+ return _blsr_u64(input_num);
}
-#endif
/* result might be undefined when input_num is zero */
simdjson_inline int leading_zeroes(uint64_t input_num) {
-#ifdef _MSC_VER
- unsigned long leading_zero = 0;
- // Search the mask data from most significant bit (MSB)
- // to least significant bit (LSB) for a set bit (1).
- if (_BitScanReverse64(&leading_zero, input_num))
- return (int)(63 - leading_zero);
- else
- return 64;
+ return int(_lzcnt_u64(input_num));
+}
+
+#if SIMDJSON_REGULAR_VISUAL_STUDIO
+simdjson_inline unsigned __int64 count_ones(uint64_t input_num) {
+ // note: we do not support legacy 32-bit Windows in this kernel
+ return __popcnt64(input_num);// Visual Studio wants two underscores
+}
#else
- return __builtin_clzll(input_num);
-#endif// _MSC_VER
+simdjson_inline long long int count_ones(uint64_t input_num) {
+ return _popcnt64(input_num);
+}
+#endif
+
+simdjson_inline bool add_overflow(uint64_t value1, uint64_t value2,
+ uint64_t *result) {
+#if SIMDJSON_REGULAR_VISUAL_STUDIO
+ return _addcarry_u64(0, value1, value2,
+ reinterpret_cast(result));
+#else
+ return __builtin_uaddll_overflow(value1, value2,
+ reinterpret_cast(result));
+#endif
}
} // unnamed namespace
-} // namespace fallback
+} // namespace haswell
} // namespace simdjson
-#endif // SIMDJSON_FALLBACK_BITMANIPULATION_H
-/* end file simdjson/fallback/bitmanipulation.h */
-/* including simdjson/fallback/stringparsing_defs.h: #include "simdjson/fallback/stringparsing_defs.h" */
-/* begin file simdjson/fallback/stringparsing_defs.h */
-#ifndef SIMDJSON_FALLBACK_STRINGPARSING_DEFS_H
-#define SIMDJSON_FALLBACK_STRINGPARSING_DEFS_H
+#endif // SIMDJSON_HASWELL_BITMANIPULATION_H
+/* end file simdjson/haswell/bitmanipulation.h */
+/* including simdjson/haswell/bitmask.h: #include "simdjson/haswell/bitmask.h" */
+/* begin file simdjson/haswell/bitmask.h */
+#ifndef SIMDJSON_HASWELL_BITMASK_H
+#define SIMDJSON_HASWELL_BITMASK_H
/* amalgamation skipped (editor-only): #ifndef SIMDJSON_CONDITIONAL_INCLUDE */
-/* amalgamation skipped (editor-only): #include "simdjson/fallback/base.h" */
+/* amalgamation skipped (editor-only): #include "simdjson/haswell/base.h" */
+/* amalgamation skipped (editor-only): #include "simdjson/haswell/intrinsics.h" */
/* amalgamation skipped (editor-only): #endif // SIMDJSON_CONDITIONAL_INCLUDE */
namespace simdjson {
-namespace fallback {
+namespace haswell {
namespace {
-// Holds backslashes and quotes locations.
-struct backslash_and_quote {
-public:
- static constexpr uint32_t BYTES_PROCESSED = 1;
- simdjson_inline static backslash_and_quote copy_and_find(const uint8_t *src, uint8_t *dst);
-
- simdjson_inline bool has_quote_first() { return c == '"'; }
- simdjson_inline bool has_backslash() { return c == '\\'; }
- simdjson_inline int quote_index() { return c == '"' ? 0 : 1; }
- simdjson_inline int backslash_index() { return c == '\\' ? 0 : 1; }
-
- uint8_t c;
-}; // struct backslash_and_quote
-
-simdjson_inline backslash_and_quote backslash_and_quote::copy_and_find(const uint8_t *src, uint8_t *dst) {
- // store to dest unconditionally - we can overwrite the bits we don't like later
- dst[0] = src[0];
- return { src[0] };
+//
+// Perform a "cumulative bitwise xor," flipping bits each time a 1 is encountered.
+//
+// For example, prefix_xor(00100100) == 00011100
+//
+simdjson_inline uint64_t prefix_xor(const uint64_t bitmask) {
+ // There should be no such thing with a processor supporting avx2
+ // but not clmul.
+ __m128i all_ones = _mm_set1_epi8('\xFF');
+ __m128i result = _mm_clmulepi64_si128(_mm_set_epi64x(0ULL, bitmask), all_ones, 0);
+ return _mm_cvtsi128_si64(result);
}
} // unnamed namespace
-} // namespace fallback
+} // namespace haswell
} // namespace simdjson
-#endif // SIMDJSON_FALLBACK_STRINGPARSING_DEFS_H
-/* end file simdjson/fallback/stringparsing_defs.h */
-/* including simdjson/fallback/numberparsing_defs.h: #include "simdjson/fallback/numberparsing_defs.h" */
-/* begin file simdjson/fallback/numberparsing_defs.h */
-#ifndef SIMDJSON_FALLBACK_NUMBERPARSING_DEFS_H
-#define SIMDJSON_FALLBACK_NUMBERPARSING_DEFS_H
+#endif // SIMDJSON_HASWELL_BITMASK_H
+/* end file simdjson/haswell/bitmask.h */
+/* including simdjson/haswell/numberparsing_defs.h: #include "simdjson/haswell/numberparsing_defs.h" */
+/* begin file simdjson/haswell/numberparsing_defs.h */
+#ifndef SIMDJSON_HASWELL_NUMBERPARSING_DEFS_H
+#define SIMDJSON_HASWELL_NUMBERPARSING_DEFS_H
/* amalgamation skipped (editor-only): #ifndef SIMDJSON_CONDITIONAL_INCLUDE */
-/* amalgamation skipped (editor-only): #include "simdjson/fallback/base.h" */
-/* amalgamation skipped (editor-only): #include "simdjson/internal/numberparsing_tables.h" */
+/* amalgamation skipped (editor-only): #include "simdjson/haswell/base.h" */
+/* amalgamation skipped (editor-only): #include "simdjson/haswell/intrinsics.h" */
/* amalgamation skipped (editor-only): #endif // SIMDJSON_CONDITIONAL_INCLUDE */
-#include
-
-#ifdef JSON_TEST_NUMBERS // for unit testing
-void found_invalid_number(const uint8_t *buf);
-void found_integer(int64_t result, const uint8_t *buf);
-void found_unsigned_integer(uint64_t result, const uint8_t *buf);
-void found_float(double result, const uint8_t *buf);
-#endif
+/* amalgamation skipped (editor-only): #ifndef SIMDJSON_CONDITIONAL_INCLUDE */
+/* amalgamation skipped (editor-only): #include "simdjson/internal/numberparsing_tables.h" */
+/* amalgamation skipped (editor-only): #endif // SIMDJSON_CONDITIONAL_INCLUDE */
namespace simdjson {
-namespace fallback {
+namespace haswell {
namespace numberparsing {
-// credit: https://johnnylee-sde.github.io/Fast-numeric-string-to-int/
-/** @private */
-static simdjson_inline uint32_t parse_eight_digits_unrolled(const char *chars) {
- uint64_t val;
- memcpy(&val, chars, sizeof(uint64_t));
- val = (val & 0x0F0F0F0F0F0F0F0F) * 2561 >> 8;
- val = (val & 0x00FF00FF00FF00FF) * 6553601 >> 16;
- return uint32_t((val & 0x0000FFFF0000FFFF) * 42949672960001 >> 32);
-}
-
/** @private */
static simdjson_inline uint32_t parse_eight_digits_unrolled(const uint8_t *chars) {
- return parse_eight_digits_unrolled(reinterpret_cast(chars));
-}
-
-#if SIMDJSON_IS_32BITS // _umul128 for x86, arm
-// this is a slow emulation routine for 32-bit
-//
-static simdjson_inline uint64_t __emulu(uint32_t x, uint32_t y) {
- return x * (uint64_t)y;
-}
-static simdjson_inline uint64_t _umul128(uint64_t ab, uint64_t cd, uint64_t *hi) {
- uint64_t ad = __emulu((uint32_t)(ab >> 32), (uint32_t)cd);
- uint64_t bd = __emulu((uint32_t)ab, (uint32_t)cd);
- uint64_t adbc = ad + __emulu((uint32_t)ab, (uint32_t)(cd >> 32));
- uint64_t adbc_carry = !!(adbc < ad);
- uint64_t lo = bd + (adbc << 32);
- *hi = __emulu((uint32_t)(ab >> 32), (uint32_t)(cd >> 32)) + (adbc >> 32) +
- (adbc_carry << 32) + !!(lo < bd);
- return lo;
+ // this actually computes *16* values so we are being wasteful.
+ const __m128i ascii0 = _mm_set1_epi8('0');
+ const __m128i mul_1_10 =
+ _mm_setr_epi8(10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1);
+ const __m128i mul_1_100 = _mm_setr_epi16(100, 1, 100, 1, 100, 1, 100, 1);
+ const __m128i mul_1_10000 =
+ _mm_setr_epi16(10000, 1, 10000, 1, 10000, 1, 10000, 1);
+ const __m128i input = _mm_sub_epi8(
+ _mm_loadu_si128(reinterpret_cast(chars)), ascii0);
+ const __m128i t1 = _mm_maddubs_epi16(input, mul_1_10);
+ const __m128i t2 = _mm_madd_epi16(t1, mul_1_100);
+ const __m128i t3 = _mm_packus_epi32(t2, t2);
+ const __m128i t4 = _mm_madd_epi16(t3, mul_1_10000);
+ return _mm_cvtsi128_si32(
+ t4); // only captures the sum of the first 8 digits, drop the rest
}
-#endif
/** @private */
simdjson_inline internal::value128 full_multiplication(uint64_t value1, uint64_t value2) {
@@ -13894,136 +14020,562 @@ simdjson_inline internal::value128 full_multiplication(uint64_t value1, uint64_t
}
} // namespace numberparsing
-} // namespace fallback
+} // namespace haswell
} // namespace simdjson
#define SIMDJSON_SWAR_NUMBER_PARSING 1
-#endif // SIMDJSON_FALLBACK_NUMBERPARSING_DEFS_H
-/* end file simdjson/fallback/numberparsing_defs.h */
-/* end file simdjson/fallback/begin.h */
-/* including simdjson/generic/amalgamated.h for fallback: #include "simdjson/generic/amalgamated.h" */
-/* begin file simdjson/generic/amalgamated.h for fallback */
-#if defined(SIMDJSON_CONDITIONAL_INCLUDE) && !defined(SIMDJSON_GENERIC_DEPENDENCIES_H)
-#error simdjson/generic/dependencies.h must be included before simdjson/generic/amalgamated.h!
-#endif
-
-/* including simdjson/generic/base.h for fallback: #include "simdjson/generic/base.h" */
-/* begin file simdjson/generic/base.h for fallback */
-#ifndef SIMDJSON_GENERIC_BASE_H
+#endif // SIMDJSON_HASWELL_NUMBERPARSING_DEFS_H
+/* end file simdjson/haswell/numberparsing_defs.h */
+/* including simdjson/haswell/simd.h: #include "simdjson/haswell/simd.h" */
+/* begin file simdjson/haswell/simd.h */
+#ifndef SIMDJSON_HASWELL_SIMD_H
+#define SIMDJSON_HASWELL_SIMD_H
/* amalgamation skipped (editor-only): #ifndef SIMDJSON_CONDITIONAL_INCLUDE */
-/* amalgamation skipped (editor-only): #define SIMDJSON_GENERIC_BASE_H */
-/* amalgamation skipped (editor-only): #include "simdjson/base.h" */
-/* amalgamation skipped (editor-only): // If we haven't got an implementation yet, we're in the editor, editing a generic file! Just */
-/* amalgamation skipped (editor-only): // use the most advanced one we can so the most possible stuff can be tested. */
-/* amalgamation skipped (editor-only): #ifndef SIMDJSON_IMPLEMENTATION */
-/* amalgamation skipped (editor-only): #include "simdjson/implementation_detection.h" */
-/* amalgamation skipped (editor-only): #if SIMDJSON_IMPLEMENTATION_ICELAKE */
-/* amalgamation skipped (editor-only): #include "simdjson/icelake/begin.h" */
-/* amalgamation skipped (editor-only): #elif SIMDJSON_IMPLEMENTATION_HASWELL */
-/* amalgamation skipped (editor-only): #include "simdjson/haswell/begin.h" */
-/* amalgamation skipped (editor-only): #elif SIMDJSON_IMPLEMENTATION_WESTMERE */
-/* amalgamation skipped (editor-only): #include "simdjson/westmere/begin.h" */
-/* amalgamation skipped (editor-only): #elif SIMDJSON_IMPLEMENTATION_ARM64 */
-/* amalgamation skipped (editor-only): #include "simdjson/arm64/begin.h" */
-/* amalgamation skipped (editor-only): #elif SIMDJSON_IMPLEMENTATION_PPC64 */
-/* amalgamation skipped (editor-only): #include "simdjson/ppc64/begin.h" */
-/* amalgamation skipped (editor-only): #elif SIMDJSON_IMPLEMENTATION_FALLBACK */
-/* amalgamation skipped (editor-only): #include "simdjson/fallback/begin.h" */
-/* amalgamation skipped (editor-only): #else */
-/* amalgamation skipped (editor-only): #error "All possible implementations (including fallback) have been disabled! simdjson will not run." */
-/* amalgamation skipped (editor-only): #endif */
-/* amalgamation skipped (editor-only): #endif // SIMDJSON_IMPLEMENTATION */
+/* amalgamation skipped (editor-only): #include "simdjson/haswell/base.h" */
+/* amalgamation skipped (editor-only): #include "simdjson/haswell/intrinsics.h" */
+/* amalgamation skipped (editor-only): #include "simdjson/haswell/bitmanipulation.h" */
+/* amalgamation skipped (editor-only): #include "simdjson/internal/simdprune_tables.h" */
/* amalgamation skipped (editor-only): #endif // SIMDJSON_CONDITIONAL_INCLUDE */
namespace simdjson {
-namespace fallback {
+namespace haswell {
+namespace {
+namespace simd {
-struct open_container;
-class dom_parser_implementation;
+ // Forward-declared so they can be used by splat and friends.
+ template
+ struct base {
+ __m256i value;
-/**
- * The type of a JSON number
- */
-enum class number_type {
- floating_point_number=1, /// a binary64 number
- signed_integer, /// a signed integer that fits in a 64-bit word using two's complement
- unsigned_integer /// a positive integer larger or equal to 1<<63
-};
+ // Zero constructor
+ simdjson_inline base() : value{__m256i()} {}
-} // namespace fallback
-} // namespace simdjson
+ // Conversion from SIMD register
+ simdjson_inline base(const __m256i _value) : value(_value) {}
-#endif // SIMDJSON_GENERIC_BASE_H
-/* end file simdjson/generic/base.h for fallback */
-/* including simdjson/generic/jsoncharutils.h for fallback: #include "simdjson/generic/jsoncharutils.h" */
-/* begin file simdjson/generic/jsoncharutils.h for fallback */
-#ifndef SIMDJSON_GENERIC_JSONCHARUTILS_H
+ // Conversion to SIMD register
+ simdjson_inline operator const __m256i&() const { return this->value; }
+ simdjson_inline operator __m256i&() { return this->value; }
-/* amalgamation skipped (editor-only): #ifndef SIMDJSON_CONDITIONAL_INCLUDE */
-/* amalgamation skipped (editor-only): #define SIMDJSON_GENERIC_JSONCHARUTILS_H */
-/* amalgamation skipped (editor-only): #include "simdjson/generic/base.h" */
-/* amalgamation skipped (editor-only): #include "simdjson/internal/jsoncharutils_tables.h" */
-/* amalgamation skipped (editor-only): #include "simdjson/internal/numberparsing_tables.h" */
-/* amalgamation skipped (editor-only): #endif // SIMDJSON_CONDITIONAL_INCLUDE */
+ // Bit operations
+ simdjson_inline Child operator|(const Child other) const { return _mm256_or_si256(*this, other); }
+ simdjson_inline Child operator&(const Child other) const { return _mm256_and_si256(*this, other); }
+ simdjson_inline Child operator^(const Child other) const { return _mm256_xor_si256(*this, other); }
+ simdjson_inline Child bit_andnot(const Child other) const { return _mm256_andnot_si256(other, *this); }
+ simdjson_inline Child& operator|=(const Child other) { auto this_cast = static_cast(this); *this_cast = *this_cast | other; return *this_cast; }
+ simdjson_inline Child& operator&=(const Child other) { auto this_cast = static_cast(this); *this_cast = *this_cast & other; return *this_cast; }
+ simdjson_inline Child& operator^=(const Child other) { auto this_cast = static_cast(this); *this_cast = *this_cast ^ other; return *this_cast; }
+ };
-namespace simdjson {
-namespace fallback {
-namespace {
-namespace jsoncharutils {
+ // Forward-declared so they can be used by splat and friends.
+ template
+ struct simd8;
-// return non-zero if not a structural or whitespace char
-// zero otherwise
-simdjson_inline uint32_t is_not_structural_or_whitespace(uint8_t c) {
- return internal::structural_or_whitespace_negated[c];
-}
+ template>
+ struct base8: base> {
+ typedef uint32_t bitmask_t;
+ typedef uint64_t bitmask2_t;
-simdjson_inline uint32_t is_structural_or_whitespace(uint8_t c) {
- return internal::structural_or_whitespace[c];
-}
+ simdjson_inline base8() : base>() {}
+ simdjson_inline base8(const __m256i _value) : base>(_value) {}
-// returns a value with the high 16 bits set if not valid
-// otherwise returns the conversion of the 4 hex digits at src into the bottom
-// 16 bits of the 32-bit return register
-//
-// see
-// https://lemire.me/blog/2019/04/17/parsing-short-hexadecimal-strings-efficiently/
-static inline uint32_t hex_to_u32_nocheck(
- const uint8_t *src) { // strictly speaking, static inline is a C-ism
- uint32_t v1 = internal::digit_to_val32[630 + src[0]];
- uint32_t v2 = internal::digit_to_val32[420 + src[1]];
- uint32_t v3 = internal::digit_to_val32[210 + src[2]];
- uint32_t v4 = internal::digit_to_val32[0 + src[3]];
- return v1 | v2 | v3 | v4;
-}
+ friend simdjson_really_inline Mask operator==(const simd8 lhs, const simd8 rhs) { return _mm256_cmpeq_epi8(lhs, rhs); }
-// given a code point cp, writes to c
-// the utf-8 code, outputting the length in
-// bytes, if the length is zero, the code point
-// is invalid
-//
-// This can possibly be made faster using pdep
-// and clz and table lookups, but JSON documents
-// have few escaped code points, and the following
-// function looks cheap.
-//
-// Note: we assume that surrogates are treated separately
-//
-simdjson_inline size_t codepoint_to_utf8(uint32_t cp, uint8_t *c) {
- if (cp <= 0x7F) {
- c[0] = uint8_t(cp);
- return 1; // ascii
- }
- if (cp <= 0x7FF) {
- c[0] = uint8_t((cp >> 6) + 192);
- c[1] = uint8_t((cp & 63) + 128);
- return 2; // universal plane
- // Surrogates are treated elsewhere...
- //} //else if (0xd800 <= cp && cp <= 0xdfff) {
- // return 0; // surrogates // could put assert here
- } else if (cp <= 0xFFFF) {
- c[0] = uint8_t((cp >> 12) + 224);
+ static const int SIZE = sizeof(base::value);
+
+ template
+ simdjson_inline simd8 prev(const simd8 prev_chunk) const {
+ return _mm256_alignr_epi8(*this, _mm256_permute2x128_si256(prev_chunk, *this, 0x21), 16 - N);
+ }
+ };
+
+ // SIMD byte mask type (returned by things like eq and gt)
+ template<>
+ struct simd8: base8 {
+ static simdjson_inline simd8 splat(bool _value) { return _mm256_set1_epi8(uint8_t(-(!!_value))); }
+
+ simdjson_inline simd8() : base8() {}
+ simdjson_inline simd8(const __m256i _value) : base8(_value) {}
+ // Splat constructor
+ simdjson_inline simd8(bool _value) : base8(splat(_value)) {}
+
+ simdjson_inline int to_bitmask() const { return _mm256_movemask_epi8(*this); }
+ simdjson_inline bool any() const { return !_mm256_testz_si256(*this, *this); }
+ simdjson_inline simd8 operator~() const { return *this ^ true; }
+ };
+
+ template
+ struct base8_numeric: base8 {
+ static simdjson_inline simd8 splat(T _value) { return _mm256_set1_epi8(_value); }
+ static simdjson_inline simd8 zero() { return _mm256_setzero_si256(); }
+ static simdjson_inline simd8 load(const T values[32]) {
+ return _mm256_loadu_si256(reinterpret_cast(values));
+ }
+ // Repeat 16 values as many times as necessary (usually for lookup tables)
+ static simdjson_inline simd8 repeat_16(
+ T v0, T v1, T v2, T v3, T v4, T v5, T v6, T v7,
+ T v8, T v9, T v10, T v11, T v12, T v13, T v14, T v15
+ ) {
+ return simd8(
+ v0, v1, v2, v3, v4, v5, v6, v7,
+ v8, v9, v10,v11,v12,v13,v14,v15,
+ v0, v1, v2, v3, v4, v5, v6, v7,
+ v8, v9, v10,v11,v12,v13,v14,v15
+ );
+ }
+
+ simdjson_inline base8_numeric() : base8() {}
+ simdjson_inline base8_numeric(const __m256i _value) : base8(_value) {}
+
+ // Store to array
+ simdjson_inline void store(T dst[32]) const { return _mm256_storeu_si256(reinterpret_cast<__m256i *>(dst), *this); }
+
+ // Addition/subtraction are the same for signed and unsigned
+ simdjson_inline simd8 operator+(const simd8 other) const { return _mm256_add_epi8(*this, other); }
+ simdjson_inline simd8 operator-(const simd8 other) const { return _mm256_sub_epi8(*this, other); }
+ simdjson_inline simd8& operator+=(const simd8 other) { *this = *this + other; return *static_cast*>(this); }
+ simdjson_inline simd8& operator-=(const simd8 other) { *this = *this - other; return *static_cast*>(this); }
+
+ // Override to distinguish from bool version
+ simdjson_inline simd8 operator~() const { return *this ^ 0xFFu; }
+
+ // Perform a lookup assuming the value is between 0 and 16 (undefined behavior for out of range values)
+ template
+ simdjson_inline simd8 lookup_16(simd8 lookup_table) const {
+ return _mm256_shuffle_epi8(lookup_table, *this);
+ }
+
+ // Copies to 'output" all bytes corresponding to a 0 in the mask (interpreted as a bitset).
+ // Passing a 0 value for mask would be equivalent to writing out every byte to output.
+ // Only the first 32 - count_ones(mask) bytes of the result are significant but 32 bytes
+ // get written.
+ // Design consideration: it seems like a function with the
+ // signature simd8 compress(uint32_t mask) would be
+ // sensible, but the AVX ISA makes this kind of approach difficult.
+ template
+ simdjson_inline void compress(uint32_t mask, L * output) const {
+ using internal::thintable_epi8;
+ using internal::BitsSetTable256mul2;
+ using internal::pshufb_combine_table;
+ // this particular implementation was inspired by work done by @animetosho
+ // we do it in four steps, first 8 bytes and then second 8 bytes...
+ uint8_t mask1 = uint8_t(mask); // least significant 8 bits
+ uint8_t mask2 = uint8_t(mask >> 8); // second least significant 8 bits
+ uint8_t mask3 = uint8_t(mask >> 16); // ...
+ uint8_t mask4 = uint8_t(mask >> 24); // ...
+ // next line just loads the 64-bit values thintable_epi8[mask1] and
+ // thintable_epi8[mask2] into a 128-bit register, using only
+ // two instructions on most compilers.
+ __m256i shufmask = _mm256_set_epi64x(thintable_epi8[mask4], thintable_epi8[mask3],
+ thintable_epi8[mask2], thintable_epi8[mask1]);
+ // we increment by 0x08 the second half of the mask and so forth
+ shufmask =
+ _mm256_add_epi8(shufmask, _mm256_set_epi32(0x18181818, 0x18181818,
+ 0x10101010, 0x10101010, 0x08080808, 0x08080808, 0, 0));
+ // this is the version "nearly pruned"
+ __m256i pruned = _mm256_shuffle_epi8(*this, shufmask);
+ // we still need to put the pieces back together.
+ // we compute the popcount of the first words:
+ int pop1 = BitsSetTable256mul2[mask1];
+ int pop3 = BitsSetTable256mul2[mask3];
+
+ // then load the corresponding mask
+ // could be done with _mm256_loadu2_m128i but many standard libraries omit this intrinsic.
+ __m256i v256 = _mm256_castsi128_si256(
+ _mm_loadu_si128(reinterpret_cast(pshufb_combine_table + pop1 * 8)));
+ __m256i compactmask = _mm256_insertf128_si256(v256,
+ _mm_loadu_si128(reinterpret_cast(pshufb_combine_table + pop3 * 8)), 1);
+ __m256i almostthere = _mm256_shuffle_epi8(pruned, compactmask);
+ // We just need to write out the result.
+ // This is the tricky bit that is hard to do
+ // if we want to return a SIMD register, since there
+ // is no single-instruction approach to recombine
+ // the two 128-bit lanes with an offset.
+ __m128i v128;
+ v128 = _mm256_castsi256_si128(almostthere);
+ _mm_storeu_si128( reinterpret_cast<__m128i *>(output), v128);
+ v128 = _mm256_extractf128_si256(almostthere, 1);
+ _mm_storeu_si128( reinterpret_cast<__m128i *>(output + 16 - count_ones(mask & 0xFFFF)), v128);
+ }
+
+ template
+ simdjson_inline simd8 lookup_16(
+ L replace0, L replace1, L replace2, L replace3,
+ L replace4, L replace5, L replace6, L replace7,
+ L replace8, L replace9, L replace10, L replace11,
+ L replace12, L replace13, L replace14, L replace15) const {
+ return lookup_16(simd8::repeat_16(
+ replace0, replace1, replace2, replace3,
+ replace4, replace5, replace6, replace7,
+ replace8, replace9, replace10, replace11,
+ replace12, replace13, replace14, replace15
+ ));
+ }
+ };
+
+ // Signed bytes
+ template<>
+ struct simd8 : base8_numeric {
+ simdjson_inline simd8() : base8_numeric() {}
+ simdjson_inline simd8(const __m256i _value) : base8_numeric(_value) {}
+ // Splat constructor
+ simdjson_inline simd8(int8_t _value) : simd8(splat(_value)) {}
+ // Array constructor
+ simdjson_inline simd8(const int8_t values[32]) : simd8(load(values)) {}
+ // Member-by-member initialization
+ simdjson_inline simd8(
+ int8_t v0, int8_t v1, int8_t v2, int8_t v3, int8_t v4, int8_t v5, int8_t v6, int8_t v7,
+ int8_t v8, int8_t v9, int8_t v10, int8_t v11, int8_t v12, int8_t v13, int8_t v14, int8_t v15,
+ int8_t v16, int8_t v17, int8_t v18, int8_t v19, int8_t v20, int8_t v21, int8_t v22, int8_t v23,
+ int8_t v24, int8_t v25, int8_t v26, int8_t v27, int8_t v28, int8_t v29, int8_t v30, int8_t v31
+ ) : simd8(_mm256_setr_epi8(
+ v0, v1, v2, v3, v4, v5, v6, v7,
+ v8, v9, v10,v11,v12,v13,v14,v15,
+ v16,v17,v18,v19,v20,v21,v22,v23,
+ v24,v25,v26,v27,v28,v29,v30,v31
+ )) {}
+ // Repeat 16 values as many times as necessary (usually for lookup tables)
+ simdjson_inline static simd8 repeat_16(
+ int8_t v0, int8_t v1, int8_t v2, int8_t v3, int8_t v4, int8_t v5, int8_t v6, int8_t v7,
+ int8_t v8, int8_t v9, int8_t v10, int8_t v11, int8_t v12, int8_t v13, int8_t v14, int8_t v15
+ ) {
+ return simd8(
+ v0, v1, v2, v3, v4, v5, v6, v7,
+ v8, v9, v10,v11,v12,v13,v14,v15,
+ v0, v1, v2, v3, v4, v5, v6, v7,
+ v8, v9, v10,v11,v12,v13,v14,v15
+ );
+ }
+
+ // Order-sensitive comparisons
+ simdjson_inline simd8 max_val(const simd8 other) const { return _mm256_max_epi8(*this, other); }
+ simdjson_inline simd8 min_val(const simd8 other) const { return _mm256_min_epi8(*this, other); }
+ simdjson_inline simd8 operator>(const simd8 other) const { return _mm256_cmpgt_epi8(*this, other); }
+ simdjson_inline simd8 operator<(const simd8 other) const { return _mm256_cmpgt_epi8(other, *this); }
+ };
+
+ // Unsigned bytes
+ template<>
+ struct simd8: base8_numeric {
+ simdjson_inline simd8() : base8_numeric() {}
+ simdjson_inline simd8(const __m256i _value) : base8_numeric(_value) {}
+ // Splat constructor
+ simdjson_inline simd8(uint8_t _value) : simd8(splat(_value)) {}
+ // Array constructor
+ simdjson_inline simd8(const uint8_t values[32]) : simd8(load(values)) {}
+ // Member-by-member initialization
+ simdjson_inline simd8(
+ uint8_t v0, uint8_t v1, uint8_t v2, uint8_t v3, uint8_t v4, uint8_t v5, uint8_t v6, uint8_t v7,
+ uint8_t v8, uint8_t v9, uint8_t v10, uint8_t v11, uint8_t v12, uint8_t v13, uint8_t v14, uint8_t v15,
+ uint8_t v16, uint8_t v17, uint8_t v18, uint8_t v19, uint8_t v20, uint8_t v21, uint8_t v22, uint8_t v23,
+ uint8_t v24, uint8_t v25, uint8_t v26, uint8_t v27, uint8_t v28, uint8_t v29, uint8_t v30, uint8_t v31
+ ) : simd8(_mm256_setr_epi8(
+ v0, v1, v2, v3, v4, v5, v6, v7,
+ v8, v9, v10,v11,v12,v13,v14,v15,
+ v16,v17,v18,v19,v20,v21,v22,v23,
+ v24,v25,v26,v27,v28,v29,v30,v31
+ )) {}
+ // Repeat 16 values as many times as necessary (usually for lookup tables)
+ simdjson_inline static simd8 repeat_16(
+ uint8_t v0, uint8_t v1, uint8_t v2, uint8_t v3, uint8_t v4, uint8_t v5, uint8_t v6, uint8_t v7,
+ uint8_t v8, uint8_t v9, uint8_t v10, uint8_t v11, uint8_t v12, uint8_t v13, uint8_t v14, uint8_t v15
+ ) {
+ return simd8(
+ v0, v1, v2, v3, v4, v5, v6, v7,
+ v8, v9, v10,v11,v12,v13,v14,v15,
+ v0, v1, v2, v3, v4, v5, v6, v7,
+ v8, v9, v10,v11,v12,v13,v14,v15
+ );
+ }
+
+ // Saturated math
+ simdjson_inline simd8 saturating_add(const simd8 other) const { return _mm256_adds_epu8(*this, other); }
+ simdjson_inline simd8 saturating_sub(const simd8 other) const { return _mm256_subs_epu8(*this, other); }
+
+ // Order-specific operations
+ simdjson_inline simd8 max_val(const simd8 other) const { return _mm256_max_epu8(*this, other); }
+ simdjson_inline simd8 min_val(const simd8 other) const { return _mm256_min_epu8(other, *this); }
+ // Same as >, but only guarantees true is nonzero (< guarantees true = -1)
+ simdjson_inline simd8 gt_bits(const simd8 other) const { return this->saturating_sub(other); }
+ // Same as <, but only guarantees true is nonzero (< guarantees true = -1)
+ simdjson_inline simd8 lt_bits(const simd8 other) const { return other.saturating_sub(*this); }
+ simdjson_inline simd8 operator<=(const simd8 other) const { return other.max_val(*this) == other; }
+ simdjson_inline simd8 operator>=(const simd8 other) const { return other.min_val(*this) == other; }
+ simdjson_inline simd8 operator>(const simd8 other) const { return this->gt_bits(other).any_bits_set(); }
+ simdjson_inline simd8 operator<(const simd8